MediaWiki Wikibase extension
Todo List
Member Wikibase\Repo\Content\EntityHandler::__construct ( $modelId, $unused, EntityContentDataCodec $contentCodec, EntityConstraintProvider $constraintProvider, ValidatorErrorLocalizer $errorLocalizer, EntityIdParser $entityIdParser, FieldDefinitions $fieldDefinitions, $legacyExportFormatDetector=null)
Get rid of me
Member Wikibase\Repo\Merge\MergeFactory::newMergeOps (Item $fromItem, Item $toItem, array $ignoreConflicts=[])
Injecting ChangeOpFactoryProvider is an Abomination Unto Nuggan, we'll need a ItemMergeChangeOpsSequenceBuilder or some such.
Member Wikibase\Repo\LinkedData\EntityDataRequestHandler::MINIMUM_MAX_AGE
Hard maximum could be configurable somehow.
Member Wikibase\Repo\Hooks\ShowSearchHitHandler::onShowSearchHitTitle (&$title, &$titleSnippet, $result, $terms, $specialSearch, &$query, &$attributes)
Add highlighting when Q##-id matches and not label text.
Class Wikibase\Repo\GenericEventDispatcher
should go into MediaWiki core.
Member Wikibase\Repo\EditEntity\MediawikiEditEntity::updateWatchlist ( $watch)
move to separate service
Member Wikibase\Repo\EditEntity\EditEntity::attemptSave (EntityDocument $newEntity, $summary, $flags, $token, $watch=null, array $tags=[])

This shouldn't throw MWExceptions

$flags here should ideally not refer to EDIT_ constants from mediawiki core.

Member Wikibase\Repo\Notifications\RepoEntityChange::setMetadataFromRC (RecentChange $rc, $centralUserId)
rename to setRecentChangeInfo
Member Wikibase\Repo\ChangeOp\ChangeOpsMerge::__construct (Item $fromItem, Item $toItem, array $ignoreConflicts, EntityConstraintProvider $constraintProvider, ChangeOpFactoryProvider $changeOpFactoryProvider, SiteLookup $siteLookup, StatementsMerger $statementsMerger)
Injecting ChangeOpFactoryProvider is an Abomination Unto Nuggan, we'll need a MergeChangeOpsSequenceBuilder or some such. This will allow us to merge different kinds of entities nicely, too.
Member Wikibase\Repo\Api\SetClaim::getSummary (array $params, Statement $statement, StatementList $statementList)
this summary builder is ugly and summary stuff needs to be refactored
Member Wikibase\Repo\Api\ResultBuilder::addSiteLinkList (SiteLinkList $siteLinkList, $path, $addUrl=false)
use a SiteLinkListSerializer when created in DataModelSerialization here
Class Wikibase\Lib\WikibaseSettings
Move this to a separate component.
Member Wikibase\Lib\StringNormalizer::removeBadCharFirst ( $string)
this was stolen from the Language class. Make that code reusable.
Member Wikibase\Lib\StringNormalizer::removeBadCharLast ( $string)
this was stolen from the Language class. Make that code reusable.
Class Wikibase\Repo\StatementRankSerializer
this could be moved to DataModelSerialization (in some form)
Member Wikibase\Repo\Validators\UrlSchemeValidators::getValidator ( $scheme)

protocol relative '//'.

'bitcoin', 'geo', 'magnet', 'news', 'sip', 'sips', 'sms', 'tel', 'urn', 'xmpp'.

Class Wikibase\Repo\Store\Store
provide getXXX() methods for getting local pseudo-singletons (shared service objects).
Member Wikibase\Repo\Store\Sql\WikiPageEntityStore::isWatching (User $user, EntityId $id)
move this to a separate service
Member Wikibase\Repo\Store\Sql\WikiPageEntityStore::saveEntityContent (EntityContent $entityContent, User $user, $summary='', $flags=0, $baseRevId=false, array $tags=[])

now we use PageUpdater do we still need the 2 clear calls below?

Might be able to further optimize handling of prepared edit in WikiPage.

