jenkins-bot has submitted this change and it was merged. Change subject: New Wikidata Build - 2015-04-15T10:00:02+0000 ......................................................................
New Wikidata Build - 2015-04-15T10:00:02+0000 Change-Id: Icca83444d98c19b3b9f5388aeb8faae0f5abdb0e --- M composer.lock M extensions/Wikibase/client/i18n/azb.json M extensions/Wikibase/client/includes/UpdateRepo/UpdateRepo.php M extensions/Wikibase/client/includes/store/ClientStore.php M extensions/Wikibase/client/includes/store/sql/DirectSqlStore.php M extensions/Wikibase/client/tests/phpunit/MockClientStore.php M extensions/Wikibase/client/tests/phpunit/includes/store/sql/DirectSqlStoreTest.php M extensions/Wikibase/lib/i18n/azb.json M extensions/Wikibase/lib/includes/ChangeNotificationJob.php A extensions/Wikibase/lib/includes/store/NullEntityPrefetcher.php M extensions/Wikibase/lib/includes/store/sql/SiteLinkTable.php M extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php M extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php M extensions/Wikibase/repo/Wikibase.hooks.php M extensions/Wikibase/repo/i18n/de.json M extensions/Wikibase/repo/i18n/en.json M extensions/Wikibase/repo/i18n/hi.json M extensions/Wikibase/repo/i18n/khw.json M extensions/Wikibase/repo/i18n/nb.json M extensions/Wikibase/repo/i18n/ru.json M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpClaimRemove.php M extensions/Wikibase/repo/includes/ChangeOp/ChangeOpMainSnak.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/ChangeOpStatementRank.php M extensions/Wikibase/repo/includes/ClaimSummaryBuilder.php M extensions/Wikibase/repo/includes/Dumpers/DumpGenerator.php M extensions/Wikibase/repo/includes/Dumpers/JsonDumpGenerator.php M extensions/Wikibase/repo/includes/Dumpers/RdfDumpGenerator.php M extensions/Wikibase/repo/includes/api/ClaimModificationHelper.php M extensions/Wikibase/repo/includes/api/GetClaims.php M extensions/Wikibase/repo/includes/api/GetEntities.php M extensions/Wikibase/repo/includes/specials/SpecialModifyTerm.php M extensions/Wikibase/repo/includes/store/Store.php M extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php M extensions/Wikibase/repo/includes/store/sql/SqlStore.php M extensions/Wikibase/repo/maintenance/dumpJson.php M extensions/Wikibase/repo/maintenance/dumpRdf.php M extensions/Wikibase/repo/maintenance/rebuildItemsPerSite.php M extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/JsonDumpGeneratorTest.php M extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php M extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php M extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php M extensions/Wikibase/repo/tests/phpunit/includes/specials/SpecialModifyTermTestCase.php M extensions/Wikibase/repo/tests/phpunit/includes/store/sql/ItemsPerSiteBuilderTest.php M extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php M vendor/composer/autoload_classmap.php M vendor/composer/installed.json 50 files changed, 325 insertions(+), 116 deletions(-) Approvals: JanZerebecki: Looks good to me, approved jenkins-bot: Verified diff --git a/composer.lock b/composer.lock index 96b82b4..37967d5 100644 --- a/composer.lock +++ b/composer.lock @@ -1209,12 +1209,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "43ad0d2c5bc348c04e25c4fc1797f3dbb113ce70" + "reference": "74ed9964b5ce079264ef79496551a48364f41e84" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/43ad0d2c5bc348c04e25c4fc1797f3dbb113ce70", - "reference": "43ad0d2c5bc348c04e25c4fc1797f3dbb113ce70", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/74ed9964b5ce079264ef79496551a48364f41e84", + "reference": "74ed9964b5ce079264ef79496551a48364f41e84", "shasum": "" }, "require": { @@ -1282,7 +1282,7 @@ "wikibaserepo", "wikidata" ], - "time": "2015-04-14 15:26:12" + "time": "2015-04-15 09:53:00" }, { "name": "wikibase/wikimedia-badges", diff --git a/extensions/Wikibase/client/i18n/azb.json b/extensions/Wikibase/client/i18n/azb.json index d684810..e1ae257 100644 --- a/extensions/Wikibase/client/i18n/azb.json +++ b/extensions/Wikibase/client/i18n/azb.json @@ -1,17 +1,18 @@ { "@metadata": { "authors": [ - "Amir a57" + "Amir a57", + "Koroğlu" ] }, - "tooltip-t-wikibase": "آیتمه باغلانتی داده مخزنی ایله ایلگی سی وار", + "tooltip-t-wikibase": "آیتمه باغلانتی وئری مخزنی ایله ایلگی سی وار", "wikibase-comment-update": "{{WBREPONAME}} آیتمی دَییشیلدی", "wikibase-dataitem": "آیتم {{WBREPONAME}}", - "wikibase-editlinks": "باغلانتیلاری دَییشدیر", - "wikibase-editlinkstitle": "داها دیل لردکی باغلانتی لاری دَییشدیر", + "wikibase-editlinks": "باغلانتیلاری دَییشدیر", + "wikibase-editlinkstitle": "داها دیللردکی باغلانتیلاری دَییشدیر", "wikibase-rc-hide-wikidata": "$1 {{WBREPONAME}}", "wikibase-rc-hide-wikidata-hide": "گیزلت", - "wikibase-rc-hide-wikidata-show": "گؤستر", + "wikibase-rc-hide-wikidata-show": "گؤرست", "wikibase-rc-wikibase-edit-letter": "د", "wikibase-rc-wikibase-edit-title": "{{WBREPONAME}} دَییشیکلیغی", "wikibase-otherprojects": "آیری پروژهلر" diff --git a/extensions/Wikibase/client/includes/UpdateRepo/UpdateRepo.php b/extensions/Wikibase/client/includes/UpdateRepo/UpdateRepo.php index ea21694..8f9f36a 100644 --- a/extensions/Wikibase/client/includes/UpdateRepo/UpdateRepo.php +++ b/extensions/Wikibase/client/includes/UpdateRepo/UpdateRepo.php @@ -155,10 +155,7 @@ */ public function injectJob( JobQueueGroup $jobQueueGroup ) { $job = $this->createJob( $jobQueueGroup ); - - wfProfileIn( __METHOD__ . '#push' ); $jobQueueGroup->push( $job ); - wfProfileOut( __METHOD__ . '#push' ); } /** diff --git a/extensions/Wikibase/client/includes/store/ClientStore.php b/extensions/Wikibase/client/includes/store/ClientStore.php index 5ab3f1c..bf63616 100644 --- a/extensions/Wikibase/client/includes/store/ClientStore.php +++ b/extensions/Wikibase/client/includes/store/ClientStore.php @@ -113,4 +113,14 @@ * @since 0.2 */ public function rebuild(); + + /** + * Returns an EntityPrefetcher which can be used to prefetch a list of entity + * ids in case we need to for example load a batch of entity ids. + * + * @since 0.5 + * + * @return EntityPrefetcher + */ + public function getEntityPrefetcher(); } diff --git a/extensions/Wikibase/client/includes/store/sql/DirectSqlStore.php b/extensions/Wikibase/client/includes/store/sql/DirectSqlStore.php index ac7d5c5..dbbf3f4 100644 --- a/extensions/Wikibase/client/includes/store/sql/DirectSqlStore.php +++ b/extensions/Wikibase/client/includes/store/sql/DirectSqlStore.php @@ -144,6 +144,11 @@ private $subscriptionManager = null; /** + * @var PrefetchingWikiPageEntityMetaDataAccessor|null + */ + private $entityPrefetcher = null; + + /** * @var string */ private $siteId; @@ -315,10 +320,7 @@ // NOTE: Keep cache key in sync with SqlStore::newEntityRevisionLookup in WikibaseRepo $cacheKeyPrefix = $this->cacheKeyPrefix . ':WikiPageEntityRevisionLookup'; - $metaDataFetcher = new PrefetchingWikiPageEntityMetaDataAccessor( - new WikiPageEntityMetaDataLookup( $this->entityIdParser, $this->repoWiki ) - ); - + $metaDataFetcher = $this->getEntityPrefetcher(); $rawLookup = new WikiPageEntityRevisionLookup( $this->contentCodec, $metaDataFetcher, @@ -451,4 +453,16 @@ return $this->propertyInfoTable; } + /** + * @return PrefetchingWikiPageEntityMetaDataAccessor + */ + public function getEntityPrefetcher() { + if ( $this->entityPrefetcher === null ) { + $this->entityPrefetcher = new PrefetchingWikiPageEntityMetaDataAccessor( + new WikiPageEntityMetaDataLookup( $this->entityIdParser ) + ); + } + + return $this->entityPrefetcher; + } } diff --git a/extensions/Wikibase/client/tests/phpunit/MockClientStore.php b/extensions/Wikibase/client/tests/phpunit/MockClientStore.php index 6705537..a6aaa73 100644 --- a/extensions/Wikibase/client/tests/phpunit/MockClientStore.php +++ b/extensions/Wikibase/client/tests/phpunit/MockClientStore.php @@ -11,6 +11,7 @@ use Wikibase\ClientStore; use Wikibase\Lib\Store\EntityLookup; use Wikibase\Lib\Store\EntityRevisionLookup; +use Wikibase\Lib\Store\NullEntityPrefetcher; use Wikibase\Lib\Store\SiteLinkLookup; use Wikibase\PropertyInfoStore; use Wikibase\PropertyLabelResolver; @@ -177,4 +178,13 @@ return self::$propertyInfoStore; } + /** + * @see ClientStore::getEntityPrefetcher + * + * @return EntityPrefetcher + */ + public function getEntityPrefetcher() { + return new NullEntityPrefetcher(); + } + } diff --git a/extensions/Wikibase/client/tests/phpunit/includes/store/sql/DirectSqlStoreTest.php b/extensions/Wikibase/client/tests/phpunit/includes/store/sql/DirectSqlStoreTest.php index 7fa41fa..fc54f4f 100644 --- a/extensions/Wikibase/client/tests/phpunit/includes/store/sql/DirectSqlStoreTest.php +++ b/extensions/Wikibase/client/tests/phpunit/includes/store/sql/DirectSqlStoreTest.php @@ -54,6 +54,7 @@ array( 'getUsageLookup', 'Wikibase\Client\Usage\UsageLookup' ), array( 'getSubscriptionManager', 'Wikibase\Client\Usage\SubscriptionManager' ), array( 'getEntityIdLookup', 'Wikibase\Store\EntityIdLookup' ), + array( 'getEntityPrefetcher', 'Wikibase\Lib\Store\EntityPrefetcher' ), ); } diff --git a/extensions/Wikibase/lib/i18n/azb.json b/extensions/Wikibase/lib/i18n/azb.json index d066905..7954313 100644 --- a/extensions/Wikibase/lib/i18n/azb.json +++ b/extensions/Wikibase/lib/i18n/azb.json @@ -1,8 +1,9 @@ { "@metadata": { "authors": [ - "Amir a57" + "Amir a57", + "Koroğlu" ] }, - "wikibase-sitelinks-wikipedia": "ویکیپئدیا" + "wikibase-sitelinks-wikipedia": "ویکیپدیا" } diff --git a/extensions/Wikibase/lib/includes/ChangeNotificationJob.php b/extensions/Wikibase/lib/includes/ChangeNotificationJob.php index af61c08..0397d36 100644 --- a/extensions/Wikibase/lib/includes/ChangeNotificationJob.php +++ b/extensions/Wikibase/lib/includes/ChangeNotificationJob.php @@ -90,8 +90,6 @@ */ public function getChanges() { if ( $this->changes === null ) { - wfProfileIn( __METHOD__ . '#load' ); - $params = $this->getParams(); $ids = $params['changeIds']; @@ -112,8 +110,6 @@ . " Some changes were lost, possibly due to premature pruning.", E_USER_WARNING ); } - - wfProfileOut( __METHOD__ . '#load' ); } return $this->changes; diff --git a/extensions/Wikibase/lib/includes/store/NullEntityPrefetcher.php b/extensions/Wikibase/lib/includes/store/NullEntityPrefetcher.php new file mode 100644 index 0000000..dc45d57 --- /dev/null +++ b/extensions/Wikibase/lib/includes/store/NullEntityPrefetcher.php @@ -0,0 +1,36 @@ +<?php + +namespace Wikibase\Lib\Store; + +use Wikibase\DataModel\Entity\EntityId; + +/** + * No-op EntityPrefetcher + * + * @since 0.5 + * + * @license GNU GPL v2+ + * @author Marius Hoch < h...@online.de > + */ +class NullEntityPrefetcher implements EntityPrefetcher { + + /** + * Prefetches data for a list of entity ids. + * + * @param EntityId[] $entityIds + */ + public function prefetch( array $entityIds ) {} + + /** + * Purges prefetched data about a given entity. + * + * @param EntityId $entityId + */ + public function purge( EntityId $entityId ) {} + + /** + * Purges all prefetched data. + */ + public function purgeAll() {} + +} diff --git a/extensions/Wikibase/lib/includes/store/sql/SiteLinkTable.php b/extensions/Wikibase/lib/includes/store/sql/SiteLinkTable.php index 0556849..12bfc4b 100644 --- a/extensions/Wikibase/lib/includes/store/sql/SiteLinkTable.php +++ b/extensions/Wikibase/lib/includes/store/sql/SiteLinkTable.php @@ -310,7 +310,6 @@ //TODO: $anyOfTheLinks might get very large and hit some size limit imposed by the database. // We could chop it up of we know that size limit. For MySQL, it's select @@max_allowed_packet. - wfProfileIn( __METHOD__ . '#select' ); $conflictingLinks = $dbr->select( $this->table, array( @@ -321,7 +320,6 @@ "($anyOfTheLinks) AND ips_item_id != " . intval( $item->getId()->getNumericId() ), __METHOD__ ); - wfProfileOut( __METHOD__ . '#select' ); $conflicts = array(); diff --git a/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php b/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php index 345742a..0d54f05 100644 --- a/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php +++ b/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php @@ -295,8 +295,7 @@ /** * Calculate a weight the given entity to be used for ranking. Should be normalized * between 0 and 1, but that's not a strong constraint. - * This implementation relies on sitelinks, and simply takes the number of sitelinks - * as the weight. + * This implementation uses the max of the number of labels and the number of sitelinks. * * TODO Should be moved to its own object and be added via dependency injection * @@ -307,11 +306,17 @@ private function getWeight( EntityDocument $entity ) { // FIXME: OCP violation. No support for new types of entities can be registered - if ( $entity instanceof Item ) { - return $entity->getSiteLinkList()->count() / 1000.0; + $weight = 0.0; + + if ( $entity instanceof FingerprintProvider ) { + $weight = max( $weight, $entity->getFingerprint()->getLabels()->count() / 1000.0 ); } - return 0.0; + if ( $entity instanceof Item ) { + $weight = max( $weight, $entity->getSiteLinkList()->count() / 1000.0 ); + } + + return $weight; } /** @@ -828,6 +833,7 @@ $entityType, array( 'LIMIT' => $this->maxConflicts, + 'caseSensitive' => false ) ); @@ -886,8 +892,8 @@ $matchConditions = array( 'L.term_language' => $lang, - 'L.term_text' => $label, - 'D.term_text' => $description, + 'L.term_search_key' => $this->getSearchKey( $label, $lang ), + 'D.term_search_key' => $this->getSearchKey( $description, $lang ) ); $termConditions[] = $dbr->makeList( $matchConditions, LIST_AND ); diff --git a/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php b/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php index 0155d1d..4090b3b 100644 --- a/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php +++ b/extensions/Wikibase/lib/tests/phpunit/store/TermIndexTest.php @@ -389,6 +389,12 @@ array( 'de' => 'Foo' ), array( 'P6' ), ), + 'by label, different case' => array( + $entities, + Property::ENTITY_TYPE, + array( 'de' => 'fOO' ), + array( 'P6' ), + ), 'by label mismatch' => array( $entities, Item::ENTITY_TYPE, @@ -446,6 +452,20 @@ array( 'de' => 'Bar' ), array( 'Q1' ), ), + 'by label and description, different label capitalization' => array( + $entities, + Item::ENTITY_TYPE, + array( 'de' => 'fOO' ), + array( 'de' => 'Bar' ), + array( 'Q1' ), + ), + 'by label and description, different description capitalization' => array( + $entities, + Item::ENTITY_TYPE, + array( 'de' => 'Foo' ), + array( 'de' => 'bAR' ), + array( 'Q1' ), + ), 'two languages for label and description' => array( $entities, Item::ENTITY_TYPE, diff --git a/extensions/Wikibase/repo/Wikibase.hooks.php b/extensions/Wikibase/repo/Wikibase.hooks.php index 97060e7..cbec186 100644 --- a/extensions/Wikibase/repo/Wikibase.hooks.php +++ b/extensions/Wikibase/repo/Wikibase.hooks.php @@ -964,10 +964,12 @@ $out->addJsConfigVars( 'wbUserSpecifiedLanguages', // All user-specified languages, that are valid term languages - array_intersect( + // Reindex the keys so that javascript still works if an unknown + // language code in the babel box causes an index to miss + array_values( array_intersect( $userLanguageLookup->getUserSpecifiedLanguages( $out->getUser() ), $termsLanguages->getLanguages() - ) + ) ) ); } diff --git a/extensions/Wikibase/repo/i18n/de.json b/extensions/Wikibase/repo/i18n/de.json index 1085db9..bb53913 100644 --- a/extensions/Wikibase/repo/i18n/de.json +++ b/extensions/Wikibase/repo/i18n/de.json @@ -414,6 +414,7 @@ "apihelp-wbgetclaims-example-1": "Ruft Behauptungen für das Objekt mit der Kennung Q42 ab", "apihelp-wbgetentities-description": "Ruft die Daten für mehrere Wikibase-Objekte ab.", "apihelp-wbgetentities-param-ids": "Die Kennungen der Objekte, von denen die Daten abgerufen werden sollen", + "apihelp-wbmergeitems-example-1": "Führt Daten von Q42 in Q222 zusammen", "apihelp-wbparsevalue-param-parser": "Kennung des zu verwendenden Werteparsers", "apihelp-wbparsevalue-param-values": "Die zu parsenden Werte", "apihelp-wbparsevalue-example-1": "Keine Änderung am Format der Zeichenfolge.", diff --git a/extensions/Wikibase/repo/i18n/en.json b/extensions/Wikibase/repo/i18n/en.json index 71e8bd6..8ca930e 100644 --- a/extensions/Wikibase/repo/i18n/en.json +++ b/extensions/Wikibase/repo/i18n/en.json @@ -169,19 +169,16 @@ "wikibase-setlabel-intro": "This form allows you to set the label of an entity. You need to provide the id of the entity (e.g. Q23), a language code (e.g. \"en\") and the label to set to.", "wikibase-setlabel-label": "Label:", "wikibase-setlabel-submit": "Set label", - "wikibase-setlabel-warning-remove": "Do you really want to remove the label of [[$1]]?", "special-setdescription": "Set a description", "wikibase-setdescription-introfull": "You are setting the description in $2 for [[$1]].", "wikibase-setdescription-intro": "This form allows you to set the description of an entity. You need to provide the id of the entity (e.g. Q23), a language code (e.g. \"en\") and the description to set to.", "wikibase-setdescription-label": "Description:", "wikibase-setdescription-submit": "Set description", - "wikibase-setdescription-warning-remove": "Do you really want to remove the description of [[$1]]?", "special-setaliases": "Set aliases", "wikibase-setaliases-introfull": "You are setting the aliases in $2 for [[$1]]. Several aliases are separated by a pipe (<code>|</code>) character.", "wikibase-setaliases-intro": "This form allows you to set the aliases of an entity. You need to provide the id of the entity (e.g. Q23), a language code (e.g. \"en\") and the aliases to set to. Several aliases are separated by a pipe (<code>|</code>) character.", "wikibase-setaliases-label": "Aliases:", "wikibase-setaliases-submit": "Set aliases", - "wikibase-setaliases-warning-remove": "Do you really want to remove all aliases of [[$1]]?", "special-setlabeldescriptionaliases": "Set label, description and aliases", "wikibase-setlabeldescriptionaliases-introfull": "You are setting label, description and aliases in $2 for [[$1]]. Several aliases are separated by a pipe (<code>|</code>) character.", "wikibase-setlabeldescriptionaliases-intro": "This form allows you to set label, description and aliases of an entity. You need to first provide the id of the entity (e.g. Q23) and a language code (e.g. \"en\").", diff --git a/extensions/Wikibase/repo/i18n/hi.json b/extensions/Wikibase/repo/i18n/hi.json index 644ffa0..6542cf7 100644 --- a/extensions/Wikibase/repo/i18n/hi.json +++ b/extensions/Wikibase/repo/i18n/hi.json @@ -5,7 +5,8 @@ "Pooja 1810", "Siddhartha Ghai", "Vivek Rai", - "Wikiuser13" + "Wikiuser13", + "రహ్మానుద్దీన్" ] }, "wikibase-edit": "संपादन", @@ -15,14 +16,16 @@ "wikibase-addreference": "स्रोत जोड़ें", "wikibase-save-inprogress": "सहेजा जा रहा है…", "wikibase-remove-inprogress": "हटाया जा रहा है…", - "wikibase-label-empty": "कोई लेबल परिभाषित नहीं", - "wikibase-description-empty": "कोई विवरण परिभाषित नहीं", + "wikibase-label-empty": "कोई नामपत्र परिभाषित नहीं", + "wikibase-description-empty": "कोई विवरण परिभाषित नहीं।", "wikibase-description-edit-placeholder": "विवरण दर्ज करें", "wikibase-sitelink-site-edit-placeholder": "साइट", "wikibase-sitelink-page-edit-placeholder": "पृष्ठ", "wikibase-statements": "कथन", "wikibase-sitelinks-special": "अन्य वेबसाइट", "wikibase-remove": "ह्टाना", + "wikibase-aliases-empty": "कोई उर्फ परिभाषित नही।", + "wikibase-statementview-rank-normal": "साधारण पद", "wikibase-statementview-referencesheading-pendingcountersubject": "{{PLURAL:$1|स्रोत}}", "wikibase-entityselector-more": "ज़्यादा", "wikibase-itembytitle-lookup-page": "पृष्ठ:", diff --git a/extensions/Wikibase/repo/i18n/khw.json b/extensions/Wikibase/repo/i18n/khw.json index 5605475..ea909a5 100644 --- a/extensions/Wikibase/repo/i18n/khw.json +++ b/extensions/Wikibase/repo/i18n/khw.json @@ -7,8 +7,10 @@ "wikibase-edit": "ترمیم", "wikibase-add": "شامل کورے", "wikibase-label-empty": "کیہ لیبل ڈیفائن کورونو نو بیتی شیر", + "wikibase-description-empty": "ھیچ کیہ عنوان نیکی", "wikibase-statements": "بیانات", "wikibase-sitelinks-special": "دیگر ویب سائٹ", + "wikibase-aliases-empty": "ھیچ کیہ مثال موجود نیکی", "wikibase-statementview-rank-normal": "عام درجہ بندی", "wikibase-statementview-referencesheading-pendingcountersubject": "{{PLURAL:$1|reference|references}}" } diff --git a/extensions/Wikibase/repo/i18n/nb.json b/extensions/Wikibase/repo/i18n/nb.json index 66875b3..6fc01cc 100644 --- a/extensions/Wikibase/repo/i18n/nb.json +++ b/extensions/Wikibase/repo/i18n/nb.json @@ -132,7 +132,7 @@ "wikibase-newproperty-invalid-datatype": "En ugyldig datatype er angitt.", "special-newitem": "Lag et nytt element", "wikibase-newitem-summary": "Sjekk først at [[Special:ItemByTitle|elementet ikke allerede finnes]]!<br>For alle nye elementer bør du fylle inn en [[Help:Label|etikett]] og en kort [[Help:Description|beskrivelse]].", - "wikibase-newitem-fieldset": "Opprettt et nytt element", + "wikibase-newitem-fieldset": "Opprettet et nytt element", "wikibase-newitem-site": "Nettsted for første nettstedlenke", "wikibase-newitem-page": "Tittel for første nettstedlenke", "wikibase-newitem-no-external-page": "Den oppgitte tittel ble ikke funnet på nettstedet", @@ -236,12 +236,12 @@ "wikibase-noentity-createone": "Du kan også [[$1|opprette en ny en]].", "wikibase-special-mergeitems-error-prefix": "Elementene kunne ikke slås sammen. Følgende feil oppstod:", "wikibase-item-summary-wbsetitem": "Opprettet et nytt element", - "wikibase-item-summary-wbcreate-new": "Lag et nytt element", + "wikibase-item-summary-wbcreate-new": "Opprettet et nytt element", "wikibase-item-summary-wbcreateredirect": "Omdirigert til $4", "wikibase-item-summary-wbeditentity": "Opprettet et nytt element", "wikibase-item-summary-wbeditentity-create": "Opprettet et nytt element", "wikibase-item-summary-wbeditentity-update": "Endret et element", - "wikibase-item-summary-wbeditentity-override": "Overstyre et element", + "wikibase-item-summary-wbeditentity-override": "Overstyrte et element", "wikibase-item-summary-wbsetreference": "Lagre en referanse", "wikibase-item-summary-wbsetreference-add": "La til referanse til påstand", "wikibase-item-summary-wbsetreference-set": "Endret referanse for påstand", diff --git a/extensions/Wikibase/repo/i18n/ru.json b/extensions/Wikibase/repo/i18n/ru.json index dd172cd..d1b4788 100644 --- a/extensions/Wikibase/repo/i18n/ru.json +++ b/extensions/Wikibase/repo/i18n/ru.json @@ -358,7 +358,7 @@ "wikibase-listdatatypes-string-head": "Строка", "wikibase-listdatatypes-string-body": "Символьное поле данных для строки символов. Обычное применение — идентификаторы, письменные формы которых не зависят от языка. Такие строки могут в некоторых случаях транслитерироваться в другие системы записи.\n* value — явно задаваемое значение для строки на определенном языке", "wikibase-listdatatypes-time-head": "Время", - "wikibase-listdatatypes-time-body": "Символьное поле данных для значения времени. Задаётся как время с некоторой точностью и границами. Внутренний формат хранения значений времени — всегда [[:w:ru:Пролептический григорианский календарь|«предваряющий григорианский календарь»]], но во время синтаксического анализа и форматирования могут использоваться другие форматы.\n* time — явно задаваемое значение для точки во времени, представленное по ISO8601 (год всегда состоит из 11 цифр, даты всегда должны быть указаны), в формате +00000002013-01-01T00:00:00Z\n* timezone — явно задаваемое значение в виде целого числа. Информация о часовом поясе задаётся как смещение от UTC в минутах.\n* before — явно задаваемое целочисленное значение для указания, на сколько единиц ранее(?) указанного времени это может быть. Единицы задается точностью.\n* after — явно задаваемое целочисленное значение для указания, на сколько единиц позднее(?) указанного времени это может быть. Единицы задается точностью.\n* precision — явно задаваемое значение, закодированное в виде короткого числа (shortint). Номера имеют следующие значения: 0 — миллиард лет, 1 — сто миллионов лет,..., 6 — тысячелетие, 7 — век, 8 — десятилетие, 9 — год, 10 — месяц, 11 — день, 12 — час, 13 — минута, 14 — секунда.\n* calendarmodel — явно задаваемое значение в виде URI. Определит модель календаря, который должен использоваться для отображения этого значения времени.", + "wikibase-listdatatypes-time-body": "Символьное поле данных для значения времени. Задаётся как время с некоторой точностью и границами. Внутренний формат хранения значений времени — всегда [[:w:ru:Пролептический григорианский календарь|«предваряющий григорианский календарь»]], но во время синтаксического анализа и форматирования могут использоваться другие форматы.\n* time — явно задаваемое значение для точки во времени, представленное как отметка времени, соответствующей ISO 8601 (например, +2013-01-01T00:00:00Z) Год всегда должен быть указан и при необходимости дополнен в начале нулями, чтобы содержать от 1 до 16 цифр.\n* timezone — явно задаваемое значение в виде целого числа. Информация о часовом поясе задаётся как смещение от UTC в минутах.\n* before — явно задаваемое целочисленное значение для указания, на сколько единиц ранее(?) указанного времени это может быть. Единицы задается точностью.\n* after — явно задаваемое целочисленное значение для указания, на сколько единиц позднее(?) указанного времени это может быть. Единицы задается точностью.\n* precision — явно задаваемое значение, закодированное в виде короткого числа (shortint). Номера имеют следующие значения: 0 — миллиард лет, 1 — сто миллионов лет,..., 6 — тысячелетие, 7 — век, 8 — десятилетие, 9 — год, 10 — месяц, 11 — день, 12 — час, 13 — минута, 14 — секунда.\n* calendarmodel — явно задаваемое значение в виде URI. Определит модель календаря, который должен использоваться для отображения этого значения времени.", "wikibase-listdatatypes-url-head": "URL", "wikibase-listdatatypes-url-body": "Символьное поле данных для URL-адреса. URL-адреса имеют ограничения, относящиеся к различным протоколам, также используемым в качестве внешних ссылок в викитексте.", "wikibase-concept-uri": "URI концепта", diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpClaimRemove.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpClaimRemove.php index 0e6c727..7bff58f 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpClaimRemove.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpClaimRemove.php @@ -77,10 +77,13 @@ * @throws ChangeOpException */ protected function removeClaim( Claims $claims, Summary $summary = null ) { - if( !$claims->hasClaimWithGuid( $this->claimGuid ) ) { + $claim = $claims->getClaimWithGuid( $this->claimGuid ); + + if ( $claim === null ) { throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); } - $removedSnak = $claims->getClaimWithGuid( $this->claimGuid )->getMainSnak(); + + $removedSnak = $claim->getMainSnak(); $claims->removeClaimWithGuid( $this->claimGuid ); $this->updateSummary( $summary, 'remove', '', $this->getClaimSummaryArgs( $removedSnak ) ); } diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpMainSnak.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpMainSnak.php index e240ff1..a8d78f7 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpMainSnak.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpMainSnak.php @@ -119,11 +119,12 @@ * @throws ChangeOpException */ private function setClaim( Claims $claims, Summary $summary = null ) { - if( !$claims->hasClaimWithGuid( $this->claimGuid ) ) { + $claim = $claims->getClaimWithGuid( $this->claimGuid ); + + if ( $claim === null ) { throw new ChangeOpException( "Entity does not have claim with GUID " . $this->claimGuid ); } - $claim = $claims->getClaimWithGuid( $this->claimGuid ); $propertyId = $claim->getMainSnak()->getPropertyId(); if ( !$propertyId->equals( $this->snak->getPropertyId() ) ) { diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php index 31c663f..587a931 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifier.php @@ -81,12 +81,12 @@ */ public function apply( Entity $entity, Summary $summary = null ) { $claims = new Claims( $entity->getClaims() ); + $claim = $claims->getClaimWithGuid( $this->claimGuid ); - if( !$claims->hasClaimWithGuid( $this->claimGuid ) ) { + if ( $claim === null ) { throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); } - $claim = $claims->getClaimWithGuid( $this->claimGuid ); $qualifiers = $claim->getQualifiers(); if ( $this->snakHash === '' ) { diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php index e359331..f7d1386 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpQualifierRemove.php @@ -61,12 +61,12 @@ */ public function apply( Entity $entity, Summary $summary = null ) { $claims = new Claims( $entity->getClaims() ); + $claim = $claims->getClaimWithGuid( $this->claimGuid ); - if( !$claims->hasClaimWithGuid( $this->claimGuid ) ) { + if ( $claim === null ) { throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); } - $claim = $claims->getClaimWithGuid( $this->claimGuid ); $qualifiers = $claim->getQualifiers(); $this->removeQualifier( $qualifiers, $summary ); diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php index 2830423..b8a0a41 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReference.php @@ -100,14 +100,13 @@ */ public function apply( Entity $entity, Summary $summary = null ) { $claims = new Claims( $entity->getClaims() ); + $claim = $claims->getClaimWithGuid( $this->claimGuid ); - if( !$claims->hasClaimWithGuid( $this->claimGuid ) ) { + if ( $claim === null ) { throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); } - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - - if ( ! ( $claim instanceof Statement ) ) { + if ( !( $claim instanceof Statement ) ) { throw new ChangeOpException( 'The referenced claim is not a statement and thus cannot have references' ); } diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php index 7f38ced..812729d 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpReferenceRemove.php @@ -62,12 +62,13 @@ */ public function apply( Entity $entity, Summary $summary = null ) { $claims = new Claims( $entity->getClaims() ); - if( !$claims->hasClaimWithGuid( $this->claimGuid ) ) { + $claim = $claims->getClaimWithGuid( $this->claimGuid ); + + if ( $claim === null ) { throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); } - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - if ( ! ( $claim instanceof Statement ) ) { + if ( !( $claim instanceof Statement ) ) { throw new ChangeOpException( 'The referenced claim is not a statement and thus cannot have references' ); } diff --git a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php index b180f41..5ee7fd8 100644 --- a/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php +++ b/extensions/Wikibase/repo/includes/ChangeOp/ChangeOpStatementRank.php @@ -62,14 +62,13 @@ */ public function apply( Entity $entity, Summary $summary = null ) { $claims = new Claims( $entity->getClaims() ); + $claim = $claims->getClaimWithGuid( $this->claimGuid ); - if( !$claims->hasClaimWithGuid( $this->claimGuid ) ) { + if ( $claim === null ) { throw new ChangeOpException( "Entity does not have claim with GUID $this->claimGuid" ); } - $claim = $claims->getClaimWithGuid( $this->claimGuid ); - - if ( ! ( $claim instanceof Statement ) ) { + if ( !( $claim instanceof Statement ) ) { throw new ChangeOpException( 'The referenced claim is not a statement and thus cannot have a rank' ); } diff --git a/extensions/Wikibase/repo/includes/ClaimSummaryBuilder.php b/extensions/Wikibase/repo/includes/ClaimSummaryBuilder.php index cd5bfd6..162a801 100644 --- a/extensions/Wikibase/repo/includes/ClaimSummaryBuilder.php +++ b/extensions/Wikibase/repo/includes/ClaimSummaryBuilder.php @@ -58,18 +58,19 @@ * @return Summary */ public function buildClaimSummary( Claims $existingClaims, Claim $newClaim ) { - $summary = new Summary( $this->apiModuleName ); + $guid = $newClaim->getGuid(); + $oldClaim = $existingClaims->getClaimWithGuid( $guid ); + $summary = new Summary( $this->apiModuleName ); $summary->addAutoCommentArgs( 1 ); // only one claim touched, so we're always having singular here $summaryArgs = $this->buildSummaryArgs( new Claims( array( $newClaim ) ), - array($newClaim->getGuid()) + array( $guid ) ); $summary->addAutoSummaryArgs( $summaryArgs ); - if ( $existingClaims->hasClaimWithGuid( $newClaim->getGuid() ) ) { + if ( $oldClaim !== null ) { //claim is changed - $oldClaim = $existingClaims->getClaimWithGuid( $newClaim->getGuid() ); $claimDifference = $this->claimDiffer->diffClaims( $oldClaim, $newClaim ); if ( $claimDifference->isAtomic() ) { @@ -112,9 +113,11 @@ private function buildSummaryArgs( Claims $claims, array $guids ) { $pairs = array(); - foreach( $guids as $guid ) { - if ( $claims->hasClaimWithGuid( $guid ) ) { - $snak = $claims->getClaimWithGuid( $guid )->getMainSnak(); + foreach ( $guids as $guid ) { + $claim = $claims->getClaimWithGuid( $guid ); + + if ( $claim !== null ) { + $snak = $claim->getMainSnak(); $key = $snak->getPropertyId()->getSerialization(); if ( !array_key_exists( $key, $pairs ) ) { diff --git a/extensions/Wikibase/repo/includes/Dumpers/DumpGenerator.php b/extensions/Wikibase/repo/includes/Dumpers/DumpGenerator.php index 771f58b..1a27798 100644 --- a/extensions/Wikibase/repo/includes/Dumpers/DumpGenerator.php +++ b/extensions/Wikibase/repo/includes/Dumpers/DumpGenerator.php @@ -8,6 +8,7 @@ use Wikibase\Lib\Reporting\MessageReporter; use Wikibase\Lib\Reporting\NullMessageReporter; use Wikibase\Lib\Reporting\RethrowingExceptionHandler; +use Wikibase\Lib\Store\EntityPrefetcher; use Wikibase\Lib\Store\StorageException; use Wikibase\Repo\Store\EntityIdPager; @@ -53,6 +54,11 @@ protected $exceptionHandler; /** + * @var EntityPrefetcher + */ + protected $entityPrefetcher; + + /** * @var string */ protected $entityType; @@ -66,16 +72,18 @@ /** * @param resource $out + * @param EntityPrefetcher $entityPrefetcher * * @throws InvalidArgumentException */ - public function __construct( $out ) { + public function __construct( $out, EntityPrefetcher $entityPrefetcher ) { if ( !is_resource( $out ) ) { throw new InvalidArgumentException( '$out must be a file handle!' ); } $this->out = $out; + $this->entityPrefetcher = $entityPrefetcher; $this->progressReporter = new NullMessageReporter(); $this->exceptionHandler = new RethrowingExceptionHandler(); } @@ -276,11 +284,15 @@ * @param int &$dumpCount The number of entities already dumped (will be updated). */ private function dumpEntities( array $entityIds, &$dumpCount ) { + $toLoad = array(); foreach ( $entityIds as $entityId ) { - if ( !$this->idMatchesFilters( $entityId ) ) { - continue; + if ( $this->idMatchesFilters( $entityId ) ) { + $toLoad[] = $entityId; } + } + $this->entityPrefetcher->prefetch( $entityIds ); + foreach ( $toLoad as $entityId ) { try { $data = $this->generateDumpForEntityId( $entityId ); if ( !$data ) { diff --git a/extensions/Wikibase/repo/includes/Dumpers/JsonDumpGenerator.php b/extensions/Wikibase/repo/includes/Dumpers/JsonDumpGenerator.php index 2a35aa7..ffdfd62 100644 --- a/extensions/Wikibase/repo/includes/Dumpers/JsonDumpGenerator.php +++ b/extensions/Wikibase/repo/includes/Dumpers/JsonDumpGenerator.php @@ -8,6 +8,7 @@ use Wikibase\DataModel\Entity\EntityId; use Wikibase\Lib\Serializers\Serializer; use Wikibase\Lib\Store\EntityLookup; +use Wikibase\Lib\Store\EntityPrefetcher; use Wikibase\Lib\Store\RedirectResolvingEntityLookup; use Wikibase\Lib\Store\StorageException; use Wikibase\Lib\Store\UnresolvedRedirectException; @@ -47,11 +48,12 @@ * @param resource $out * @param EntityLookup $lookup Must not resolve redirects * @param Serializer $entitySerializer + * @param EntityPrefetcher $entityPrefetcher * * @throws InvalidArgumentException */ - public function __construct( $out, EntityLookup $lookup, Serializer $entitySerializer ) { - parent::__construct( $out ); + public function __construct( $out, EntityLookup $lookup, Serializer $entitySerializer, EntityPrefetcher $entityPrefetcher ) { + parent::__construct( $out, $entityPrefetcher ); if ( $lookup instanceof RedirectResolvingEntityLookup ) { throw new InvalidArgumentException( '$lookup must not resolve redirects!' ); } diff --git a/extensions/Wikibase/repo/includes/Dumpers/RdfDumpGenerator.php b/extensions/Wikibase/repo/includes/Dumpers/RdfDumpGenerator.php index d71ea15..847f0b1 100644 --- a/extensions/Wikibase/repo/includes/Dumpers/RdfDumpGenerator.php +++ b/extensions/Wikibase/repo/includes/Dumpers/RdfDumpGenerator.php @@ -10,6 +10,7 @@ use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\PropertyDataTypeLookup; use Wikibase\Lib\Store\EntityLookup; +use Wikibase\Lib\Store\EntityPrefetcher; use Wikibase\Lib\Store\EntityRevisionLookup; use Wikibase\Lib\Store\RedirectResolvingEntityLookup; use Wikibase\Lib\Store\StorageException; @@ -53,11 +54,12 @@ * @param resource $out * @param EntityRevisionLookup $lookup Must not resolve redirects * @param RdfSerializer $entitySerializer + * @param EntityPrefetcher $entityPrefetcher * * @throws InvalidArgumentException */ - public function __construct( $out, EntityRevisionLookup $lookup, RdfSerializer $entitySerializer ) { - parent::__construct( $out ); + public function __construct( $out, EntityRevisionLookup $lookup, RdfSerializer $entitySerializer, EntityPrefetcher $entityPrefetcher ) { + parent::__construct( $out, $entityPrefetcher ); if ( $lookup instanceof RedirectResolvingEntityLookup ) { throw new InvalidArgumentException( '$lookup must not resolve redirects!' ); } @@ -136,7 +138,8 @@ SiteList $sites, EntityLookup $entityLookup, EntityRevisionLookup $entityRevisionLookup, - PropertyDataTypeLookup $propertyLookup + PropertyDataTypeLookup $propertyLookup, + EntityPrefetcher $entityPrefetcher ) { $rdfFormat = RdfSerializer::getRdfWriter( $format ); if( !$rdfFormat ) { @@ -153,7 +156,7 @@ RdfProducer::PRODUCE_SITELINKS | RdfProducer::PRODUCE_FULL_VALUES, new HashBagOStuff() ); - return new RdfDumpGenerator( $output, $entityRevisionLookup, $entitySerializer ); + return new RdfDumpGenerator( $output, $entityRevisionLookup, $entitySerializer, $entityPrefetcher ); } } diff --git a/extensions/Wikibase/repo/includes/api/ClaimModificationHelper.php b/extensions/Wikibase/repo/includes/api/ClaimModificationHelper.php index 6ed4c16..fe12cd8 100644 --- a/extensions/Wikibase/repo/includes/api/ClaimModificationHelper.php +++ b/extensions/Wikibase/repo/includes/api/ClaimModificationHelper.php @@ -97,12 +97,13 @@ */ public function getClaimFromEntity( $claimGuid, Entity $entity ) { $claims = new Claims( $entity->getClaims() ); + $claim = $claims->getClaimWithGuid( $claimGuid ); - if ( !$claims->hasClaimWithGuid( $claimGuid ) ) { + if ( $claim === null ) { $this->errorReporter->dieError( 'Could not find the claim' , 'no-such-claim' ); } - return $claims->getClaimWithGuid( $claimGuid ); + return $claim; } /** diff --git a/extensions/Wikibase/repo/includes/api/GetClaims.php b/extensions/Wikibase/repo/includes/api/GetClaims.php index c1ff7d1..8a8afa0 100644 --- a/extensions/Wikibase/repo/includes/api/GetClaims.php +++ b/extensions/Wikibase/repo/includes/api/GetClaims.php @@ -100,8 +100,8 @@ $claimsList = new Claims( $entity->getClaims() ); if ( $claimGuid !== null ) { - return $claimsList->hasClaimWithGuid( $claimGuid ) ? - array( $claimsList->getClaimWithGuid( $claimGuid ) ) : array(); + $claim = $claimsList->getClaimWithGuid( $claimGuid ); + return $claim !== null ? array( $claim ) : array(); } $claims = array(); diff --git a/extensions/Wikibase/repo/includes/api/GetEntities.php b/extensions/Wikibase/repo/includes/api/GetEntities.php index 2e6bd5f..2380ad9 100644 --- a/extensions/Wikibase/repo/includes/api/GetEntities.php +++ b/extensions/Wikibase/repo/includes/api/GetEntities.php @@ -44,6 +44,11 @@ private $siteLinkTargetProvider; /** + * @var EntityPrefetcher + */ + private $entityPrefetcher; + + /** * @var string[] */ private $siteLinkGroups; @@ -68,6 +73,7 @@ ); $this->siteLinkGroups = $wikibaseRepo->getSettings()->getSetting( 'siteLinkGroups' ); + $this->entityPrefetcher = $wikibaseRepo->getStore()->getEntityPrefetcher(); } /** @@ -193,6 +199,8 @@ private function getEntityRevisionsFromEntityIds( $entityIds, $resolveRedirects = false ) { $revisionArray = array(); + $this->entityPrefetcher->prefetch( $entityIds ); + foreach ( $entityIds as $entityId ) { $key = $entityId->getSerialization(); $entityRevision = $this->getEntityRevision( $entityId, $resolveRedirects ); diff --git a/extensions/Wikibase/repo/includes/specials/SpecialModifyTerm.php b/extensions/Wikibase/repo/includes/specials/SpecialModifyTerm.php index bf304c5..4914573 100644 --- a/extensions/Wikibase/repo/includes/specials/SpecialModifyTerm.php +++ b/extensions/Wikibase/repo/includes/specials/SpecialModifyTerm.php @@ -125,19 +125,11 @@ return false; } - // to provide removing after posting the full form + // If the user just enters an item id and a language, dont remove the term. + // The user can remove the term in the second form where it has to be + // actually removed. This prevents users from removing terms accidentally. if ( $request->getVal( 'remove' ) === null && $this->value === '' ) { - $id = $this->entityRevision->getEntity()->getId(); - - $this->showErrorHTML( - // Messages: wikibase-setlabel-warning-remove, wikibase-setdescription-warning-remove, - // wikibase-setaliases-warning-remove - $this->msg( - 'wikibase-' . strtolower( $this->getName() ) . '-warning-remove', - $this->getEntityTitle( $id )->getText() - )->parse(), - 'warning' - ); + $this->value = null; return false; } diff --git a/extensions/Wikibase/repo/includes/store/Store.php b/extensions/Wikibase/repo/includes/store/Store.php index 2daa2ba..b549d54 100644 --- a/extensions/Wikibase/repo/includes/store/Store.php +++ b/extensions/Wikibase/repo/includes/store/Store.php @@ -4,6 +4,7 @@ use Wikibase\Lib\Store\EntityInfoBuilderFactory; use Wikibase\Lib\Store\EntityLookup; +use Wikibase\Lib\Store\EntityPrefetcher; use Wikibase\Lib\Store\EntityRevisionLookup; use Wikibase\Lib\Store\EntityStore; use Wikibase\Lib\Store\EntityStoreWatcher; @@ -138,4 +139,14 @@ */ public function getSiteLinkConflictLookup(); + /** + * Returns an EntityPrefetcher which can be used to prefetch a list of entity + * ids in case we need to for example load a batch of entity ids. + * + * @since 0.5 + * + * @return EntityPrefetcher + */ + public function getEntityPrefetcher(); + } diff --git a/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php b/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php index 6fa57f8..2bb79c8 100644 --- a/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php +++ b/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php @@ -5,6 +5,7 @@ use Wikibase\DataModel\Entity\ItemId; use Wikibase\Lib\Reporting\MessageReporter; use Wikibase\Lib\Store\EntityLookup; +use Wikibase\Lib\Store\EntityPrefetcher; use Wikibase\Lib\Store\SiteLinkTable; use Wikibase\Repo\Store\EntityIdPager; @@ -29,6 +30,11 @@ private $entityLookup; /** + * @var EntityPrefetcher + */ + private $entityPrefetcher; + + /** * @var MessageReporter|null */ private $reporter = null; @@ -39,9 +45,15 @@ */ private $batchSize = 100; - public function __construct( SiteLinkTable $siteLinkTable, EntityLookup $entityLookup ) { + /** + * @param SiteLinkTable $siteLinkTable + * @param EntityLookup $entityLookup + * @param EntityPrefetcher $entityPrefetcher + */ + public function __construct( SiteLinkTable $siteLinkTable, EntityLookup $entityLookup, EntityPrefetcher $entityPrefetcher ) { $this->siteLinkTable = $siteLinkTable; $this->entityLookup = $entityLookup; + $this->entityPrefetcher = $entityPrefetcher; } /** @@ -88,6 +100,8 @@ * @return int */ private function rebuildSiteLinks( array $itemIds ) { + $this->entityPrefetcher->prefetch( $itemIds ); + $c = 0; foreach ( $itemIds as $itemId ) { if ( !( $itemId instanceof ItemId ) ) { diff --git a/extensions/Wikibase/repo/includes/store/sql/SqlStore.php b/extensions/Wikibase/repo/includes/store/sql/SqlStore.php index c18871c..8f2cadf 100644 --- a/extensions/Wikibase/repo/includes/store/sql/SqlStore.php +++ b/extensions/Wikibase/repo/includes/store/sql/SqlStore.php @@ -101,6 +101,11 @@ private $termIndex = null; /** + * @var PrefetchingWikiPageEntityMetaDataAccessor|null + */ + private $entityPrefetcher = null; + + /** * @var string */ private $cacheKeyPrefix; @@ -591,9 +596,7 @@ /** @var WikiPageEntityStore $dispatcher */ $dispatcher = $this->getEntityStoreWatcher(); - $metaDataFetcher = new PrefetchingWikiPageEntityMetaDataAccessor( - new WikiPageEntityMetaDataLookup( $this->entityIdParser ) - ); + $metaDataFetcher = $this->getEntityPrefetcher(); $dispatcher->registerWatcher( $metaDataFetcher ); $rawLookup = new WikiPageEntityRevisionLookup( @@ -711,4 +714,17 @@ return new SiteLinkTable( 'wb_items_per_site', false ); } + /** + * @return PrefetchingWikiPageEntityMetaDataAccessor + */ + public function getEntityPrefetcher() { + if ( $this->entityPrefetcher === null ) { + $this->entityPrefetcher = new PrefetchingWikiPageEntityMetaDataAccessor( + new WikiPageEntityMetaDataLookup( $this->entityIdParser ) + ); + } + + return $this->entityPrefetcher; + } + } diff --git a/extensions/Wikibase/repo/maintenance/dumpJson.php b/extensions/Wikibase/repo/maintenance/dumpJson.php index 96e24b5..10b123b 100644 --- a/extensions/Wikibase/repo/maintenance/dumpJson.php +++ b/extensions/Wikibase/repo/maintenance/dumpJson.php @@ -30,8 +30,15 @@ ); $entitySerializer = new DispatchingEntitySerializer( $serializerFactory, $serializerOptions ); + $entityPrefetcher = $this->wikibaseRepo->getStore()->getEntityPrefetcher(); - $dumper = new JsonDumpGenerator( $output, $this->entityLookup, $entitySerializer ); + $dumper = new JsonDumpGenerator( + $output, + $this->entityLookup, + $entitySerializer, + $entityPrefetcher + ); + $dumper->setUseSnippets( (bool)$this->getOption( 'snippet', false ) ); return $dumper; } diff --git a/extensions/Wikibase/repo/maintenance/dumpRdf.php b/extensions/Wikibase/repo/maintenance/dumpRdf.php index 61f56c7..82e4ca7 100644 --- a/extensions/Wikibase/repo/maintenance/dumpRdf.php +++ b/extensions/Wikibase/repo/maintenance/dumpRdf.php @@ -32,7 +32,8 @@ $entityDataTitle->getCanonicalURL() . '/', $this->wikibaseRepo->getSiteStore()->getSites(), $this->entityLookup, $this->revisionLookup, - $this->wikibaseRepo->getPropertyDataTypeLookup() ); + $this->wikibaseRepo->getPropertyDataTypeLookup(), + $this->wikibaseRepo->getStore()->getEntityPrefetcher() ); } } diff --git a/extensions/Wikibase/repo/maintenance/rebuildItemsPerSite.php b/extensions/Wikibase/repo/maintenance/rebuildItemsPerSite.php index 9af7e7c..c26f8b9 100644 --- a/extensions/Wikibase/repo/maintenance/rebuildItemsPerSite.php +++ b/extensions/Wikibase/repo/maintenance/rebuildItemsPerSite.php @@ -50,9 +50,11 @@ $siteLinkTable = new SiteLinkTable( 'wb_items_per_site', false ); // Use an uncached EntityLookup here to avoid memory leaks $entityLookup = WikibaseRepo::getDefaultInstance()->getEntityLookup( 'uncached' ); + $entityPrefetcher = WikibaseRepo::getDefaultInstance()->getStore()->getEntityPrefetcher(); $builder = new ItemsPerSiteBuilder( $siteLinkTable, - $entityLookup + $entityLookup, + $entityPrefetcher ); $builder->setReporter( $reporter ); diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/JsonDumpGeneratorTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/JsonDumpGeneratorTest.php index 2d352c3..315e436 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/JsonDumpGeneratorTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/JsonDumpGeneratorTest.php @@ -15,6 +15,7 @@ use Wikibase\Lib\Serializers\DispatchingEntitySerializer; use Wikibase\Lib\Serializers\SerializationOptions; use Wikibase\Lib\Serializers\SerializerFactory; +use Wikibase\Lib\Store\NullEntityPrefetcher; use Wikibase\Lib\Store\UnresolvedRedirectException; use Wikibase\Repo\Store\EntityIdPager; @@ -115,7 +116,12 @@ return $entities[$key]; } ) ); - return new JsonDumpGenerator( $out, $entityLookup, $serializer ); + return new JsonDumpGenerator( + $out, + $entityLookup, + $serializer, + new NullEntityPrefetcher() + ); } /** @@ -193,7 +199,12 @@ $out = fopen( 'php://output', 'w' ); $serializer = new DispatchingEntitySerializer( $this->serializerFactory ); - $jsonDumper = new JsonDumpGenerator( $out, $entityLookup, $serializer ); + $jsonDumper = new JsonDumpGenerator( + $out, + $entityLookup, + $serializer, + new NullEntityPrefetcher() + ); $exceptionHandler = $this->getMock( 'Wikibase\Lib\Reporting\ExceptionHandler' ); $exceptionHandler->expects( $this->exactly( count( $ids ) ) ) diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php index a6d575b..dcbb772 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php @@ -9,6 +9,7 @@ use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\Entity\PropertyId; +use Wikibase\Lib\Store\NullEntityPrefetcher; use Wikibase\Dumpers\RdfDumpGenerator; use Wikibase\EntityRevision; use Wikibase\Test\RdfBuilderTest; @@ -91,7 +92,8 @@ $this->getSiteList(), $entityLookup, $entityRevisionLookup, - $propertyLookup + $propertyLookup, + new NullEntityPrefetcher() ); } diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php index 206ca1a..c42daa4 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php @@ -158,11 +158,13 @@ $this->assertEquals( $claimCount, $claims->count(), 'Claim count should not change after doing a setclaimvalue request' ); - $this->assertTrue( $claims->hasClaimWithGuid( $claimGuid ) ); + $obtainedClaim = $claims->getClaimWithGuid( $claimGuid ); + + $this->assertNotNull( $obtainedClaim ); $dataValue = DataValueFactory::singleton()->newFromArray( $claim['mainsnak']['datavalue'] ); - $this->assertTrue( $claims->getClaimWithGuid( $claimGuid )->getMainSnak()->getDataValue()->equals( $dataValue ) ); + $this->assertTrue( $obtainedClaim->getMainSnak()->getDataValue()->equals( $dataValue ) ); } /** diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php index e8e0bdf..12e5e31 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php @@ -177,10 +177,9 @@ $claims = new Claims( $entity->getClaims() ); - $this->assertTrue( $claims->hasClaimWithGuid( $params['claim'] ) ); - $claim = $claims->getClaimWithGuid( $params['claim'] ); + $this->assertNotNull( $claim ); $this->assertTrue( $claim->getQualifiers()->hasSnak( $qualifier ), 'The qualifier should exist in the qualifier list after making the request' diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/specials/SpecialModifyTermTestCase.php b/extensions/Wikibase/repo/tests/phpunit/includes/specials/SpecialModifyTermTestCase.php index a09e589..068015f 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/specials/SpecialModifyTermTestCase.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/specials/SpecialModifyTermTestCase.php @@ -2,6 +2,7 @@ namespace Wikibase\Test; +use FauxRequest; use Wikibase\DataModel\Entity\Item; use Wikibase\EntityContent; use Wikibase\Repo\WikibaseRepo; @@ -39,7 +40,7 @@ public function testExecute() { $id = $this->createNewItem(); - $this->setMwGlobals( 'wgGroupPermissions', array( '*' => array( 'edit' => true ) ) ); + $this->setMwGlobals( 'wgGroupPermissions', array( '*' => array( 'edit' => true, 'item-term' => true ) ) ); $page = $this->newSpecialPage(); @@ -114,4 +115,24 @@ } } + public function testValuePreservesWhenNothingEntered() { + $id = $this->createNewItem(); + + $this->setMwGlobals( 'wgGroupPermissions', array( '*' => array( 'edit' => true, 'item-term' => true ) ) ); + + $request = new FauxRequest( array( 'id' => $id, 'language' => 'de', 'value' => '' ), true ); + + list( $output, ) = $this->executeSpecialPage( '', $request ); + + $this->assertTag( array( + 'tag' => 'input', + 'attributes' => array( + 'id' => 'wb-modifyterm-value', + 'class' => 'wb-input', + 'name' => 'value', + 'value' => 'foo', + ) + ), $output, 'Value still preserves when no value was entered in the big form' ); + } + } diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/ItemsPerSiteBuilderTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/ItemsPerSiteBuilderTest.php index f20736c..9fe9600 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/ItemsPerSiteBuilderTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/ItemsPerSiteBuilderTest.php @@ -5,6 +5,7 @@ use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Entity\ItemId; use Wikibase\Lib\Store\EntityLookup; +use Wikibase\Lib\Store\NullEntityPrefetcher; use Wikibase\Lib\Store\SiteLinkTable; use Wikibase\Repo\Store\EntityIdPager; use Wikibase\Repo\Store\SQL\ItemsPerSiteBuilder; @@ -78,7 +79,8 @@ private function getItemsPerSiteBuilder() { return new ItemsPerSiteBuilder( $this->getSiteLinkTable(), - $this->getEntityLookup() + $this->getEntityLookup(), + new NullEntityPrefetcher() ); } diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php index d1ecaf0..29803cf 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php @@ -197,10 +197,11 @@ $termIndex->saveTermsOfEntity( $item2 ); + // The number of labels counts too $item3 = new Item( new ItemId( 'Q108' ) ); $item3->setLabel( $languageCode, $termText ); - $item3->getSiteLinkList()->addNewSiteLink( 'hrwiki', 'C' ); - $item3->getSiteLinkList()->addNewSiteLink( 'uzwiki', 'C' ); + $item3->setLabel( 'qxy', $termText ); + $item3->setLabel( 'qxz', $termText ); $termIndex->saveTermsOfEntity( $item3 ); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 4e92366..398e196 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -700,6 +700,7 @@ 'Wikibase\\Lib\\Store\\LabelDescriptionLookup' => $baseDir . '/extensions/Wikibase/lib/includes/store/LabelDescriptionLookup.php', 'Wikibase\\Lib\\Store\\LanguageFallbackLabelDescriptionLookup' => $baseDir . '/extensions/Wikibase/lib/includes/store/LanguageFallbackLabelDescriptionLookup.php', 'Wikibase\\Lib\\Store\\LanguageLabelDescriptionLookup' => $baseDir . '/extensions/Wikibase/lib/includes/store/LanguageLabelDescriptionLookup.php', + 'Wikibase\\Lib\\Store\\NullEntityPrefetcher' => $baseDir . '/extensions/Wikibase/lib/includes/store/NullEntityPrefetcher.php', 'Wikibase\\Lib\\Store\\RedirectResolvingEntityLookup' => $baseDir . '/extensions/Wikibase/lib/includes/store/RedirectResolvingEntityLookup.php', 'Wikibase\\Lib\\Store\\RevisionBasedEntityLookup' => $baseDir . '/extensions/Wikibase/lib/includes/store/RevisionBasedEntityLookup.php', 'Wikibase\\Lib\\Store\\SiteLinkCache' => $baseDir . '/extensions/Wikibase/lib/includes/store/SiteLinkCache.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 9c12721..f4071da 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1199,12 +1199,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "43ad0d2c5bc348c04e25c4fc1797f3dbb113ce70" + "reference": "74ed9964b5ce079264ef79496551a48364f41e84" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/43ad0d2c5bc348c04e25c4fc1797f3dbb113ce70", - "reference": "43ad0d2c5bc348c04e25c4fc1797f3dbb113ce70", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/74ed9964b5ce079264ef79496551a48364f41e84", + "reference": "74ed9964b5ce079264ef79496551a48364f41e84", "shasum": "" }, "require": { @@ -1231,7 +1231,7 @@ "conflict": { "mediawiki/mediawiki": "<1.23" }, - "time": "2015-04-14 15:26:12", + "time": "2015-04-15 09:53:00", "type": "mediawiki-extension", "installation-source": "dist", "autoload": { -- To view, visit https://gerrit.wikimedia.org/r/204238 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Icca83444d98c19b3b9f5388aeb8faae0f5abdb0e Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikidata Gerrit-Branch: master Gerrit-Owner: WikidataBuilder <wikidata-servi...@wikimedia.de> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: JanZerebecki <jan.wikime...@zerebecki.de> Gerrit-Reviewer: Siebrand <siebr...@kitano.nl> Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits