WikidataBuilder has uploaded a new change for review. https://gerrit.wikimedia.org/r/220729
Change subject: New Wikidata Build - 2015-06-25T10:00:01+0000 ...................................................................... New Wikidata Build - 2015-06-25T10:00:01+0000 Change-Id: I5e8658e804c7ca652a1cf66df93e7aae5a76f7a8 --- M composer.lock A extensions/Wikibase/client/i18n/ase.json M extensions/Wikibase/client/i18n/en.json M extensions/Wikibase/client/i18n/luz.json M extensions/Wikibase/client/i18n/mk.json M extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php M extensions/Wikibase/client/includes/specials/SpecialUnconnectedPages.php M extensions/Wikibase/client/maintenance/populateEntityUsage.php A extensions/Wikibase/lib/i18n/ase.json M extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php M extensions/Wikibase/repo/Wikibase.hooks.php A extensions/Wikibase/repo/i18n/ase.json M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpFactoryProvider.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpRemoveStatement.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatement.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php M extensions/Wikibase/repo/includes/ChangeOp/ClaimChangeOpFactory.php M extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php M extensions/Wikibase/repo/includes/EntityParserOutputGeneratorFactory.php M extensions/Wikibase/repo/includes/WikibaseRepo.php M extensions/Wikibase/repo/includes/api/CreateClaim.php M extensions/Wikibase/repo/includes/api/GetClaims.php M extensions/Wikibase/repo/includes/api/ModifyClaim.php M extensions/Wikibase/repo/includes/rdf/RdfVocabulary.php M extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpStatementTest.php M extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpTestMockProvider.php M extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php M extensions/Wikibase/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php M extensions/Wikibase/repo/tests/phpunit/includes/RepoHooksTest.php M extensions/Wikibase/repo/tests/phpunit/includes/WikibaseRepoTest.php M extensions/Wikibase/repo/tests/phpunit/includes/content/EntityContentTest.php M extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php M extensions/Wikibase/repo/tests/phpunit/includes/rdf/RdfBuilderTestData.php M extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js M vendor/composer/installed.json 39 files changed, 391 insertions(+), 294 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata refs/changes/29/220729/1 diff --git a/composer.lock b/composer.lock index 04f7ce4..b914fc8 100644 --- a/composer.lock +++ b/composer.lock @@ -1326,12 +1326,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "3581172e065795559f80d7cebf4291123dd30018" + "reference": "df4d4e61295461858bd8c07928e2eaf7207b3910" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3581172e065795559f80d7cebf4291123dd30018", - "reference": "3581172e065795559f80d7cebf4291123dd30018", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/df4d4e61295461858bd8c07928e2eaf7207b3910", + "reference": "df4d4e61295461858bd8c07928e2eaf7207b3910", "shasum": "" }, "require": { @@ -1396,7 +1396,7 @@ "wikibaserepo", "wikidata" ], - "time": "2015-06-24 09:22:11" + "time": "2015-06-25 07:24:51" }, { "name": "wikibase/wikimedia-badges", diff --git a/extensions/Wikibase/client/i18n/ase.json b/extensions/Wikibase/client/i18n/ase.json new file mode 100644 index 0000000..5ce72b2 --- /dev/null +++ b/extensions/Wikibase/client/i18n/ase.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Icemandeaf" + ] + }, + "wikibase-editlinks": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M521x525S1ce10499x476S1ce48479x476S20a00491x510", + "wikibase-rc-hide-wikidata": "$1 {{WBREPONAME}}", + "wikibase-rc-hide-wikidata-show": "M521x531S10012491x516S15a18479x503S26620486x469", + "wikibase-rc-wikibase-edit-letter": "M508x515S10120492x485", + "wikibase-rc-wikibase-edit-title": "{{WBREPONAME}} M521x532S10609498x496S10621487x512S21100500x483S2df20479x468" +} diff --git a/extensions/Wikibase/client/i18n/en.json b/extensions/Wikibase/client/i18n/en.json index 7c06e5a..2bb6798 100644 --- a/extensions/Wikibase/client/i18n/en.json +++ b/extensions/Wikibase/client/i18n/en.json @@ -63,7 +63,7 @@ "wikibase-error-serialize-error": "Failed to serialize data.", "wikibase-error-invalid-entity-id": "The ID entered is unknown to the system. Please use a valid entity ID.", "unconnectedpages": "Pages not connected to items", - "unconnectedpages-summary": "This page lists pages with no connected item. The list is limited to namespaces that support connected items.", + "unconnectedpages-summary": "This page lists pages with no connected data item (in namespaces that support connected items). The list is sorted by descending page ID, so that newer pages are listed first.", "wikibase-unconnectedpages-page": "Start result list with page:", "wikibase-unconnectedpages-submit": "Go", "wikibase-unconnectedpages-invalid-language": "\"$1\" is not a valid language code.", diff --git a/extensions/Wikibase/client/i18n/luz.json b/extensions/Wikibase/client/i18n/luz.json index ed46b6e..4d6319d 100644 --- a/extensions/Wikibase/client/i18n/luz.json +++ b/extensions/Wikibase/client/i18n/luz.json @@ -4,11 +4,11 @@ "علی ساکی لرستانی" ] }, - "tooltip-t-wikibase": "لینک متصل به داده آیتم مخزن", - "wikibase-comment-update": "{{WBREPONAME}} مورد تغییر وابیده", - "wikibase-dataitem": "{{WBREPONAME}} مورد", - "wikibase-editlinks": "اصلاح لینک یل", - "wikibase-editlinkstitle": "اصلاح لینک یل زوون یل بین المللی", + "tooltip-t-wikibase": "لینک متصل ۉھ دادھ مۉرد مخزن", + "wikibase-comment-update": "{{WBREPONAME}} مۉرد تغییر ۉابیدھ", + "wikibase-dataitem": "{{WBREPONAME}} مۉرد", + "wikibase-editlinks": "اصلاح لینکل", + "wikibase-editlinkstitle": "اصلاح لینکل زۉۉنل بین المللی", "wikibase-rc-hide-wikidata": "$1 {{WBREPONAME}}", "wikibase-rc-hide-wikidata-hide": "قائم کردن", "wikibase-rc-hide-wikidata-show": "نشو دائن", diff --git a/extensions/Wikibase/client/i18n/mk.json b/extensions/Wikibase/client/i18n/mk.json index e15c670..9b4a30a 100644 --- a/extensions/Wikibase/client/i18n/mk.json +++ b/extensions/Wikibase/client/i18n/mk.json @@ -57,8 +57,8 @@ "wikibase-error-deserialize-error": "Не успеав да ги децентрализирам податоците", "wikibase-error-serialize-error": "Не успеав да ги серијализирам податоците", "wikibase-error-invalid-entity-id": "Назнаката не му е позната на системот. Внесете важечка назнака.", - "special-unconnectedpages": "Страници што не се врзани со предмети", - "wikibase-unconnectedpages-legend": "Можности за неврзани страници", + "unconnectedpages": "Страници што не се врзани со предмети", + "unconnectedpages-summary": "Оваа страница без сврзан предмет. Списокот е ограничен на именските простори што поддржуваат сврзани предмети.", "wikibase-unconnectedpages-page": "Почни го списокот на резултати со страницата:", "wikibase-unconnectedpages-submit": "Оди", "wikibase-unconnectedpages-invalid-language": "„$1“ не претставува важечки јазичен код.", diff --git a/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php b/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php index b3c8efd..75bddd4 100644 --- a/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php +++ b/extensions/Wikibase/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php @@ -176,7 +176,7 @@ ); $snakDeserializer = $wikibaseClient->getDeserializerFactory()->newSnakDeserializer(); - $snaksDeserializer = $wikibaseClient->getDeserializerFactory()->newSnaksDeserializer(); + $snaksDeserializer = $wikibaseClient->getDeserializerFactory()->newSnakListDeserializer(); return new SnakSerializationRenderer( $snakFormatter, diff --git a/extensions/Wikibase/client/includes/specials/SpecialUnconnectedPages.php b/extensions/Wikibase/client/includes/specials/SpecialUnconnectedPages.php index c27fa82..95c5db6 100644 --- a/extensions/Wikibase/client/includes/specials/SpecialUnconnectedPages.php +++ b/extensions/Wikibase/client/includes/specials/SpecialUnconnectedPages.php @@ -120,7 +120,6 @@ 'tables' => array( 'page', 'page_props', - 'langlinks' ), 'fields' => array( 'value' => 'page_id', @@ -129,38 +128,15 @@ 'page_id', 'page_len', 'page_is_redirect', - 'page_num_iwlinks' => 'count(ll_from)' + 'page_num_iwlinks' => '0', // placeholder, we'll get this from page_props in the future ), 'conds' => $conds, - 'options' => array( - 'GROUP BY' => 'page_namespace, page_title', - 'ORDER BY' => 'page_namespace, page_title', - 'USE INDEX' => array( 'page' => 'name_title' ) - ), + 'options' => array(), // sorting is determined getOrderFields(), which returns array( 'value' ) per default. 'join_conds' => array( - // FIXME: Should 'wikibase_item' really be hardcoded here? + // TODO: also get explicit_langlink_count from page_props once that is populated. Could even filter or sort by it via pp_sortkey. 'page_props' => array( 'LEFT JOIN', array( 'page_id = pp_page', "pp_propname = 'wikibase_item'" ) ), - 'langlinks' => array( 'LEFT JOIN', 'll_from = page_id' ) ) ); - } - - /** - * @see QueryPage::getOrderFields - * - * @return string[] - */ - function getOrderFields() { - return array( 'value' ); - } - - /** - * @see QueryPage::sortDescending - * - * @return bool Always false for this page. - */ - function sortDescending() { - return false; } /** diff --git a/extensions/Wikibase/client/maintenance/populateEntityUsage.php b/extensions/Wikibase/client/maintenance/populateEntityUsage.php index 745dfcc..7d41e0f 100644 --- a/extensions/Wikibase/client/maintenance/populateEntityUsage.php +++ b/extensions/Wikibase/client/maintenance/populateEntityUsage.php @@ -4,7 +4,6 @@ use LoggedUpdateMaintenance; use Wikibase\Client\Usage\Sql\EntityUsageTableBuilder; -use Wikibase\Client\Usage\Sql\SqlUsageTracker; use Wikibase\Client\WikibaseClient; use Wikibase\Lib\Reporting\ObservableMessageReporter; use Wikibase\Lib\Reporting\ReportingExceptionHandler; diff --git a/extensions/Wikibase/lib/i18n/ase.json b/extensions/Wikibase/lib/i18n/ase.json new file mode 100644 index 0000000..c4ed918 --- /dev/null +++ b/extensions/Wikibase/lib/i18n/ase.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Icemandeaf" + ] + }, + "wikibase-sitelinks-wikipedia": "M518x616S18620496x384S19220497x417S14020483x440S19220497x474S14051484x497S14a20497x525S10120497x544S19220497x578S1f720492x601" +} diff --git a/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php b/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php index 6ee34e3..ed07232 100644 --- a/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php +++ b/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php @@ -26,16 +26,13 @@ */ public abstract function getTermIndex(); - public function testGetMatchingIDs() { - $lookup = $this->getTermIndex(); - + public function provideGetMatchingIds() { $id0 = new ItemId( 'Q10' ); $item0 = new Item( $id0 ); $item0->setLabel( 'en', 'foobar' ); $item0->setLabel( 'de', 'foobar' ); $item0->setLabel( 'nl', 'baz' ); - $lookup->saveTermsOfEntity( $item0 ); $item1 = $item0->copy(); $id1 = new ItemId( 'Q11' ); @@ -43,26 +40,39 @@ $item1->setLabel( 'nl', 'o_O' ); $item1->setDescription( 'en', 'foo bar baz' ); - $lookup->saveTermsOfEntity( $item1 ); - $foobar = new TermIndexEntry( array( 'termType' => TermIndexEntry::TYPE_LABEL, 'termText' => 'foobar' ) ); - $bazNl= new TermIndexEntry( array( 'termType' => TermIndexEntry::TYPE_LABEL, 'termText' => 'baz', 'termLanguage' => 'nl' ) ); - $froggerNl = new TermIndexEntry( array( 'termType' => TermIndexEntry::TYPE_LABEL, 'termText' => 'o_O', 'termLanguage' => 'nl' ) ); + return array( + array( + array( $item0, $item1 ), + array( new TermIndexEntry( array( 'termType' => TermIndexEntry::TYPE_LABEL, 'termText' => 'foobar' ) ) ), + array( $id0, $id1 ), + ), + array( + array( $item0, $item1 ), + array( new TermIndexEntry( array( 'termType' => TermIndexEntry::TYPE_LABEL, 'termText' => 'baz', 'termLanguage' => 'nl' ) ) ), + array( $id0 ), + ), + array( + array( $item0, $item1 ), + array( new TermIndexEntry( array( 'termType' => TermIndexEntry::TYPE_LABEL, 'termText' => 'o_O', 'termLanguage' => 'nl' ) ) ), + array( $id1 ), + ), + ); + } - $ids = $lookup->getMatchingIDs( array( $foobar ), Item::ENTITY_TYPE ); + /** + * @dataProvider provideGetMatchingIds + */ + public function testGetMatchingIDs( $items, $terms, $expectedIds ) { + $lookup = $this->getTermIndex(); + foreach( $items as $item ) { + $lookup->saveTermsOfEntity( $item ); + } + + $ids = $lookup->getMatchingIDs( $terms, Item::ENTITY_TYPE ); $this->assertInternalType( 'array', $ids ); $this->assertContainsOnlyInstancesOf( '\Wikibase\DataModel\Entity\ItemId', $ids ); - $this->assertArrayEquals( array( $id0, $id1 ), $ids ); - - $ids = $lookup->getMatchingIDs( array( $bazNl ), Item::ENTITY_TYPE ); - $this->assertInternalType( 'array', $ids ); - $this->assertContainsOnlyInstancesOf( '\Wikibase\DataModel\Entity\ItemId', $ids ); - $this->assertArrayEquals( array( $id0 ), $ids ); - - $ids = $lookup->getMatchingIDs( array( $froggerNl ), Item::ENTITY_TYPE ); - $this->assertInternalType( 'array', $ids ); - $this->assertContainsOnlyInstancesOf( '\Wikibase\DataModel\Entity\ItemId', $ids ); - $this->assertArrayEquals( array( $id1 ), $ids ); + $this->assertArrayEquals( $expectedIds, $ids ); } public function getTermKey( TermIndexEntry $term ) { diff --git a/extensions/Wikibase/repo/Wikibase.hooks.php b/extensions/Wikibase/repo/Wikibase.hooks.php index b1c2b40..3557c36 100644 --- a/extensions/Wikibase/repo/Wikibase.hooks.php +++ b/extensions/Wikibase/repo/Wikibase.hooks.php @@ -897,6 +897,14 @@ $out->setProperty( 'wikibase-titletext', $titleText ); } + // Array with <link rel="alternate"> tags for the page HEAD. + $alternateLinks = $parserOutput->getExtensionData( 'wikibase-alternate-links' ); + if ( $alternateLinks !== null ) { + foreach ( $alternateLinks as $link ) { + $out->addLink( $link ); + } + } + return true; } diff --git a/extensions/Wikibase/repo/i18n/ase.json b/extensions/Wikibase/repo/i18n/ase.json new file mode 100644 index 0000000..ed2c936 --- /dev/null +++ b/extensions/Wikibase/repo/i18n/ase.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Icemandeaf" + ] + }, + "wikibase-edit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468" +} diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpFactoryProvider.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpFactoryProvider.php index 2148f01..631c8be 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpFactoryProvider.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpFactoryProvider.php @@ -3,7 +3,7 @@ namespace Wikibase\ChangeOp; use SiteLookup; -use Wikibase\DataModel\Claim\ClaimGuidParser; +use Wikibase\DataModel\Statement\StatementGuidParser; use Wikibase\Lib\ClaimGuidGenerator; use Wikibase\Lib\ClaimGuidValidator; use Wikibase\Validators\EntityConstraintProvider; @@ -36,7 +36,7 @@ private $guidValidator; /** - * @var ClaimGuidParser + * @var StatementGuidParser */ private $guidParser; @@ -59,7 +59,7 @@ * @param EntityConstraintProvider $constraintProvider * @param ClaimGuidGenerator $guidGenerator * @param ClaimGuidValidator $guidValidator - * @param ClaimGuidParser $guidParser + * @param StatementGuidParser $guidParser * @param SnakValidator $snakValidator * @param TermValidatorFactory $termValidatorFactory * @param SiteLookup $siteLookup @@ -68,7 +68,7 @@ EntityConstraintProvider $constraintProvider, ClaimGuidGenerator $guidGenerator, ClaimGuidValidator $guidValidator, - ClaimGuidParser $guidParser, + StatementGuidParser $guidParser, SnakValidator $snakValidator, TermValidatorFactory $termValidatorFactory, SiteLookup $siteLookup diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php index 8cfa3b8..d28edd1 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php @@ -4,10 +4,10 @@ use InvalidArgumentException; use ValueValidators\Result; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Snak\Snak; use Wikibase\DataModel\Snak\SnakList; +use Wikibase\DataModel\Statement\StatementListHolder; use Wikibase\Summary; use Wikibase\Validators\SnakValidator; @@ -26,7 +26,7 @@ * * @var string */ - protected $claimGuid; + protected $statementGuid; /** * @since 0.4 @@ -52,23 +52,23 @@ * * @since 0.4 * - * @param string $claimGuid + * @param string $statementGuid * @param Snak $snak * @param string $snakHash * @param SnakValidator $snakValidator * * @throws InvalidArgumentException */ - public function __construct( $claimGuid, Snak $snak, $snakHash, SnakValidator $snakValidator ) { - if ( !is_string( $claimGuid ) || $claimGuid === '' ) { - throw new InvalidArgumentException( '$claimGuid needs to be a string and must not be empty' ); + public function __construct( $statementGuid, Snak $snak, $snakHash, SnakValidator $snakValidator ) { + if ( !is_string( $statementGuid ) || $statementGuid === '' ) { + throw new InvalidArgumentException( '$statementGuid needs to be a string and must not be empty' ); } if ( !is_string( $snakHash ) ) { throw new InvalidArgumentException( '$snakHash needs to be a string' ); } - $this->claimGuid = $claimGuid; + $this->statementGuid = $statementGuid; $this->snak = $snak; $this->snakHash = $snakHash; $this->snakValidator = $snakValidator; @@ -80,14 +80,18 @@ * - the qualifier gets set to $snak when $snakHash and $snak are set */ public function apply( Entity $entity, Summary $summary = null ) { - $claims = new Claims( $entity->getClaims() ); - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - - if ( $claim === null ) { - throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); + if ( !( $entity instanceof StatementListHolder ) ) { + throw new InvalidArgumentException( '$entity must be a StatementListHolder' ); } - $qualifiers = $claim->getQualifiers(); + $statements = $entity->getStatements(); + $statement = $statements->getFirstStatementWithGuid( $this->statementGuid ); + + if ( $statement === null ) { + throw new ChangeOpException( "Entity does not have a statement with GUID $this->statementGuid" ); + } + + $qualifiers = $statement->getQualifiers(); if ( $this->snakHash === '' ) { $this->addQualifier( $qualifiers, $summary ); @@ -95,8 +99,8 @@ $this->setQualifier( $qualifiers, $summary ); } - $claim->setQualifiers( $qualifiers ); - $entity->setClaims( $claims ); + $statement->setQualifiers( $qualifiers ); + $entity->setStatements( $statements ); return true; } @@ -111,7 +115,7 @@ */ protected function addQualifier( SnakList $qualifiers, Summary $summary = null ) { if ( $qualifiers->hasSnak( $this->snak ) ) { - throw new ChangeOpException( 'Claim has already a qualifier with hash ' . $this->snak->getHash() ); + throw new ChangeOpException( 'The statement has already a qualifier with hash ' . $this->snak->getHash() ); } $qualifiers->addSnak( $this->snak ); //TODO: add the mainsnak as autocomment-arg & change messages @@ -131,7 +135,7 @@ throw new ChangeOpException( "Qualifier with hash $this->snakHash does not exist" ); } if ( $qualifiers->hasSnak( $this->snak ) ) { - throw new ChangeOpException( 'Claim has already a qualifier with hash ' . $this->snak->getHash() ); + throw new ChangeOpException( 'The statement has already a qualifier with hash ' . $this->snak->getHash() ); } $qualifiers->removeSnakHash( $this->snakHash ); $qualifiers->addSnak( $this->snak ); diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php index b495312..5d3535c 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php @@ -4,10 +4,10 @@ use InvalidArgumentException; use ValueValidators\Result; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Snak\Snak; use Wikibase\DataModel\Snak\SnakList; +use Wikibase\DataModel\Statement\StatementListHolder; use Wikibase\Summary; /** @@ -24,7 +24,7 @@ * * @var string */ - protected $claimGuid; + protected $statementGuid; /** * @since 0.5 @@ -38,21 +38,21 @@ * * @since 0.5 * - * @param string $claimGuid + * @param string $statementGuid * @param string $snakHash * * @throws InvalidArgumentException */ - public function __construct( $claimGuid, $snakHash ) { - if ( !is_string( $claimGuid ) || $claimGuid === '' ) { - throw new InvalidArgumentException( '$claimGuid needs to be a string and must not be empty' ); + public function __construct( $statementGuid, $snakHash ) { + if ( !is_string( $statementGuid ) || $statementGuid === '' ) { + throw new InvalidArgumentException( '$statementGuid needs to be a string and must not be empty' ); } if ( !is_string( $snakHash ) || $snakHash === '' ) { throw new InvalidArgumentException( '$snakHash needs to be a string and must not be empty' ); } - $this->claimGuid = $claimGuid; + $this->statementGuid = $statementGuid; $this->snakHash = $snakHash; } @@ -60,19 +60,23 @@ * @see ChangeOp::apply() */ public function apply( Entity $entity, Summary $summary = null ) { - $claims = new Claims( $entity->getClaims() ); - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - - if ( $claim === null ) { - throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); + if ( !( $entity instanceof StatementListHolder ) ) { + throw new InvalidArgumentException( '$entity must be a StatementListHolder' ); } - $qualifiers = $claim->getQualifiers(); + $statements = $entity->getStatements(); + $statement = $statements->getFirstStatementWithGuid( $this->statementGuid ); + + if ( $statement === null ) { + throw new ChangeOpException( "Entity does not have a statement with GUID $this->statementGuid" ); + } + + $qualifiers = $statement->getQualifiers(); $this->removeQualifier( $qualifiers, $summary ); - $claim->setQualifiers( $qualifiers ); - $entity->setClaims( $claims ); + $statement->setQualifiers( $qualifiers ); + $entity->setStatements( $statements ); return true; } diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php index eb38a09..01e02a2 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php @@ -4,12 +4,11 @@ use InvalidArgumentException; use ValueValidators\Result; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Reference; use Wikibase\DataModel\ReferenceList; use Wikibase\DataModel\Snak\Snak; -use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementListHolder; use Wikibase\Summary; use Wikibase\Validators\SnakValidator; @@ -28,7 +27,7 @@ * * @var string */ - protected $claimGuid; + protected $statementGuid; /** * @since 0.4 @@ -61,7 +60,7 @@ * * @since 0.4 * - * @param string $claimGuid + * @param string $statementGuid * @param Reference $reference * @param string $referenceHash (if empty '' a new reference will be created) * @param SnakValidator $snakValidator @@ -70,14 +69,14 @@ * @throws InvalidArgumentException */ public function __construct( - $claimGuid, + $statementGuid, Reference $reference, $referenceHash, SnakValidator $snakValidator, $index = null ) { - if ( !is_string( $claimGuid ) || $claimGuid === '' ) { - throw new InvalidArgumentException( '$claimGuid needs to be a string and must not be empty' ); + if ( !is_string( $statementGuid ) || $statementGuid === '' ) { + throw new InvalidArgumentException( '$statementGuid needs to be a string and must not be empty' ); } if ( !is_string( $referenceHash ) ) { @@ -92,7 +91,7 @@ throw new InvalidArgumentException( '$index must be an integer or null' ); } - $this->claimGuid = $claimGuid; + $this->statementGuid = $statementGuid; $this->reference = $reference; $this->referenceHash = $referenceHash; $this->index = $index; @@ -105,18 +104,18 @@ * - the reference gets set to $reference when $referenceHash and $reference are set */ public function apply( Entity $entity, Summary $summary = null ) { - $claims = new Claims( $entity->getClaims() ); - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - - if ( $claim === null ) { - throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); + if ( !( $entity instanceof StatementListHolder ) ) { + throw new InvalidArgumentException( '$entity must be a StatementListHolder' ); } - if ( !( $claim instanceof Statement ) ) { - throw new ChangeOpException( 'The referenced claim is not a statement and thus cannot have references' ); + $statements = $entity->getStatements(); + $statement = $statements->getFirstStatementWithGuid( $this->statementGuid ); + + if ( $statement === null ) { + throw new ChangeOpException( "Entity does not have a statement with GUID $this->statementGuid" ); } - $references = $claim->getReferences(); + $references = $statement->getReferences(); if ( $this->referenceHash === '' ) { $this->addReference( $references, $summary ); @@ -125,11 +124,11 @@ } if ( $summary !== null ) { - $summary->addAutoSummaryArgs( $this->getSnakSummaryArgs( $claim->getMainSnak() ) ); + $summary->addAutoSummaryArgs( $this->getSnakSummaryArgs( $statement->getMainSnak() ) ); } - $claim->setReferences( $references ); - $entity->setClaims( $claims ); + $statement->setReferences( $references ); + $entity->setStatements( $statements ); return true; } @@ -145,7 +144,7 @@ protected function addReference( ReferenceList $references, Summary $summary = null ) { if ( $references->hasReference( $this->reference ) ) { $hash = $this->reference->getHash(); - throw new ChangeOpException( "Claim has already a reference with hash $hash" ); + throw new ChangeOpException( "The statement has already a reference with hash $hash" ); } $references->addReference( $this->reference, $this->index ); $this->updateSummary( $summary, 'add' ); @@ -173,7 +172,7 @@ } if ( $references->hasReference( $this->reference ) && $this->index === $currentIndex ) { - throw new ChangeOpException( 'Claim has already a reference with hash ' + throw new ChangeOpException( 'The statement has already a reference with hash ' . $this->reference->getHash() . ' and index (' . $currentIndex . ') is not changed' ); } $references->removeReferenceHash( $this->referenceHash ); diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php index 812729d..b990237 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php @@ -4,11 +4,10 @@ use InvalidArgumentException; use ValueValidators\Result; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\ReferenceList; use Wikibase\DataModel\Snak\Snak; -use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementListHolder; use Wikibase\Summary; /** @@ -25,7 +24,7 @@ * * @var string */ - protected $claimGuid; + protected $statementGuid; /** * @since 0.5 @@ -39,21 +38,21 @@ * * @since 0.5 * - * @param string $claimGuid + * @param string $statementGuid * @param string $referenceHash * * @throws InvalidArgumentException */ - public function __construct( $claimGuid, $referenceHash ) { - if ( !is_string( $claimGuid ) || $claimGuid === '' ) { - throw new InvalidArgumentException( '$claimGuid needs to be a string and must not be empty' ); + public function __construct( $statementGuid, $referenceHash ) { + if ( !is_string( $statementGuid ) || $statementGuid === '' ) { + throw new InvalidArgumentException( '$statementGuid needs to be a string and must not be empty' ); } if ( !is_string( $referenceHash ) || $referenceHash === '' ) { throw new InvalidArgumentException( '$referenceHash needs to be a string and must not be empty' ); } - $this->claimGuid = $claimGuid; + $this->statementGuid = $statementGuid; $this->referenceHash = $referenceHash; } @@ -61,26 +60,27 @@ * @see ChangeOp::apply() */ public function apply( Entity $entity, Summary $summary = null ) { - $claims = new Claims( $entity->getClaims() ); - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - - if ( $claim === null ) { - throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); + if ( !( $entity instanceof StatementListHolder ) ) { + throw new InvalidArgumentException( '$entity must be a StatementListHolder' ); } - if ( !( $claim instanceof Statement ) ) { - throw new ChangeOpException( 'The referenced claim is not a statement and thus cannot have references' ); + $statements = $entity->getStatements(); + $statement = $statements->getFirstStatementWithGuid( $this->statementGuid ); + + if ( $statement === null ) { + throw new ChangeOpException( "Entity does not have claim with GUID $this->statementGuid" ); } - $references = $claim->getReferences(); + $references = $statement->getReferences(); $this->removeReference( $references, $summary ); if ( $summary !== null ) { - $summary->addAutoSummaryArgs( $this->getSnakSummaryArgs( $claim->getMainSnak() ) ); + $summary->addAutoSummaryArgs( $this->getSnakSummaryArgs( $statement->getMainSnak() ) ); } - $claim->setReferences( $references ); - $entity->setClaims( $claims ); + $statement->setReferences( $references ); + $entity->setStatements( $statements ); + return true; } diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpRemoveStatement.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpRemoveStatement.php index d1c34d8..6e339ce 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpRemoveStatement.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpRemoveStatement.php @@ -5,12 +5,9 @@ use InvalidArgumentException; use ValueValidators\Result; use Wikibase\DataModel\Entity\Entity; -use Wikibase\DataModel\Entity\Item; -use Wikibase\DataModel\Entity\Property; use Wikibase\DataModel\Snak\Snak; -use Wikibase\DataModel\Statement\Statement; use Wikibase\DataModel\Statement\StatementList; -use Wikibase\DataModel\Statement\StatementListProvider; +use Wikibase\DataModel\Statement\StatementListHolder; use Wikibase\Summary; /** @@ -62,61 +59,24 @@ * @return bool */ public function apply( Entity $entity, Summary $summary = null ) { - if ( !( $entity instanceof StatementListProvider ) ) { - throw new InvalidArgumentException( '$entity must be a StatementListProvider' ); + if ( !( $entity instanceof StatementListHolder ) ) { + throw new InvalidArgumentException( '$entity must be a StatementListHolder' ); } - $statements = $this->removeStatement( $entity->getStatements()->toArray(), $summary ); - $this->setStatements( $entity, $statements ); + $statements = $entity->getStatements(); + $statement = $statements->getFirstStatementWithGuid( $this->guid ); - return true; - } - - /** - * @param Statement[] $statements - * @param Summary|null $summary - * - * @throws ChangeOpException - * @return Statement[] - */ - private function removeStatement( array $statements, Summary $summary = null ) { - $newStatements = array(); - $removedStatement = null; - - foreach ( $statements as $statement ) { - if ( $statement->getGuid() === $this->guid && $removedStatement === null ) { - $removedStatement = $statement; - } else { - $newStatements[] = $statement; - } - } - - if ( $removedStatement === null ) { + if ( $statement === null ) { throw new ChangeOpException( "Entity does not have statement with GUID $this->guid" ); } - $removedSnak = $removedStatement->getMainSnak(); + $statements->removeStatementsWithGuid( $this->guid ); + $entity->setStatements( $statements ); + + $removedSnak = $statement->getMainSnak(); $this->updateSummary( $summary, 'remove', '', $this->getSummaryArgs( $removedSnak ) ); - return $newStatements; - } - - /** - * @param Entity $entity - * @param Statement[] $statements - * - * @throws InvalidArgumentException - */ - private function setStatements( Entity $entity, array $statements ) { - $statementList = new StatementList( $statements ); - - if ( $entity instanceof Item ) { - $entity->setStatements( $statementList ); - } elseif ( $entity instanceof Property ) { - $entity->setStatements( $statementList ); - } else { - throw new InvalidArgumentException( '$entity must be an Item or Property' ); - } + return true; } /** diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatement.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatement.php index 6adb591..b176875 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatement.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatement.php @@ -6,13 +6,11 @@ use OutOfBoundsException; use ValueValidators\Result; use Wikibase\DataModel\ByPropertyIdArray; -use Wikibase\DataModel\Claim\ClaimGuidParser; use Wikibase\DataModel\Entity\Entity; -use Wikibase\DataModel\Entity\Item; -use Wikibase\DataModel\Entity\Property; use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementGuidParser; use Wikibase\DataModel\Statement\StatementList; -use Wikibase\DataModel\Statement\StatementListProvider; +use Wikibase\DataModel\Statement\StatementListHolder; use Wikibase\Lib\ClaimGuidGenerator; use Wikibase\Lib\ClaimGuidValidator; use Wikibase\Summary; @@ -46,7 +44,7 @@ private $guidValidator; /** - * @var ClaimGuidParser + * @var StatementGuidParser */ private $guidParser; @@ -64,7 +62,7 @@ * @param Statement $statement * @param ClaimGuidGenerator $guidGenerator * @param ClaimGuidValidator $guidValidator - * @param ClaimGuidParser $guidParser + * @param StatementGuidParser $guidParser * @param SnakValidator $snakValidator * @param int|null $index Where the claim should be placed among the other claims. * @@ -74,7 +72,7 @@ Statement $statement, ClaimGuidGenerator $guidGenerator, ClaimGuidValidator $guidValidator, - ClaimGuidParser $guidParser, + StatementGuidParser $guidParser, SnakValidator $snakValidator, $index = null ) { @@ -124,13 +122,13 @@ * @throws InvalidArgumentException */ private function applyClaimToEntity( Entity $entity, Summary $summary = null ) { - if ( !( $entity instanceof StatementListProvider ) ) { - throw new InvalidArgumentException( '$entity must be a StatementListProvider' ); + if ( !( $entity instanceof StatementListHolder ) ) { + throw new InvalidArgumentException( '$entity must be a StatementListHolder' ); } $statements = $this->removeStatement( $entity->getStatements()->toArray(), $summary ); $statements = $this->addStatement( $statements ); - $this->setStatements( $entity, $statements ); + $entity->setStatements( new StatementList( $statements ) ); } /** @@ -212,24 +210,6 @@ } return $statements; - } - - /** - * @param Entity $entity - * @param Statement[] $statements - * - * @throws InvalidArgumentException - */ - private function setStatements( Entity $entity, array $statements ) { - $statementList = new StatementList( $statements ); - - if ( $entity instanceof Item ) { - $entity->setStatements( $statementList ); - } elseif ( $entity instanceof Property ) { - $entity->setStatements( $statementList ); - } else { - throw new InvalidArgumentException( '$entity must be an Item or Property' ); - } } /** diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php index 5ee7fd8..be22e00 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php @@ -4,10 +4,9 @@ use InvalidArgumentException; use ValueValidators\Result; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Snak\Snak; -use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementListHolder; use Wikibase\Lib\Serializers\ClaimSerializer; use Wikibase\Summary; @@ -25,7 +24,7 @@ * * @var string */ - protected $claimGuid; + protected $statementGuid; /** * @since 0.4 @@ -39,21 +38,21 @@ * * @since 0.4 * - * @param string $claimGuid + * @param string $statementGuid * @param integer $rank * * @throws InvalidArgumentException */ - public function __construct( $claimGuid, $rank ) { - if ( !is_string( $claimGuid ) ) { - throw new InvalidArgumentException( '$claimGuid needs to be a string' ); + public function __construct( $statementGuid, $rank ) { + if ( !is_string( $statementGuid ) ) { + throw new InvalidArgumentException( '$statementGuid needs to be a string' ); } if ( !is_integer( $rank ) ) { throw new InvalidArgumentException( '$rank needs to be an integer' ); } - $this->claimGuid = $claimGuid; + $this->statementGuid = $statementGuid; $this->rank = $rank; } @@ -61,20 +60,20 @@ * @see ChangeOp::apply() */ public function apply( Entity $entity, Summary $summary = null ) { - $claims = new Claims( $entity->getClaims() ); - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - - if ( $claim === null ) { - throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); + if ( !( $entity instanceof StatementListHolder ) ) { + throw new InvalidArgumentException( '$entity must be a StatementListHolder' ); } - if ( !( $claim instanceof Statement ) ) { - throw new ChangeOpException( 'The referenced claim is not a statement and thus cannot have a rank' ); + $statements = $entity->getStatements(); + $statement = $statements->getFirstStatementWithGuid( $this->statementGuid ); + + if ( $statement === null ) { + throw new ChangeOpException( "Entity does not have a statement with GUID $this->statementGuid" ); } - $oldRank = $claim->getRank(); - $claim->setRank( $this->rank ); - $this->updateSummary( $summary, null, '', $this->getSnakSummaryArgs( $claim->getMainSnak() ) ); + $oldRank = $statement->getRank(); + $statement->setRank( $this->rank ); + $this->updateSummary( $summary, null, '', $this->getSnakSummaryArgs( $statement->getMainSnak() ) ); if ( $summary !== null ) { $summary->addAutoCommentArgs( @@ -82,7 +81,7 @@ ); } - $entity->setClaims( $claims ); + $entity->setStatements( $statements ); return true; } diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ClaimChangeOpFactory.php b/extensions/Wikibase/repo/includes/ChangeOp/ClaimChangeOpFactory.php index 845a56f..da5eb07 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ClaimChangeOpFactory.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ClaimChangeOpFactory.php @@ -4,7 +4,7 @@ use InvalidArgumentException; use Wikibase\DataModel\Claim\Claim; -use Wikibase\DataModel\Claim\ClaimGuidParser; +use Wikibase\DataModel\Statement\StatementGuidParser; use Wikibase\DataModel\Snak\Snak; use Wikibase\DataModel\Statement\Statement; use Wikibase\Lib\ClaimGuidGenerator; @@ -30,7 +30,7 @@ private $guidValidator; /** - * @var ClaimGuidParser + * @var StatementGuidParser */ private $guidParser; @@ -42,13 +42,13 @@ /** * @param ClaimGuidGenerator $guidGenerator * @param ClaimGuidValidator $guidValidator - * @param ClaimGuidParser $guidParser + * @param StatementGuidParser $guidParser * @param SnakValidator $snakValidator */ public function __construct( ClaimGuidGenerator $guidGenerator, ClaimGuidValidator $guidValidator, - ClaimGuidParser $guidParser, + StatementGuidParser $guidParser, SnakValidator $snakValidator ) { $this->guidGenerator = $guidGenerator; diff --git a/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php b/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php index e3883d2..02d5ca1 100644 --- a/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php +++ b/extensions/Wikibase/repo/includes/EntityParserOutputGenerator.php @@ -6,6 +6,7 @@ use LinkBatch; use ParserOptions; use ParserOutput; +use SpecialPage; use Title; use Wikibase\DataModel\Entity\EntityDocument; use Wikibase\DataModel\Entity\EntityId; @@ -20,6 +21,7 @@ use Wikibase\Lib\Store\EntityInfoTermLookup; use Wikibase\Lib\Store\EntityTitleLookup; use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookup; +use Wikibase\Repo\LinkedData\EntityDataFormatProvider; use Wikibase\Repo\View\RepoSpecialPageLinker; use Wikibase\View\EmptyEditSectionGenerator; use Wikibase\View\EntityViewFactory; @@ -85,6 +87,11 @@ */ private $templateFactory; + /** + * @var EntityDataFormatProvider + */ + private $entityDataFormatProvider; + public function __construct( EntityViewFactory $entityViewFactory, ParserOutputJsConfigBuilder $configBuilder, @@ -94,7 +101,8 @@ LanguageFallbackChain $languageFallbackChain, $languageCode, ReferencedEntitiesFinder $referencedEntitiesFinder, - TemplateFactory $templateFactory + TemplateFactory $templateFactory, + EntityDataFormatProvider $entityDataFormatProvider ) { $this->entityViewFactory = $entityViewFactory; $this->configBuilder = $configBuilder; @@ -105,6 +113,7 @@ $this->languageCode = $languageCode; $this->referencedEntitiesFinder = $referencedEntitiesFinder; $this->templateFactory = $templateFactory; + $this->entityDataFormatProvider = $entityDataFormatProvider; } /** @@ -190,6 +199,8 @@ // So, for now, we leave it to the caller to override the display title, if desired. // set the display title //$parserOutput->setTitleText( $entity>getLabel( $langCode ) ); + + $this->addAlternateLinks( $parserOutput, $entity->getId() ); return $parserOutput; } @@ -397,4 +408,33 @@ $parserOutput->addModules( 'wikibase.ui.entityViewInit' ); } + /** + * Add alternate links as extension data. + * OutputPageBeforeHTMLHookHandler will add these to the OutputPage. + * + * @param ParserOutput $parserOutput + * @param EntityId $entityId + */ + private function addAlternateLinks( ParserOutput $parserOutput, EntityId $entityId ) { + $entityDataFormatProvider = $this->entityDataFormatProvider; + $subPagePrefix = $entityId->getSerialization() . '.'; + + $links = array(); + + foreach ( $entityDataFormatProvider->getSupportedFormats() as $format ) { + $ext = $entityDataFormatProvider->getExtension( $format ); + + if ( $ext !== null ) { + $entityDataTitle = SpecialPage::getTitleFor( 'EntityData', $subPagePrefix . $ext ); + + $links[] = array( + 'rel' => 'alternate', + 'href' => $entityDataTitle->getCanonicalURL(), + 'type' => $entityDataFormatProvider->getMimeType( $format ) + ); + } + } + + $parserOutput->setExtensionData( 'wikibase-alternate-links', $links ); + } } diff --git a/extensions/Wikibase/repo/includes/EntityParserOutputGeneratorFactory.php b/extensions/Wikibase/repo/includes/EntityParserOutputGeneratorFactory.php index fe3b5e9..c3f4153 100644 --- a/extensions/Wikibase/repo/includes/EntityParserOutputGeneratorFactory.php +++ b/extensions/Wikibase/repo/includes/EntityParserOutputGeneratorFactory.php @@ -9,6 +9,7 @@ use Wikibase\Lib\Store\EntityTitleLookup; use Wikibase\View\EntityViewFactory; use Wikibase\View\Template\TemplateFactory; +use Wikibase\Repo\LinkedData\EntityDataFormatProvider; /** * @since 0.5 @@ -53,6 +54,11 @@ */ private $languageFallbackChainFactory; + /** + * @var EntityDataFormatProvider + */ + private $entityDataFormatProvider; + public function __construct( EntityViewFactory $entityViewFactory, EntityInfoBuilderFactory $entityInfoBuilderFactory, @@ -60,7 +66,8 @@ ValuesFinder $valuesFinder, LanguageFallbackChainFactory $languageFallbackChainFactory, ReferencedEntitiesFinder $referencedEntitiesFinder, - TemplateFactory $templateFactory + TemplateFactory $templateFactory, + EntityDataFormatProvider $entityDataFormatProvider ) { $this->entityViewFactory = $entityViewFactory; $this->entityInfoBuilderFactory = $entityInfoBuilderFactory; @@ -69,6 +76,7 @@ $this->languageFallbackChainFactory = $languageFallbackChainFactory; $this->referencedEntitiesFinder = $referencedEntitiesFinder; $this->templateFactory = $templateFactory; + $this->entityDataFormatProvider = $entityDataFormatProvider; } /** @@ -90,7 +98,8 @@ $this->getLanguageFallbackChain( $languageCode ), $languageCode, $this->referencedEntitiesFinder, - $this->templateFactory + $this->templateFactory, + $this->entityDataFormatProvider ); } diff --git a/extensions/Wikibase/repo/includes/WikibaseRepo.php b/extensions/Wikibase/repo/includes/WikibaseRepo.php index 2b89b7e..d9e2137 100644 --- a/extensions/Wikibase/repo/includes/WikibaseRepo.php +++ b/extensions/Wikibase/repo/includes/WikibaseRepo.php @@ -18,7 +18,7 @@ use ValueFormatters\ValueFormatter; use Wikibase\Api\ApiHelperFactory; use Wikibase\ChangeOp\ChangeOpFactoryProvider; -use Wikibase\DataModel\Claim\ClaimGuidParser; +use Wikibase\DataModel\Statement\StatementGuidParser; use Wikibase\DataModel\Entity\BasicEntityIdParser; use Wikibase\DataModel\Entity\Diff\EntityDiffer; use Wikibase\DataModel\Entity\DispatchingEntityIdParser; @@ -71,6 +71,7 @@ use Wikibase\Repo\Content\PropertyHandler; use Wikibase\Repo\Hooks\EditFilterHookRunner; use Wikibase\Repo\Interactors\RedirectCreationInteractor; +use Wikibase\Repo\LinkedData\EntityDataFormatProvider; use Wikibase\Repo\Localizer\ChangeOpValidationExceptionLocalizer; use Wikibase\Repo\Localizer\MessageParameterFormatter; use Wikibase\Repo\Notifications\ChangeNotifier; @@ -427,10 +428,10 @@ /** * @since 0.5 * - * @return ClaimGuidParser + * @return StatementGuidParser */ - public function getClaimGuidParser() { - return new ClaimGuidParser( $this->getEntityIdParser() ); + public function getStatementGuidParser() { + return new StatementGuidParser( $this->getEntityIdParser() ); } /** @@ -443,7 +444,7 @@ $this->getEntityConstraintProvider(), new ClaimGuidGenerator(), $this->getClaimGuidValidator(), - $this->getClaimGuidParser(), + $this->getStatementGuidParser(), $this->getSnakValidator(), $this->getTermValidatorFactory(), $this->getSiteStore() @@ -1093,6 +1094,10 @@ $this->getSettings()->getSetting( 'badgeItems' ) ); + $entityDataFormatProvider = new EntityDataFormatProvider(); + $formats = $this->getSettings()->getSetting( 'entityDataFormats' ); + $entityDataFormatProvider->setFormatWhiteList( $formats ); + return new EntityParserOutputGeneratorFactory( $entityViewFactory, $this->getStore()->getEntityInfoBuilderFactory(), @@ -1100,7 +1105,8 @@ new ValuesFinder( $this->getPropertyDataTypeLookup() ), $this->getLanguageFallbackChainFactory(), new ReferencedEntitiesFinder( $this->getLocalEntityUriParser() ), - $templateFactory + $templateFactory, + $entityDataFormatProvider ); } diff --git a/extensions/Wikibase/repo/includes/api/CreateClaim.php b/extensions/Wikibase/repo/includes/api/CreateClaim.php index 9c2f8b2..d9e66a1 100644 --- a/extensions/Wikibase/repo/includes/api/CreateClaim.php +++ b/extensions/Wikibase/repo/includes/api/CreateClaim.php @@ -6,7 +6,6 @@ use ApiMain; use Wikibase\ChangeOp\ChangeOpMainSnak; use Wikibase\ChangeOp\ClaimChangeOpFactory; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\Repo\WikibaseRepo; @@ -70,12 +69,11 @@ $this->modificationHelper->applyChangeOp( $changeOp, $entity, $summary ); - $claims = new Claims( $entity->getClaims() ); - $claim = $claims->getClaimWithGuid( $changeOp->getClaimGuid() ); + $statement = $entity->getStatements()->getFirstStatementWithGuid( $changeOp->getClaimGuid() ); $this->saveChanges( $entity, $summary ); $this->getResultBuilder()->markSuccess(); - $this->getResultBuilder()->addClaim( $claim ); + $this->getResultBuilder()->addClaim( $statement ); } /** diff --git a/extensions/Wikibase/repo/includes/api/GetClaims.php b/extensions/Wikibase/repo/includes/api/GetClaims.php index c8e8b16..c7a71e7 100644 --- a/extensions/Wikibase/repo/includes/api/GetClaims.php +++ b/extensions/Wikibase/repo/includes/api/GetClaims.php @@ -50,7 +50,7 @@ //TODO: provide a mechanism to override the services $this->guidValidator = WikibaseRepo::getDefaultInstance()->getClaimGuidValidator(); - $this->guidParser = WikibaseRepo::getDefaultInstance()->getClaimGuidParser(); + $this->guidParser = WikibaseRepo::getDefaultInstance()->getStatementGuidParser(); } /** diff --git a/extensions/Wikibase/repo/includes/api/ModifyClaim.php b/extensions/Wikibase/repo/includes/api/ModifyClaim.php index da2acb2..5e41650 100644 --- a/extensions/Wikibase/repo/includes/api/ModifyClaim.php +++ b/extensions/Wikibase/repo/includes/api/ModifyClaim.php @@ -4,7 +4,7 @@ use ApiBase; use ApiMain; -use Wikibase\DataModel\Claim\ClaimGuidParser; +use Wikibase\DataModel\Statement\StatementGuidParser; use Wikibase\DataModel\Entity\Entity; use Wikibase\Repo\WikibaseRepo; use Wikibase\Summary; @@ -30,7 +30,7 @@ /** * @since 0.5 * - * @var ClaimGuidParser + * @var StatementGuidParser */ protected $guidParser; @@ -51,7 +51,7 @@ $this->getErrorReporter() ); - $this->guidParser = WikibaseRepo::getDefaultInstance()->getClaimGuidParser(); + $this->guidParser = WikibaseRepo::getDefaultInstance()->getStatementGuidParser(); } /** diff --git a/extensions/Wikibase/repo/includes/rdf/RdfVocabulary.php b/extensions/Wikibase/repo/includes/rdf/RdfVocabulary.php index 7ed998d..3bc09ea 100644 --- a/extensions/Wikibase/repo/includes/rdf/RdfVocabulary.php +++ b/extensions/Wikibase/repo/includes/rdf/RdfVocabulary.php @@ -97,8 +97,8 @@ * @param string $dataUri Base URI for entity description URIs. */ public function __construct( $baseUri, $dataUri ) { - $this->baseUri = $baseUri; - $this->dataUri = $dataUri; + $this->baseUri = self::alwaysHTTP( $baseUri ); + $this->dataUri = self::alwaysHTTP( $dataUri ); if( substr($this->baseUri, -7) === 'entity/') { $topUri = substr($this->baseUri, 0, -7); @@ -215,4 +215,17 @@ return self::COMMONS_URI . rawurlencode( $file ); } + /** + * Returns URI that is always http: even if the passed URI is https + * @param string $uri + * @return string + */ + public static function alwaysHTTP( $uri ) { + if( strncasecmp( $uri, 'https://', 8 ) === 0 ) { + // https: becomes http: + $uri = 'http' . substr( $uri, 5 ); + } + return $uri; + } + } diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpStatementTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpStatementTest.php index 6f9281f..d71fb8a 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpStatementTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpStatementTest.php @@ -5,7 +5,6 @@ use DataValues\NumberValue; use DataValues\StringValue; use Wikibase\ChangeOp\ChangeOpStatement; -use Wikibase\DataModel\Claim\ClaimGuidParser; use Wikibase\DataModel\Entity\BasicEntityIdParser; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Entity\Item; @@ -20,6 +19,7 @@ use Wikibase\DataModel\Snak\Snak; use Wikibase\DataModel\Snak\SnakList; use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementGuidParser; use Wikibase\DataModel\Statement\StatementList; use Wikibase\Lib\ClaimGuidGenerator; use Wikibase\Lib\ClaimGuidValidator; @@ -273,7 +273,7 @@ $statement, new ClaimGuidGenerator(), new ClaimGuidValidator( $idParser ), - new ClaimGuidParser( $idParser ), + new StatementGuidParser( $idParser ), $this->mockProvider->getMockSnakValidator(), $index ); diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpTestMockProvider.php b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpTestMockProvider.php index d635d38..789629e 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpTestMockProvider.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpTestMockProvider.php @@ -14,7 +14,7 @@ use ValueValidators\Result; use ValueValidators\ValueValidator; use Wikibase\DataModel\Claim\Claim; -use Wikibase\DataModel\Claim\ClaimGuidParser; +use Wikibase\DataModel\Statement\StatementGuidParser; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\Item; @@ -249,12 +249,12 @@ } /** - * Returns a mock ClaimGuidParser that will return the same ClaimGuid for + * Returns a mock StatementGuidParser that will return the same ClaimGuid for * all input strings. * * @param EntityId $entityId * - * @return ClaimGuidParser + * @return StatementGuidParser */ public function getMockGuidParser( EntityId $entityId ) { $mockClaimGuid = $this->getMockBuilder( 'Wikibase\DataModel\Claim\ClaimGuid' ) @@ -267,7 +267,7 @@ ->method( 'getEntityId' ) ->will( PHPUnit_Framework_TestCase::returnValue( $entityId ) ); - $mock = $this->getMockBuilder( 'Wikibase\DataModel\Claim\ClaimGuidParser' ) + $mock = $this->getMockBuilder( 'Wikibase\DataModel\Statement\StatementGuidParser' ) ->disableOriginalConstructor() ->getMock(); $mock->expects( PHPUnit_Framework_TestCase::any() ) diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php index 38624e1..1fa9f60 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php @@ -6,6 +6,7 @@ use Language; use MediaWikiTestCase; use ParserOptions; +use SpecialPage; use Title; use Wikibase\DataModel\Entity\BasicEntityIdParser; use Wikibase\DataModel\Entity\EntityId; @@ -17,6 +18,7 @@ use Wikibase\EntityParserOutputGenerator; use Wikibase\EntityRevision; use Wikibase\Lib\Store\Sql\SqlEntityInfoBuilderFactory; +use Wikibase\Repo\LinkedData\EntityDataFormatProvider; use Wikibase\ReferencedEntitiesFinder; use Wikibase\ValuesFinder; use Wikibase\View\Template\TemplateFactory; @@ -89,6 +91,26 @@ $missingOptions, 'Missing cache-split flags: ' . join( '|', $missingOptions ) . '. Options: ' . join( '|', $actualOptions ) ); + + $jsonHref = SpecialPage::getTitleFor( 'EntityData', $item->getId()->getSerialization() . '.json' )->getCanonicalURL(); + $ntHref = SpecialPage::getTitleFor( 'EntityData', $item->getId()->getSerialization() . '.nt' )->getCanonicalURL(); + + $this->assertEquals( + array( + array( + 'rel' => 'alternate', + 'href' => $jsonHref, + 'type' => 'application/json' + ), + array( + 'rel' => 'alternate', + 'href' => $ntHref, + 'type' => 'application/n-triples' + ) + ), + $parserOutput->getExtensionData( 'wikibase-alternate-links' ), + 'alternate links (extension data)' + ); } public function testTitleText_ItemHasNolabel() { @@ -112,6 +134,10 @@ private function newEntityParserOutputGenerator() { $templateFactory = TemplateFactory::getDefaultInstance(); $referencedEntitiesFinder = new ReferencedEntitiesFinder( new BasicEntityIdParser() ); + $entityDataFormatProvider = new EntityDataFormatProvider(); + + $formats = array( 'json', 'ntriples' ); + $entityDataFormatProvider->setFormatWhiteList( $formats ); return new EntityParserOutputGenerator( $this->getEntityViewFactory(), @@ -122,7 +148,8 @@ $this->newLanguageFallbackChain(), 'en', $referencedEntitiesFinder, - $templateFactory + $templateFactory, + $entityDataFormatProvider ); } diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php index c771bd8..9558d53 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/Hooks/OutputPageBeforeHTMLHookHandlerTest.php @@ -27,9 +27,9 @@ class OutputPageBeforeHTMLHookHandlerTest extends PHPUnit_Framework_TestCase { /** - * Integration test mostly testing that things don't fatal/ throw. + * @return OutputPageBeforeHTMLHookHandler */ - public function testOutputPageBeforeHTMLHookHandler() { + private function getHookHandler() { $userLanguageLookup = $this->getMock( 'Wikibase\Lib\UserLanguageLookup' ); $userLanguageLookup->expects( $this->once() ) ->method( 'getUserSpecifiedLanguages' ) @@ -50,6 +50,15 @@ new EntityContentFactory( array() ) ); + return $outputPageBeforeHTMLHookHandler; + } + + /** + * Integration test mostly testing that things don't fatal/ throw. + */ + public function testOutputPageBeforeHTMLHookHandler() { + $outputPageBeforeHTMLHookHandler = $this->getHookHandler(); + $html = ''; $context = new DerivativeContext( RequestContext::getMain() ); $out = new OutputPage( $context ); diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/RepoHooksTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/RepoHooksTest.php index 22f30a3..81b9211 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/RepoHooksTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/RepoHooksTest.php @@ -2,9 +2,12 @@ namespace Wikibase\Tests; -use ImportStringSource; use ConfigFactory; +use DerivativeContext; use Exception; +use ImportStringSource; +use OutputPage; +use RequestContext; use Wikibase\Repo\WikibaseRepo; use Wikibase\RepoHooks; use WikiImporter; @@ -163,4 +166,35 @@ $this->assertTrue( true ); // make PHPUnit happy } + public function testOnOutputPageParserOutput() { + $altLinks = array( array( 'a' => 'b' ), array( 'c', 'd' ) ); + + $context = new DerivativeContext( RequestContext::getMain() ); + $out = new OutputPage( $context ); + + $parserOutput = $this->getMock( 'ParserOutput' ); + $parserOutput->expects( $this->exactly( 3 ) ) + ->method( 'getExtensionData' ) + ->will( $this->returnCallback( function ( $key ) use ( $altLinks ) { + if ( $key === 'wikibase-alternate-links' ) { + return $altLinks; + } else { + return $key; + } + } ) ); + + RepoHooks::onOutputPageParserOutput( $out, $parserOutput ); + + $this->assertSame( + 'wikibase-view-chunks', + $out->getProperty( 'wikibase-view-chunks' ) + ); + + $this->assertSame( + 'wikibase-titletext', + $out->getProperty( 'wikibase-titletext' ) + ); + + $this->assertSame( $altLinks, $out->getLinkTags() ); + } } diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/WikibaseRepoTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/WikibaseRepoTest.php index d679229..5d88e42 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/WikibaseRepoTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/WikibaseRepoTest.php @@ -79,9 +79,9 @@ $this->assertInstanceOf( 'Wikibase\DataModel\Entity\EntityIdParser', $returnValue ); } - public function testGetClaimGuidParser() { - $returnValue = $this->getWikibaseRepo()->getClaimGuidParser(); - $this->assertInstanceOf( 'Wikibase\DataModel\Claim\ClaimGuidParser', $returnValue ); + public function testGetStatementGuidParser() { + $returnValue = $this->getWikibaseRepo()->getStatementGuidParser(); + $this->assertInstanceOf( 'Wikibase\DataModel\Statement\StatementGuidParser', $returnValue ); } public function testGetLanguageFallbackChainFactory() { diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/content/EntityContentTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/content/EntityContentTest.php index 13e4d14..b6338a7 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/content/EntityContentTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/content/EntityContentTest.php @@ -151,13 +151,14 @@ public function providePageProperties() { $cases = array(); + $emptyContent = $this->newEmpty( $this->getDummyId() ); $cases['empty'] = array( - $this->newEmpty(), + $emptyContent, array( 'wb-status' => EntityContent::STATUS_EMPTY, 'wb-claims' => 0 ) ); - $contentWithLabel = $this->newEmpty(); + $contentWithLabel = $this->newEmpty( $this->getDummyId() ); $contentWithLabel->getEntity()->setLabel( 'en', 'Foo' ); $cases['labels'] = array( diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php index 2c00a6b..56190ef 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php @@ -99,7 +99,7 @@ public function providePageProperties() { $cases = parent::providePageProperties(); - $contentLinkStub = ItemContent::newEmpty(); + $contentLinkStub = $this->newEmpty( $this->getDummyId() ); $contentLinkStub->getEntity()->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Foo' ); $cases['sitelinks'] = array( @@ -109,7 +109,7 @@ // @todo this is needed in PropertyContentTest as well // once we have statements in properties - $contentWithClaim = $this->newEmpty(); + $contentWithClaim = $this->newEmpty( $this->getDummyId() ); $snak = new PropertyNoValueSnak( 83 ); $guid = '$testing$'; $contentWithClaim->getEntity()->getStatements()->addNewStatement( $snak, null, null, $guid ); diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/rdf/RdfBuilderTestData.php b/extensions/Wikibase/repo/tests/phpunit/includes/rdf/RdfBuilderTestData.php index 90b9791..b3b4b90 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/rdf/RdfBuilderTestData.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/rdf/RdfBuilderTestData.php @@ -31,7 +31,7 @@ class RdfBuilderTestData { const URI_BASE = 'http://acme.test/'; - const URI_DATA = 'http://data.acme.test/'; + const URI_DATA = 'https://data.acme.test/'; /** * @var EntityContentDataCodec|null diff --git a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js index 3dbaf4c..12dc291 100644 --- a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js +++ b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js @@ -118,13 +118,6 @@ _rankSelector: null, /** - * Shortcut to the `ListItemAdapter` in use in the `listview` managing the `referenceview`s. - * @property {jQuery.wikibase.listview.ListItemAdapter} - * @private - */ - _referenceviewLia: null, - - /** * Shortcut to the `listview` managing the `referenceview`s. * @property {jQuery.wikibase.listview} * @private @@ -343,7 +336,7 @@ this._referencesListview = $listview.data( 'listview' ); - this._referenceviewLia = this._referencesListview.listItemAdapter(); + var lia = this._referencesListview.listItemAdapter(); $listview .on( 'listviewitemadded listviewitemremoved', function( event, value, $li ) { @@ -357,10 +350,9 @@ } // Enter first item into the referenceview. - self._referenceviewLia.liInstance( $newLi ).enterNewItem(); + lia.liInstance( $newLi ).enterNewItem(); - var lia = self._referenceviewLia, - liInstance = lia.liInstance( $newLi ); + var liInstance = lia.liInstance( $newLi ); if ( !liInstance.value() ) { $newLi @@ -562,8 +554,7 @@ * @return {wikibase.datamodel.Reference[]} */ _getReferences: function() { - var self = this, - references = []; + var references = []; // If the statement is pending (not yet stored), the listview widget for the references is // not defined. @@ -571,8 +562,10 @@ return references; } + var lia = this._referencesListview.listItemAdapter(); + $.each( this._referencesListview.items(), function( i, item ) { - var referenceview = self._referenceviewLia.liInstance( $( item ) ), + var referenceview = lia.liInstance( $( item ) ), reference = referenceview ? referenceview.value() : null; if( reference ) { references.push( reference ); diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index e895af8..6322520 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1165,12 +1165,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "3581172e065795559f80d7cebf4291123dd30018" + "reference": "df4d4e61295461858bd8c07928e2eaf7207b3910" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3581172e065795559f80d7cebf4291123dd30018", - "reference": "3581172e065795559f80d7cebf4291123dd30018", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/df4d4e61295461858bd8c07928e2eaf7207b3910", + "reference": "df4d4e61295461858bd8c07928e2eaf7207b3910", "shasum": "" }, "require": { @@ -1197,7 +1197,7 @@ "conflict": { "mediawiki/mediawiki": "<1.23" }, - "time": "2015-06-24 09:22:11", + "time": "2015-06-25 07:24:51", "type": "mediawiki-extension", "installation-source": "dist", "autoload": { -- To view, visit https://gerrit.wikimedia.org/r/220729 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5e8658e804c7ca652a1cf66df93e7aae5a76f7a8 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikidata Gerrit-Branch: master Gerrit-Owner: WikidataBuilder <wikidata-servi...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits