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