Class Wikibase\Lib\Store\Sql\WikiPageEntityMetaDataAccessor
This whole interface may no longer be needed with the introduction of RevisionRecord which can represent a revision on any wiki. MetaData accessing can probably be killed and instead RevisionRecord just be returned.
Member Wikibase\Repo\Rdf\TruthyStatementRdfBuilder::addMainSnak (EntityId $entityId, Statement $statement)
share more of this code with FullStatementRdfBuilder
Member Wikibase\Repo\Rdf\RdfBuilder::addEntityMetaData (EntityDocument $entity)
extract into MetaDataRdfBuilder
Member Wikibase\Repo\Rdf\RdfBuilder::addEntityRevisionInfo (EntityId $entityId, $revision, $timestamp)
extract into MetaDataRdfBuilder
Class Wikibase\Repo\Parsers\MwTimeIsoParser
move me to DataValues-time
Class Wikibase\Repo\ParserOutput\EntityParserOutputDataUpdaterCollection
have ItemParserOutputDataUpdater, etc. instead.
Member Wikibase\Repo\Notifications\RepoEntityChange::setMetadataFromUser (User $user, $centralUserId)
rename to setUserInfo
Member Wikibase\Client\Serializer\ClientEntitySerializer::getTermsSerializationWithFallbackInfo (array $serialization)
FIXME duplicated / similar code in Repo ResultBuilder
Class Wikibase\Lib\Formatters\CommonsThumbnailFormatter
Most feature requests require this to be a SnakFormatter instead of a ValueFormatter
Class Wikibase\Lib\Formatters\CommonsLinkFormatter
Use MediaWiki renderer
Class Wikibase\DataAccess\PrefetchingTermLookup
PrefetchingTermLookup probably wants an implementation that allows composing a service from multiple different parts. This would for example allow MediaInfo to use a default null AliasTermBuffer (as aliases do not exist in that context), while using a LabelLookup etc that looks up from the correct place.
Member Wikibase\DataAccess\EntitySourceDefinitions::getSourceForEntityType (string $entityType)
when the same entity type can be provided by multiple source (currently forbidden), this should return all sources
Class Wikibase\DataAccess\AliasTermBuffer
This or something similar should perhaps move to data-model-services
Member Wikibase\Client\Serializer\ClientSerializer::getArrayWithDataTypesInGroupedSnakListAtPath (array $array, $path)
FIXME duplicated / similar code in Repo ResultBuilder
Member Wikibase\Client\Serializer\ClientSerializer::injectSerializationWithDataTypes (array $serialization, $pathPrefix)
FIXME duplicated / similar code in Repo ResultBuilder
Member Wikibase\Client\Serializer\ClientEntitySerializer::filterEntitySerializationUsingLangCodes (array $serialization)
FIXME duplicated / similar code in Repo ResultBuilder
Class Wikibase\Lib\Formatters\DispatchingValueFormatter
Plain format() shouldn't be supported, formatValue() should require the dataType ID.
Member Wikibase\Client\Serializer\ClientEntitySerializer::addEntitySerializationFallbackInfo (array $serialization)
FIXME duplicated code in Repo ResultBuilder
Class Wikibase\Client\RecentChanges\RevisionData
Merge this into ExternalChange
Class Wikibase\Client\Hooks\LangLinkHandler
split this up and find a better home for stuff that adds parser output properties and extension data.
Member Wikibase\Client\DataAccess\Scribunto\WikibaseLuaEntityBindings::getLanguageCode ()
Once T114640 has been implemented, this should probably be generally exposed in Scribunto as parser target language.
Member Wikibase\Client\DataAccess\Scribunto\WikibaseLuaEntityBindings::getGlobalSiteId ()
Make this part of in the Scribunto extension.
Member Wikibase\Client\Changes\ChangeHandler::handleChange (EntityChange $change, array $rootJobParams=[])
process multiple changes at once!
Class Wikibase\Lib\Store\Sql\Terms\CleanTermsIfUnusedJob
Execute the cleanup of each table in its own transaction to further reduce lock contention
Member Wikibase\Lib\Store\Sql\SiteLinkTable::getItemIdForLink ( $globalSiteId, $pageTitle)
may want to deprecate this or change it to always return entity id object only
Class Wikibase\Lib\Store\HashSiteLinkStore
Should be moved to the tests folder and namespace.
Member Wikibase\Lib\Store\EntityTitleLookup::getTitleForId (EntityId $id)
change this to return a TitleValue
Member Wikibase\Lib\Store\EntityStore::isWatching (User $user, EntityId $id)
move this to a separate service
Member Wikibase\Lib\Store\EntityStore::updateWatchlist (User $user, EntityId $id, $watch)
move this to a separate service
Member Wikibase\Lib\Store\EntityIdLookup::getEntityIdForTitle (Title $title)
Switch this to using TitleValue once we can easily get the content model and handler based on a TitleValue.
Class Wikibase\Client\Api\ApiClientInfo
may want to include namespaces and other settings here too.
Member Wikibase\Lib\Formatters\TypedValueFormatter::formatValue (DataValue $value, $dataTypeId=null)
make $dataTypeId mandatory.
Member Wikibase\Lib\Formatters\QuantityDetailsFormatter::format ( $value)

Mark "unitless" units somehow, e.g. via CSS or with an appended message.

Display URIs that start with http:// or https:// as clickable links.

Display URIs to entities in the local repository as clickable labels.

Member Wikibase\Lib\Formatters\OutputFormatValueFormatterFactory::applyLanguageDefaults (FormatterOptions $options)

this shouldn't be public at all. Perhaps factor it out into a helper class.

: Sort out how the desired language is specified. We have two language options, each accepting different ways of specifying the language. That's not good.

Class Wikibase\Lib\Formatters\MwTimeIsoFormatter
move me to DataValues-time