Liangent has uploaded a new change for review.

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


Change subject: EXPERIMENTAL VERSION OF 
Ic8ad24f49ba7fafe11e3dceb5d36e18d5b9ef19f
......................................................................

EXPERIMENTAL VERSION OF Ic8ad24f49ba7fafe11e3dceb5d36e18d5b9ef19f

Change-Id: Ic8ad24f49ba7fafe11e3dceb5d36e18d5b9ef190
---
M repo/includes/EntityView.php
1 file changed, 32 insertions(+), 3 deletions(-)


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

diff --git a/repo/includes/EntityView.php b/repo/includes/EntityView.php
index 628e562..69efadf 100644
--- a/repo/includes/EntityView.php
+++ b/repo/includes/EntityView.php
@@ -67,6 +67,11 @@
        protected $idFormatter;
 
        /**
+        * @var LanguageFallbackChain
+        */
+       protected $languageFallbackChain;
+
+       /**
         * Maps entity types to the corresponding entity view.
         * FIXME: remove this stuff, big OCP violation
         *
@@ -94,6 +99,8 @@
         * @param IContextSource|null $context
         */
        public function __construct( ValueFormatterFactory $valueFormatters, 
IContextSource $context = null ) {
+               global $wgUseSquid;
+
                $this->valueFormatters = $valueFormatters;
 
                if ( !$context ) {
@@ -103,6 +110,15 @@
 
                // TODO: this need to be properly injected
                $this->idFormatter = 
WikibaseRepo::getDefaultInstance()->getIdFormatter();
+
+               $factory = 
WikibaseRepo::getDefaultInstance()->getLanguageFallbackChainFactory();
+               if ( $wgUseSquid && $context->getUser()->isAnon() ) {
+                       // Anonymous users share the same Squid cache, which is 
splitted by URL.
+                       // That means we can't do anything except for what 
completely depends by URL such as &uselang=.
+                       $this->languageFallbackChain = 
$factory->newFromLanguage( $context->getLanguage() );
+               } else {
+                       $this->languageFallbackChain = 
$factory->newFromContext( $context );
+               }
        }
 
        /**
@@ -810,6 +826,9 @@
                $out->addJsConfigVars( 'wbEntityType', $entity->getType() );
                $out->addJsConfigVars( 'wbDataLangName', 
Utils::fetchLanguageName( $langCode ) );
 
+               // Some constant, but to avoid hard coding it everywhere
+               $out->addJsConfigVars( 'wbContextLanguageCode', 
LanguageFallbackChain::CONTEXT_LANGUAGE_CODE );
+
                // entity specific data
                $out->addJsConfigVars( 'wbEntityId', 
$this->getFormattedIdForEntity( $entity ) );
 
@@ -818,6 +837,9 @@
 
                // TODO: use injected id formatter
                $serializationOptions = new EntitySerializationOptions( 
WikibaseRepo::getDefaultInstance()->getIdFormatter() );
+               $serializationOptions->setLanguages( Utils::getLanguageCodes() 
+ array(
+                       LanguageFallbackChain::CONTEXT_LANGUAGE_CODE => 
$this->languageFallbackChain,
+               ) );
 
                $serializerFactory = new SerializerFactory();
                $serializer = $serializerFactory->newSerializerForObject( 
$entity, $serializationOptions );
@@ -832,7 +854,7 @@
                $refFinder = new ReferencedEntitiesFinder( $entityLoader );
 
                $usedEntityIds = $refFinder->findClaimLinks( 
$entity->getClaims() );
-               $basicEntityInfo = static::getBasicEntityInfo( $entityLoader, 
$usedEntityIds, $langCode );
+               $basicEntityInfo = static::getBasicEntityInfo( $entityLoader, 
$usedEntityIds, $langCode, $this->languageFallbackChain );
 
                $out->addJsConfigVars(
                        'wbUsedEntities',
@@ -850,9 +872,12 @@
         * @param EntityLookup $entityLoader
         * @param EntityId[] $entityIds
         * @param string $langCode For the entity labels which will be included 
in one language only.
+        * @param LanguageFallbackChain $languageFallbackChain Set it to 
include labels to display for the given language fallback chain too.
         * @return array
         */
-       protected static function getBasicEntityInfo( EntityLookup 
$entityLoader, array $entityIds, $langCode ) {
+       protected static function getBasicEntityInfo(
+               EntityLookup $entityLoader, array $entityIds, $langCode, 
LanguageFallbackChain $languageFallbackChain = null
+       ) {
                wfProfileIn( __METHOD__ );
 
                $entityContentFactory = EntityContentFactory::singleton();
@@ -864,7 +889,11 @@
                $serializationOptions = new EntitySerializationOptions( 
WikibaseRepo::getDefaultInstance()->getIdFormatter() );
                $serializationOptions->setProps( array( 'labels', 
'descriptions', 'datatype' ) );
 
-               $serializationOptions->setLanguages( array( $langCode ) );
+               $languages = array( $langCode );
+               if ( $languageFallbackChain ) {
+                       $languages = array( $langCode => $languageFallbackChain 
);
+               }
+               $serializationOptions->setLanguages( $languages );
 
                foreach( $entities as $prefixedId => $entity ) {
                        if( $entity === null ) {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic8ad24f49ba7fafe11e3dceb5d36e18d5b9ef190
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Liangent <[email protected]>

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

Reply via email to