Tobias Gritschacher has uploaded a new change for review.
https://gerrit.wikimedia.org/r/169998
Change subject: New Wikidata Build - 2014/10/30
......................................................................
New Wikidata Build - 2014/10/30
Change-Id: Ie70f4a0ec37418a041cd814bcbe233491ac727dd
---
M WikibaseClient.settings.php
M WikibaseRepo.settings.php
M composer.lock
M extensions/Wikibase/client/WikibaseClient.hooks.php
M
extensions/Wikibase/client/resources/jquery.wikibase/jquery.wikibase.linkitem.js
A extensions/Wikibase/lib/includes/store/EntityTermLookup.php
A extensions/Wikibase/lib/includes/store/LabelLookup.php
A extensions/Wikibase/lib/includes/store/LanguageFallbackLabelLookup.php
A extensions/Wikibase/lib/includes/store/LanguageLabelLookup.php
M extensions/Wikibase/lib/includes/store/TermIndex.php
A extensions/Wikibase/lib/includes/store/TermLookup.php
M
extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js
M
extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js
M extensions/Wikibase/lib/tests/phpunit/NoBadDependencyUsageTest.php
A extensions/Wikibase/lib/tests/phpunit/store/EntityTermLookupTest.php
A
extensions/Wikibase/lib/tests/phpunit/store/LanguageFallbackLabelLookupTest.php
A extensions/Wikibase/lib/tests/phpunit/store/LanguageLabelLookupTest.php
M extensions/Wikibase/lib/tests/phpunit/store/MockTermIndex.php
M
extensions/Wikibase/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entityview.tests.js
M extensions/Wikibase/repo/Wikibase.i18n.alias.php
M extensions/Wikibase/repo/i18n/zh-hant.json
M extensions/Wikibase/repo/includes/View/FingerprintView.php
M vendor/autoload.php
M vendor/composer/autoload_classmap.php
M vendor/composer/autoload_real.php
M vendor/composer/installed.json
26 files changed, 690 insertions(+), 61 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata
refs/changes/98/169998/1
diff --git a/WikibaseClient.settings.php b/WikibaseClient.settings.php
index 7dcc8a1..cdcfe01 100644
--- a/WikibaseClient.settings.php
+++ b/WikibaseClient.settings.php
@@ -1,2 +1,2 @@
<?php
-$wgWBClientSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1414575514";
\ No newline at end of file
+$wgWBClientSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1414660416";
\ No newline at end of file
diff --git a/WikibaseRepo.settings.php b/WikibaseRepo.settings.php
index 89f4c63..6cefc0e 100644
--- a/WikibaseRepo.settings.php
+++ b/WikibaseRepo.settings.php
@@ -1,2 +1,2 @@
<?php
-$wgWBRepoSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1414575514";
\ No newline at end of file
+$wgWBRepoSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1414660416";
\ No newline at end of file
diff --git a/composer.lock b/composer.lock
index 815e914..3c6a90b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1203,12 +1203,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "0cbf92eb74ccde368ebcc53b9a5828ac2e336b7d"
+ "reference": "3e5ecbf1d8eef4fc4f8f2ff70fd211e08d855eb4"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/0cbf92eb74ccde368ebcc53b9a5828ac2e336b7d",
- "reference": "0cbf92eb74ccde368ebcc53b9a5828ac2e336b7d",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3e5ecbf1d8eef4fc4f8f2ff70fd211e08d855eb4",
+ "reference": "3e5ecbf1d8eef4fc4f8f2ff70fd211e08d855eb4",
"shasum": ""
},
"require": {
@@ -1274,7 +1274,7 @@
"wikibaserepo",
"wikidata"
],
- "time": "2014-10-28 22:27:04"
+ "time": "2014-10-29 22:42:41"
},
{
"name": "wikibase/wikimedia-badges",
diff --git a/extensions/Wikibase/client/WikibaseClient.hooks.php
b/extensions/Wikibase/client/WikibaseClient.hooks.php
index 4deaaf2..3879270 100644
--- a/extensions/Wikibase/client/WikibaseClient.hooks.php
+++ b/extensions/Wikibase/client/WikibaseClient.hooks.php
@@ -35,6 +35,7 @@
use Wikibase\Client\RecentChanges\RecentChangesFilterOptions;
use Wikibase\Client\RepoItemLinkGenerator;
use Wikibase\Client\WikibaseClient;
+use Wikibase\DataModel\SiteLink;
/**
* File defining the hook handlers for the Wikibase Client extension.
@@ -338,22 +339,43 @@
* @return bool
*/
public static function onBaseTemplateToolbox( QuickTemplate &$sk,
&$toolbox ) {
+ $wikibaseClient = WikibaseClient::getDefaultInstance();
+ $title = $sk->getSkin()->getTitle();
$prefixedId = $sk->getSkin()->getOutput()->getProperty(
'wikibase_item' );
+ // Try to load the item ID from Database, but only do so on
non-article views,
+ // (where the article's OutputPage isn't available to us).
+ $doExpensiveLookup =
+ $title &&
+ Action::getActionName( $sk->getSkin()->getContext() )
!== 'view' &&
+ self::isWikibaseEnabled( $title->getNamespace() );
+
+ $entityId = null;
if ( $prefixedId !== null ) {
- $entityIdParser =
WikibaseClient::getDefaultInstance()->getEntityIdParser();
+ $entityIdParser = $wikibaseClient->getEntityIdParser();
$entityId = $entityIdParser->parse( $prefixedId );
-
- $repoLinker =
WikibaseClient::getDefaultInstance()->newRepoLinker();
- $itemLink = $repoLinker->getEntityUrl( $entityId );
-
- $toolbox['wikibase'] = array(
- 'text' => $sk->getMsg( 'wikibase-dataitem'
)->text(),
- 'href' => $itemLink,
- 'id' => 't-wikibase'
+ } else if ( $doExpensiveLookup ) {
+ $entityId =
$wikibaseClient->getStore()->getSiteLinkTable()->getEntityIdForSiteLink(
+ new SiteLink(
+
$wikibaseClient->getSite()->getGlobalId(),
+ $title->getFullText()
+ )
);
}
+ if ( !$entityId ) {
+ return true;
+ }
+
+ $repoLinker = $wikibaseClient->newRepoLinker();
+ $itemLink = $repoLinker->getEntityUrl( $entityId );
+
+ $toolbox['wikibase'] = array(
+ 'text' => $sk->getMsg( 'wikibase-dataitem' )->text(),
+ 'href' => $itemLink,
+ 'id' => 't-wikibase'
+ );
+
return true;
}
diff --git
a/extensions/Wikibase/client/resources/jquery.wikibase/jquery.wikibase.linkitem.js
b/extensions/Wikibase/client/resources/jquery.wikibase/jquery.wikibase.linkitem.js
index 008d35b..bb9c37e 100644
---
a/extensions/Wikibase/client/resources/jquery.wikibase/jquery.wikibase.linkitem.js
+++
b/extensions/Wikibase/client/resources/jquery.wikibase/jquery.wikibase.linkitem.js
@@ -347,7 +347,7 @@
this.targetArticle = $( '#wbclient-linkItem-page' ).val();
this._pageConnector = new wb.PageConnector(
- new wb.RepoApi( this._mwApiForRepo ),
+ new wb.RepoApi( this.options.mwApiForRepo ),
this.options.globalSiteId,
this.options.pageTitle,
this.targetSite,
diff --git a/extensions/Wikibase/lib/includes/store/EntityTermLookup.php
b/extensions/Wikibase/lib/includes/store/EntityTermLookup.php
new file mode 100644
index 0000000..a8b282b
--- /dev/null
+++ b/extensions/Wikibase/lib/includes/store/EntityTermLookup.php
@@ -0,0 +1,116 @@
+<?php
+
+namespace Wikibase\Lib\Store;
+
+use OutOfBoundsException;
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\TermIndex;
+
+/**
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+class EntityTermLookup implements TermLookup {
+
+ /**
+ * @var TermIndex
+ */
+ private $termIndex;
+
+ /**
+ * @param TermIndex $termIndex
+ */
+ public function __construct( TermIndex $termIndex ) {
+ $this->termIndex = $termIndex;
+ }
+
+ /**
+ * @param EntityId $entityId
+ * @param string $languageCode
+ *
+ * @throws OutOfBoundsException
+ * @return string
+ */
+ public function getLabel( EntityId $entityId, $languageCode ) {
+ $labels = $this->getLabels( $entityId );
+ return $this->filterByLanguage( $labels, $languageCode );
+ }
+
+ /**
+ * @param EntityId $entityId
+ *
+ * @return string[]
+ */
+ public function getLabels( EntityId $entityId ) {
+ return $this->getTermsOfType( $entityId, 'label' );
+ }
+
+ /**
+ * @param EntityId $entityId
+ * @param string $languageCode
+ *
+ * @throws OutOfBoundsException
+ * @return string
+ */
+ public function getDescription( EntityId $entityId, $languageCode ) {
+ $descriptions = $this->getTermsOfType( $entityId, 'description'
);
+ return $this->filterByLanguage( $descriptions, $languageCode );
+ }
+
+ /**
+ * @param EntityId $entityId
+ *
+ * @return string[]
+ */
+ public function getDescriptions( EntityId $entityId ) {
+ return $this->getTermsOfType( $entityId, 'description' );
+ }
+
+ /**
+ * @param EntityId $entityId
+ * @param string $termType
+ *
+ * @return string[]
+ */
+ private function getTermsOfType( EntityId $entityId, $termType ) {
+ $wikibaseTerms = $this->termIndex->getTermsOfEntity( $entityId
);
+ return $this->convertTermsToTermTypeArray( $wikibaseTerms,
$termType );
+ }
+
+ /**
+ * @param string[] $labels
+ * @param string $languageCode
+ *
+ * @throws OutOfBoundsException
+ * @return string
+ */
+ private function filterByLanguage( array $labels, $languageCode ) {
+ if ( array_key_exists( $languageCode, $labels ) ) {
+ return $labels[$languageCode];
+ }
+
+ throw new OutOfBoundsException( 'Label not found for ' .
$languageCode );
+ }
+
+ /**
+ * @param \Wikibase\Term[] $wikibaseTerms
+ * @param string $termType
+ *
+ * @return string[]
+ */
+ private function convertTermsToTermTypeArray( array $wikibaseTerms,
$termType ) {
+ $terms = array();
+
+ foreach( $wikibaseTerms as $wikibaseTerm ) {
+ if ( $wikibaseTerm->getType() === $termType ) {
+ $languageCode = $wikibaseTerm->getLanguage();
+ $terms[$languageCode] =
$wikibaseTerm->getText();
+ }
+ }
+
+ return $terms;
+ }
+
+}
diff --git a/extensions/Wikibase/lib/includes/store/LabelLookup.php
b/extensions/Wikibase/lib/includes/store/LabelLookup.php
new file mode 100644
index 0000000..2c9d947
--- /dev/null
+++ b/extensions/Wikibase/lib/includes/store/LabelLookup.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Wikibase\Lib\Store;
+
+use OutOfBoundsException;
+use Wikibase\DataModel\Entity\EntityId;
+
+/**
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+interface LabelLookup {
+
+ /**
+ * @param EntityId $entityId
+ *
+ * @throws OutOfBoundsException
+ * @return string
+ */
+ public function getLabel( EntityId $entityId );
+
+}
diff --git
a/extensions/Wikibase/lib/includes/store/LanguageFallbackLabelLookup.php
b/extensions/Wikibase/lib/includes/store/LanguageFallbackLabelLookup.php
new file mode 100644
index 0000000..1c93bb3
--- /dev/null
+++ b/extensions/Wikibase/lib/includes/store/LanguageFallbackLabelLookup.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Wikibase\Lib\Store;
+
+use OutOfBoundsException;
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\LanguageFallbackChain;
+
+/**
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+class LanguageFallbackLabelLookup implements LabelLookup {
+
+ /**
+ * @var TermLookup
+ */
+ private $termLookup;
+
+ /**
+ * @var LanguageFallbackChain
+ */
+ private $languageFallbackChain;
+
+ /**
+ * @param TermLookup $termLookup
+ * @param LanguageFallbackChain $languageFallbackChain
+ */
+ public function __construct(
+ TermLookup $termLookup,
+ LanguageFallbackChain $languageFallbackChain
+ ) {
+ $this->termLookup = $termLookup;
+ $this->languageFallbackChain = $languageFallbackChain;
+ }
+
+ /**
+ * @param EntityId $entityId
+ *
+ * @throws OutOfBoundsException
+ * @return string
+ */
+ public function getLabel( EntityId $entityId ) {
+ $labels = $this->termLookup->getLabels( $entityId );
+ $extractedData =
$this->languageFallbackChain->extractPreferredValue( $labels );
+
+ if ( $extractedData && isset( $extractedData['value'] ) ) {
+ return $extractedData['value'];
+ }
+
+ throw new OutOfBoundsException( 'Label not found for fallback
chain.' );
+ }
+
+}
diff --git a/extensions/Wikibase/lib/includes/store/LanguageLabelLookup.php
b/extensions/Wikibase/lib/includes/store/LanguageLabelLookup.php
new file mode 100644
index 0000000..75020f5
--- /dev/null
+++ b/extensions/Wikibase/lib/includes/store/LanguageLabelLookup.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Wikibase\Lib\Store;
+
+use OutOfBoundsException;
+use Wikibase\DataModel\Entity\EntityId;
+
+/**
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+class LanguageLabelLookup implements LabelLookup {
+
+ /**
+ * @var TermLookup
+ */
+ private $termLookup;
+
+ /**
+ * @var string
+ */
+ private $languageCode;
+
+ /**
+ * @param TermLookup $termLookup
+ * @param string $languageCode
+ */
+ public function __construct( TermLookup $termLookup, $languageCode ) {
+ $this->termLookup = $termLookup;
+ $this->languageCode = $languageCode;
+ }
+
+ /**
+ * @param EntityId $entityId
+ *
+ * @throws OutOfBoundsException
+ * @return string
+ */
+ public function getLabel( EntityId $entityId ) {
+ return $this->termLookup->getLabel( $entityId,
$this->languageCode );
+ }
+
+}
diff --git a/extensions/Wikibase/lib/includes/store/TermIndex.php
b/extensions/Wikibase/lib/includes/store/TermIndex.php
index 3ee94e9..8b36af2 100644
--- a/extensions/Wikibase/lib/includes/store/TermIndex.php
+++ b/extensions/Wikibase/lib/includes/store/TermIndex.php
@@ -57,11 +57,11 @@
/**
* Returns the terms stored for the given entity.
*
- * @param EntityId $id
+ * @param EntityId $entityId
*
* @return Term[]
*/
- public function getTermsOfEntity( EntityId $id );
+ public function getTermsOfEntity( EntityId $entityId );
/**
* Returns the terms stored for the given entities. Can be filtered by
language.
diff --git a/extensions/Wikibase/lib/includes/store/TermLookup.php
b/extensions/Wikibase/lib/includes/store/TermLookup.php
new file mode 100644
index 0000000..75bc490
--- /dev/null
+++ b/extensions/Wikibase/lib/includes/store/TermLookup.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Wikibase\Lib\Store;
+
+use Wikibase\DataModel\Entity\EntityId;
+
+/**
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+interface TermLookup {
+
+ /**
+ * Gets the label of an Entity with the specified EntityId and language
code.
+ *
+ * @param EntityId $entityId
+ * @param string $languageCode
+ *
+ * @return string
+ */
+ public function getLabel( EntityId $entityId, $languageCode );
+
+ /**
+ * Gets all labels of an Entity with the specified EntityId.
+ *
+ * @param EntityId $entityId
+ *
+ * @return string[]
+ */
+ public function getLabels( EntityId $entityId );
+
+ /**
+ * Gets the description of an Entity with the specified EntityId and
language code.
+ *
+ * @param EntityId $entityId
+ * @param string $languageCode
+ *
+ * @return string
+ */
+ public function getDescription( EntityId $entityId, $languageCode );
+
+ /**
+ * Gets all descriptions of an Entity with the specified EntityId.
+ *
+ * @param EntityId $entityId
+ *
+ * @return string[]
+ */
+ public function getDescriptions( EntityId $entityId );
+
+}
diff --git
a/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js
b/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js
index 6d0613c..7d627b2 100644
---
a/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js
+++
b/extensions/Wikibase/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js
@@ -100,7 +100,8 @@
newItemOptionsFn: function( value ) {
var index = indexOf( value,
self.value().getReferences() );
if( index === null ) {
- index =
self._referencesListview.items().length;
+ // The empty list view
item for this is already appended to the list view
+ index =
self._referencesListview.items().length - 1;
}
return {
value: value || null,
diff --git
a/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js
b/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js
index c97c9a9..ae2ec89 100644
---
a/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js
+++
b/extensions/Wikibase/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js
@@ -56,7 +56,7 @@
}
this.$link
- .on( 'click.toolbarbutton keydow.toolbarbutton', function(
event ) {
+ .on( 'click.toolbarbutton keydown.toolbarbutton', function(
event ) {
event.preventDefault();
if( self.options.disabled ) {
diff --git a/extensions/Wikibase/lib/tests/phpunit/NoBadDependencyUsageTest.php
b/extensions/Wikibase/lib/tests/phpunit/NoBadDependencyUsageTest.php
index b33e3d0..d0ec71c 100644
--- a/extensions/Wikibase/lib/tests/phpunit/NoBadDependencyUsageTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/NoBadDependencyUsageTest.php
@@ -26,31 +26,10 @@
$this->assertStringNotInLib( 'Wikibase\\Client\\', 3 );
}
- public function testNoSettingsUsageOutsideLib() {
- // Increasing this allowance is forbidden
- $this->assertStringNotInRepo( 'Settings::', 1 );
- $this->assertStringNotInClient( 'Settings::', 1 );
- }
-
private function assertStringNotInLib( $string, $maxAllowance ) {
$this->assertStringNotInDir(
$string,
__DIR__ . '/../../',
- $maxAllowance
- );
- }
- private function assertStringNotInClient( $string, $maxAllowance ) {
- $this->assertStringNotInDir(
- $string,
- __DIR__ . '/../../../client/',
- $maxAllowance
- );
- }
-
- private function assertStringNotInRepo( $string, $maxAllowance ) {
- $this->assertStringNotInDir(
- $string,
- __DIR__ . '/../../../repo/',
$maxAllowance
);
}
diff --git
a/extensions/Wikibase/lib/tests/phpunit/store/EntityTermLookupTest.php
b/extensions/Wikibase/lib/tests/phpunit/store/EntityTermLookupTest.php
new file mode 100644
index 0000000..c237da9
--- /dev/null
+++ b/extensions/Wikibase/lib/tests/phpunit/store/EntityTermLookupTest.php
@@ -0,0 +1,137 @@
+<?php
+
+namespace Wikibase\Test;
+
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\Lib\Store\EntityTermLookup;
+
+class EntityTermLookupTest extends \MediaWikiTestCase {
+
+ public function testGetLabel() {
+ $termLookup = $this->getEntityTermLookup();
+
+ $label = $termLookup->getLabel( new ItemId( 'Q116' ), 'en' );
+ $this->assertEquals( 'New York City', $label );
+ }
+
+ public function testGetLabel_notFoundThrowsException() {
+ $termLookup = $this->getEntityTermLookup();
+
+ $this->setExpectedException( 'OutOfBoundsException' );
+ $termLookup->getLabel( new ItemId( 'Q120' ), 'en' );
+ }
+
+ /**
+ * @dataProvider getLabelsProvider
+ */
+ public function testGetLabels( $expected, EntityId $entityId ) {
+ $termLookup = $this->getEntityTermLookup();
+
+ $labels = $termLookup->getLabels( $entityId );
+ $this->assertEquals( $expected, $labels );
+ }
+
+ public function getLabelsProvider() {
+ return array(
+ array(
+ array( 'en' => 'New York City', 'es' => 'Nueva
York' ),
+ new ItemId( 'Q116' )
+ ),
+ array(
+ array(),
+ new ItemId( 'Q120' )
+ )
+ );
+ }
+
+ public function testGetDescription() {
+ $termLookup = $this->getEntityTermLookup();
+
+ $description = $termLookup->getDescription( new ItemId( 'Q116'
), 'de' );
+ $expected = 'Metropole an der Ostküste der Vereinigten Staaten';
+
+ $this->assertEquals( $expected, $description );
+ }
+
+ public function testGetDescription_notFoundThrowsException() {
+ $termLookup = $this->getEntityTermLookup();
+
+ $this->setExpectedException( 'OutOfBoundsException' );
+ $termLookup->getDescription( new ItemId( 'Q90000' ), 'fr' );
+ }
+
+ /**
+ * @dataProvider getDescriptionsProvider
+ */
+ public function getDescriptions( $expected, EntityId $entityId ) {
+ $termLookup = $this->getEntityTermLookup();
+
+ $descriptions = $termLookup->getDescriptions( $entityId );
+ $this->assertEquals( $expected, $descriptions );
+ }
+
+ public function getDescriptionsProvider() {
+ return array(
+ array(
+ array(
+ 'de' => 'Metropole an der Ostküste der
Vereinigten Staaten',
+ 'en' => 'largest city in New York and
the United States of America',
+ ),
+ new ItemId( 'Q116' )
+ ),
+ array(
+ array(),
+ new ItemId( 'Q90001' )
+ )
+ );
+ }
+
+ private function getEntityTermLookup() {
+ $termIndex = $this->getTermIndex();
+ return new EntityTermLookup( $termIndex );
+ }
+
+ private function getTermIndex() {
+ $terms = array(
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'en',
+ 'termText' => 'New York City'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'es',
+ 'termText' => 'Nueva York'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'description',
+ 'termLanguage' => 'en',
+ 'termText' => 'largest city in New York and the
United States of America'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'description',
+ 'termLanguage' => 'de',
+ 'termText' => 'Metropole an der Ostküste der
Vereinigten Staaten'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 117,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'en',
+ 'termText' => 'Berlin'
+ ) ),
+ );
+
+ return new MockTermIndex( $terms );
+ }
+
+}
diff --git
a/extensions/Wikibase/lib/tests/phpunit/store/LanguageFallbackLabelLookupTest.php
b/extensions/Wikibase/lib/tests/phpunit/store/LanguageFallbackLabelLookupTest.php
new file mode 100644
index 0000000..470ffd4
--- /dev/null
+++
b/extensions/Wikibase/lib/tests/phpunit/store/LanguageFallbackLabelLookupTest.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Wikibase\Test;
+
+use Language;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\LanguageFallbackChainFactory;
+use Wikibase\Lib\Store\EntityTermLookup;
+use Wikibase\Lib\Store\LanguageFallbackLabelLookup;
+
+class LanguageFallbackLabelLookupTest extends \MediaWikiTestCase {
+
+ public function testGetLabel() {
+ $languageFallbackChainFactory = new
LanguageFallbackChainFactory();
+ $fallbackChain =
$languageFallbackChainFactory->newFromLanguage( Language::factory( 'zh' ) );
+
+ $termLookup = new EntityTermLookup( $this->getTermIndex() );
+ $labelLookup = new LanguageFallbackLabelLookup( $termLookup,
$fallbackChain );
+
+ $label = $labelLookup->getLabel( new ItemId( 'Q118' ) );
+ $this->assertEquals( '测试', $label );
+ }
+
+ public function testGetLabel_notFound() {
+ $languageFallbackChainFactory = new
LanguageFallbackChainFactory();
+ $fallbackChain =
$languageFallbackChainFactory->newFromLanguage( Language::factory( 'zh' ) );
+
+ $termLookup = new EntityTermLookup( $this->getTermIndex() );
+ $labelLookup = new LanguageFallbackLabelLookup( $termLookup,
$fallbackChain );
+
+ $this->setExpectedException( 'OutOfBoundsException' );
+ $label = $labelLookup->getLabel( new ItemId( 'Q120' ) );
+ }
+
+ private function getTermIndex() {
+ $terms = array(
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'en',
+ 'termText' => 'New York City'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'es',
+ 'termText' => 'New York City'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'description',
+ 'termLanguage' => 'en',
+ 'termText' => 'Big Apple'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 117,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'en',
+ 'termText' => 'Berlin'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 118,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'zh-cn',
+ 'termText' => '测试'
+ ) ),
+ );
+
+ return new MockTermIndex( $terms );
+ }
+
+}
diff --git
a/extensions/Wikibase/lib/tests/phpunit/store/LanguageLabelLookupTest.php
b/extensions/Wikibase/lib/tests/phpunit/store/LanguageLabelLookupTest.php
new file mode 100644
index 0000000..27aeefa
--- /dev/null
+++ b/extensions/Wikibase/lib/tests/phpunit/store/LanguageLabelLookupTest.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Wikibase\Test;
+
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\Lib\Store\EntityTermLookup;
+use Wikibase\Lib\Store\LanguageLabelLookup;
+
+class LanguageLabelLookupTest extends \MediaWikiTestCase {
+
+ public function testGetLabel() {
+ $termLookup = new EntityTermLookup( $this->getTermIndex() );
+ $labelLookup = new LanguageLabelLookup( $termLookup, 'en' );
+
+ $label = $labelLookup->getLabel( new ItemId( 'Q116' ) );
+
+ $this->assertEquals( 'New York City', $label );
+ }
+
+ public function testGetLabel_notFound() {
+ $termLookup = new EntityTermLookup( $this->getTermIndex() );
+ $labelLookup = new LanguageLabelLookup( $termLookup, 'en' );
+
+ $this->setExpectedException( 'OutOfBoundsException' );
+ $label = $labelLookup->getLabel( new ItemId( 'Q120' ) );
+ }
+
+ private function getTermIndex() {
+ $terms = array(
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'en',
+ 'termText' => 'New York City'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'es',
+ 'termText' => 'New York City'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 116,
+ 'entityType' => 'item',
+ 'termType' => 'description',
+ 'termLanguage' => 'en',
+ 'termText' => 'Big Apple'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 117,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'en',
+ 'termText' => 'Berlin'
+ ) ),
+ new \Wikibase\Term( array(
+ 'entityId' => 118,
+ 'entityType' => 'item',
+ 'termType' => 'label',
+ 'termLanguage' => 'zh-cn',
+ 'termText' => '测试'
+ ) ),
+ );
+
+ return new MockTermIndex( $terms );
+ }
+
+}
diff --git a/extensions/Wikibase/lib/tests/phpunit/store/MockTermIndex.php
b/extensions/Wikibase/lib/tests/phpunit/store/MockTermIndex.php
index 24cf50c..f92570e 100644
--- a/extensions/Wikibase/lib/tests/phpunit/store/MockTermIndex.php
+++ b/extensions/Wikibase/lib/tests/phpunit/store/MockTermIndex.php
@@ -34,7 +34,7 @@
/**
* @param Term[] $terms
*/
- public function __construct( $terms ) {
+ public function __construct( array $terms ) {
$this->terms = $terms;
}
@@ -131,10 +131,38 @@
}
/**
- * @throws Exception always
+ * @return EntityId[]
*/
- public function getEntityIdsForLabel( $label, $languageCode = null,
$entityType = null, $fuzzySearch = false ) {
- throw new Exception( 'not implemented by mock class ' );
+ public function getEntityIdsForLabel( $label, $languageCode = null,
$entityType = null,
+ $fuzzySearch = false
+ ) {
+ $entityIds = array();
+
+ foreach( $this->terms as $term ) {
+ if ( $languageCode !== null && $term->getLanguage() !==
$languageCode ) {
+ continue;
+ }
+
+ if ( $entityType !== null && $term->getEntityType() !==
$entityType ) {
+ continue;
+ }
+
+ if ( $term->getType() !== 'label' ) {
+ continue;
+ }
+
+ if ( !$fuzzySearch ) {
+ if ( $term->getText() === $label ) {
+ $entityIds[] = $term->getEntityId();
+ }
+ } else {
+ if ( strpos( $term->getText(), $label ) !==
false ) {
+ $entityIds[] = $term->getEntityId();
+ }
+ }
+ }
+
+ return $entityIds;
}
/**
@@ -152,10 +180,18 @@
}
/**
- * @throws Exception always
+ * @return Term[]
*/
public function getTermsOfEntity( EntityId $id ) {
- throw new Exception( 'not implemented by mock class ' );
+ $matchingTerms = array();
+
+ foreach( $this->terms as $term ) {
+ if ( $term->getEntityId()->equals( $id ) ) {
+ $matchingTerms[] = $term;
+ }
+ }
+
+ return $matchingTerms;
}
/**
diff --git
a/extensions/Wikibase/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entityview.tests.js
b/extensions/Wikibase/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entityview.tests.js
index 82f8ad4..41b0a59 100644
---
a/extensions/Wikibase/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entityview.tests.js
+++
b/extensions/Wikibase/lib/tests/qunit/jquery.wikibase/jquery.wikibase.entityview.tests.js
@@ -17,6 +17,12 @@
entityChangersFactory: {
getAliasesChanger: function() {
return 'i am an alias changer';
+ },
+ getDescriptionsChanger: function() {
+ return 'i am a descriptions changer';
+ },
+ getLabelsChanger: function() {
+ return 'i am a labels changer';
}
},
api: 'i am an api',
diff --git a/extensions/Wikibase/repo/Wikibase.i18n.alias.php
b/extensions/Wikibase/repo/Wikibase.i18n.alias.php
index 2552559..c3cdefb 100644
--- a/extensions/Wikibase/repo/Wikibase.i18n.alias.php
+++ b/extensions/Wikibase/repo/Wikibase.i18n.alias.php
@@ -354,7 +354,7 @@
'SetSiteLink' => array( 'Đặt_liên_kết_dịch_vụ' ),
'MergeItems' => array( 'Hợp_nhất_khoản_mục', 'Gộp_khoản_mục' ),
'EntitiesWithoutLabel' => array( 'Thực_thể_không_nhãn' ),
- 'EntitiesWithoutDescription' => array( 'Thực_thể_không_miêu_tả' ),
+ 'EntitiesWithoutDescription' => array( 'Thực_thể_không_miêu_tả',
'Thực_thể_không_mô_tả' ),
'ItemsWithoutSitelinks' => array(
'Khoản_mục_không_có_liên_kết_dịch_vụ', 'Khoản_mục_không_có_liên_kết_site' ),
'MyLanguageFallbackChain' => array( 'Chuỗi_ngôn_ngữ_thay_thế_của_tôi' ),
);
diff --git a/extensions/Wikibase/repo/i18n/zh-hant.json
b/extensions/Wikibase/repo/i18n/zh-hant.json
index 8f7c683..41c0a07 100644
--- a/extensions/Wikibase/repo/i18n/zh-hant.json
+++ b/extensions/Wikibase/repo/i18n/zh-hant.json
@@ -141,7 +141,7 @@
"wikibase-newentity-submit": "建立",
"special-setlabel": "設定標籤",
"wikibase-setlabel-introfull": "您正在設定 [[$1]] 的 $2 標籤。",
- "wikibase-setlabel-intro": "此表格容許您設定一個實體的標籤。您需要提供實體的 ID (例如 Q23) ,語言代碼
(如 en) 及標籤來設定。",
+ "wikibase-setlabel-intro": "此表格容許您設定一個實體的標籤。您需要提供實體的 ID (例如 Q23) ,語言代碼
(如 zh) 及標籤來設定。",
"wikibase-setlabel-label": "標籤:",
"wikibase-setlabel-submit": "設定標籤",
"wikibase-setlabel-warning-remove": "您真的要移除 [[$1]] 的標籤嗎?",
diff --git a/extensions/Wikibase/repo/includes/View/FingerprintView.php
b/extensions/Wikibase/repo/includes/View/FingerprintView.php
index 18c7f4a..2563090 100644
--- a/extensions/Wikibase/repo/includes/View/FingerprintView.php
+++ b/extensions/Wikibase/repo/includes/View/FingerprintView.php
@@ -138,8 +138,7 @@
*/
private function getHtmlForAliases( AliasGroupList $aliasGroups,
EntityId $entityId = null, $editable ) {
$hasAliases = $aliasGroups->hasGroupForLanguage(
$this->languageCode );
- $action = $hasAliases ? 'edit' : 'add';
- $editSection = $this->getHtmlForEditSection( 'SetAliases',
$entityId, $editable, $action );
+ $editSection = $this->getHtmlForEditSection( 'SetAliases',
$entityId, $editable, 'edit' );
if ( $hasAliases ) {
$aliasesHtml = '';
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 98d589b..0d07059 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php';
-return ComposerAutoloaderInitc3eb3df05b898d3e2d9890a565e62104::getLoader();
+return ComposerAutoloaderInit83e199c0f18e266d5f80f20dd4343ecc::getLoader();
diff --git a/vendor/composer/autoload_classmap.php
b/vendor/composer/autoload_classmap.php
index 770594d..47012e3 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -600,9 +600,13 @@
'Wikibase\\Lib\\Store\\EntityRevisionLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/EntityRevisionLookup.php',
'Wikibase\\Lib\\Store\\EntityStore' => $baseDir .
'/extensions/Wikibase/lib/includes/store/EntityStore.php',
'Wikibase\\Lib\\Store\\EntityStoreWatcher' => $baseDir .
'/extensions/Wikibase/lib/includes/store/EntityStoreWatcher.php',
+ 'Wikibase\\Lib\\Store\\EntityTermLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/EntityTermLookup.php',
'Wikibase\\Lib\\Store\\EntityTitleLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/EntityTitleLookup.php',
'Wikibase\\Lib\\Store\\GenericEntityInfoBuilder' => $baseDir .
'/extensions/Wikibase/lib/includes/store/GenericEntityInfoBuilder.php',
'Wikibase\\Lib\\Store\\LabelConflictFinder' => $baseDir .
'/extensions/Wikibase/lib/includes/store/LabelConflictFinder.php',
+ 'Wikibase\\Lib\\Store\\LabelLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/LabelLookup.php',
+ 'Wikibase\\Lib\\Store\\LanguageFallbackLabelLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/LanguageFallbackLabelLookup.php',
+ 'Wikibase\\Lib\\Store\\LanguageLabelLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/LanguageLabelLookup.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',
@@ -611,6 +615,7 @@
'Wikibase\\Lib\\Store\\Sql\\SqlEntityInfoBuilder' => $baseDir .
'/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilder.php',
'Wikibase\\Lib\\Store\\Sql\\SqlEntityInfoBuilderFactory' => $baseDir .
'/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilderFactory.php',
'Wikibase\\Lib\\Store\\StorageException' => $baseDir .
'/extensions/Wikibase/lib/includes/store/StorageException.php',
+ 'Wikibase\\Lib\\Store\\TermLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/TermLookup.php',
'Wikibase\\Lib\\Store\\UnresolvedRedirectException' => $baseDir .
'/extensions/Wikibase/lib/includes/store/UnresolvedRedirectException.php',
'Wikibase\\Lib\\Store\\WikiPageEntityRevisionLookup' => $baseDir .
'/extensions/Wikibase/lib/includes/store/sql/WikiPageEntityRevisionLookup.php',
'Wikibase\\Lib\\Test\\Change\\EntityChangeFactoryTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/changes/EntityChangeFactoryTest.php',
@@ -910,6 +915,7 @@
'Wikibase\\Test\\EntityRevisionLookupTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/EntityRevisionLookupTest.php',
'Wikibase\\Test\\EntitySearchTextGeneratorTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/EntitySearchTextGeneratorTest.php',
'Wikibase\\Test\\EntitySerializerBaseTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/serializers/EntitySerializerBaseTest.php',
+ 'Wikibase\\Test\\EntityTermLookupTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/store/EntityTermLookupTest.php',
'Wikibase\\Test\\EntityViewPlaceholderExpanderTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/View/EntityViewPlaceholderExpanderTest.php',
'Wikibase\\Test\\EntityViewTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/EntityViewTest.php',
'Wikibase\\Test\\ExternalChangeFactoryTest' => $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/recentchanges/ExternalChangeFactoryTest.php',
@@ -942,6 +948,8 @@
'Wikibase\\Test\\LangLinkHandlerTest' => $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/LangLinkHandlerTest.php',
'Wikibase\\Test\\LanguageFallbackChainFactoryTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php',
'Wikibase\\Test\\LanguageFallbackChainTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainTest.php',
+ 'Wikibase\\Test\\LanguageFallbackLabelLookupTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/store/LanguageFallbackLabelLookupTest.php',
+ 'Wikibase\\Test\\LanguageLabelLookupTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/store/LanguageLabelLookupTest.php',
'Wikibase\\Test\\LanguageLinkBadgeDisplayTest' => $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/hooks/LanguageLinkBadgeDisplayTest.php',
'Wikibase\\Test\\LanguageWithConversionTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/LanguageWithConversionTest.php',
'Wikibase\\Test\\LibHooksTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/LibHooksTest.php',
diff --git a/vendor/composer/autoload_real.php
b/vendor/composer/autoload_real.php
index fd96070..d11336e 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInitc3eb3df05b898d3e2d9890a565e62104
+class ComposerAutoloaderInit83e199c0f18e266d5f80f20dd4343ecc
{
private static $loader;
@@ -19,9 +19,9 @@
return self::$loader;
}
-
spl_autoload_register(array('ComposerAutoloaderInitc3eb3df05b898d3e2d9890a565e62104',
'loadClassLoader'), true, true);
+
spl_autoload_register(array('ComposerAutoloaderInit83e199c0f18e266d5f80f20dd4343ecc',
'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-
spl_autoload_unregister(array('ComposerAutoloaderInitc3eb3df05b898d3e2d9890a565e62104',
'loadClassLoader'));
+
spl_autoload_unregister(array('ComposerAutoloaderInit83e199c0f18e266d5f80f20dd4343ecc',
'loadClassLoader'));
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@
$includeFiles = require __DIR__ . '/autoload_files.php';
foreach ($includeFiles as $file) {
- composerRequirec3eb3df05b898d3e2d9890a565e62104($file);
+ composerRequire83e199c0f18e266d5f80f20dd4343ecc($file);
}
return $loader;
}
}
-function composerRequirec3eb3df05b898d3e2d9890a565e62104($file)
+function composerRequire83e199c0f18e266d5f80f20dd4343ecc($file)
{
require $file;
}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index e22883b..4eff9ce 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1145,12 +1145,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "0cbf92eb74ccde368ebcc53b9a5828ac2e336b7d"
+ "reference": "3e5ecbf1d8eef4fc4f8f2ff70fd211e08d855eb4"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/0cbf92eb74ccde368ebcc53b9a5828ac2e336b7d",
- "reference": "0cbf92eb74ccde368ebcc53b9a5828ac2e336b7d",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3e5ecbf1d8eef4fc4f8f2ff70fd211e08d855eb4",
+ "reference": "3e5ecbf1d8eef4fc4f8f2ff70fd211e08d855eb4",
"shasum": ""
},
"require": {
@@ -1177,7 +1177,7 @@
"conflict": {
"mediawiki/mediawiki": "<1.23"
},
- "time": "2014-10-28 22:27:04",
+ "time": "2014-10-29 22:42:41",
"type": "mediawiki-extension",
"installation-source": "dist",
"autoload": {
--
To view, visit https://gerrit.wikimedia.org/r/169998
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie70f4a0ec37418a041cd814bcbe233491ac727dd
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: Tobias Gritschacher <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits