Aude has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/180142

Change subject: Language fallback for labels of referenced items.
......................................................................

Language fallback for labels of referenced items.

Change-Id: I3973b059ec9ea03cd3cbcdd672ee1a0c8432d262
---
M lib/includes/LanguageFallbackChain.php
M lib/tests/phpunit/LanguageFallbackChainTest.php
M repo/includes/EntityParserOutputGenerator.php
M repo/includes/EntityParserOutputGeneratorFactory.php
4 files changed, 47 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/42/180142/1

diff --git a/lib/includes/LanguageFallbackChain.php 
b/lib/includes/LanguageFallbackChain.php
index 4bd2f7d..1736535 100644
--- a/lib/includes/LanguageFallbackChain.php
+++ b/lib/includes/LanguageFallbackChain.php
@@ -39,6 +39,23 @@
        }
 
        /**
+        * Return language codes to use when fetching entries from the database.
+        *
+        * @see LanguageWithConversion::getFetchLanguageCode
+        *
+        * @return string[]
+        */
+       public function getFetchLanguageCodes() {
+               $codes = array();
+
+               foreach ( $this->chain as $language ) {
+                       $codes[] = $language->getFetchLanguageCode();
+               }
+
+               return $codes;
+       }
+
+       /**
         * Try to fetch the best value in a multilingual data array.
         *
         * @param string[]|array[] $data Multilingual data with language codes 
as keys
diff --git a/lib/tests/phpunit/LanguageFallbackChainTest.php 
b/lib/tests/phpunit/LanguageFallbackChainTest.php
index e1294d5..ed845eb 100644
--- a/lib/tests/phpunit/LanguageFallbackChainTest.php
+++ b/lib/tests/phpunit/LanguageFallbackChainTest.php
@@ -3,7 +3,9 @@
 namespace Wikibase\Test;
 
 use Language;
+use Wikibase\LanguageFallbackChain;
 use Wikibase\LanguageFallbackChainFactory;
+use Wikibase\LanguageWithConversion;
 
 /**
  * @covers Wikibase\LanguageFallbackChain
@@ -198,4 +200,28 @@
                );
        }
 
+       public function provideFetchLanguageCodes() {
+               return array(
+                       'empty' => array( array() ),
+                       'de-ch' => array( array( 'de-ch', 'de', 'en' ) ),
+                       'zh' => array( array( 'zh-hans', 'zh-hant', 'zh-cn', 
'zh-tw', 'zh-hk', 'zh-sg', 'zh-mo', 'zh-my', 'en' ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideFetchLanguageCodes
+        */
+       public function testGetFetchLanguageCodes( array $languages ) {
+               $languagesWithConversion = array();
+
+               foreach ( $languages as $language ) {
+                       $languagesWithConversion[] = 
LanguageWithConversion::factory( $language );
+               }
+
+               $chain = new LanguageFallbackChain( $languagesWithConversion );
+
+               $codes = $chain->getFetchLanguageCodes();
+               $this->assertEquals( $languages, $codes );
+       }
+
 }
diff --git a/repo/includes/EntityParserOutputGenerator.php 
b/repo/includes/EntityParserOutputGenerator.php
index 856bde2..d3db80b 100644
--- a/repo/includes/EntityParserOutputGenerator.php
+++ b/repo/includes/EntityParserOutputGenerator.php
@@ -9,7 +9,6 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\Entity;
 use Wikibase\DataModel\Entity\Item;
-use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\SiteLinkList;
 use Wikibase\DataModel\StatementListProvider;
 use Wikibase\Lib\Store\EntityInfoBuilderFactory;
@@ -225,10 +224,9 @@
                $entityInfoBuilder->resolveRedirects();
                $entityInfoBuilder->removeMissing();
 
-               // @todo: apply language fallback!
                $entityInfoBuilder->collectTerms(
                        array( 'label', 'description' ),
-                       array( $this->languageCode )
+                       $this->languageFallbackChain->getFetchLanguageCodes()
                );
 
                $entityInfoBuilder->collectDataTypes();
diff --git a/repo/includes/EntityParserOutputGeneratorFactory.php 
b/repo/includes/EntityParserOutputGeneratorFactory.php
index 025d410..1a69a6b 100644
--- a/repo/includes/EntityParserOutputGeneratorFactory.php
+++ b/repo/includes/EntityParserOutputGeneratorFactory.php
@@ -132,11 +132,9 @@
         * @return LanguageFallbackChain
         */
        private function getLanguageFallbackChain( $languageCode ) {
-               // @fixme inject User
-               $context = RequestContext::getMain();
-
-               return 
$this->languageFallbackChainFactory->newFromUserAndLanguageCodeForPageView(
-                       $context->getUser(),
+               // Language fallback must depend ONLY on the target language,
+               // so we don't confuse the parser cache with user specific HTML.
+               return $this->languageFallbackChainFactory->newFromLanguageCode(
                        $languageCode
                );
        }

-- 
To view, visit https://gerrit.wikimedia.org/r/180142
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3973b059ec9ea03cd3cbcdd672ee1a0c8432d262
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: wmf/1.25wmf12c
Gerrit-Owner: Aude <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to