Liangent has uploaded a new change for review.

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


Change subject: EXPERIMENTAL VERSION OF 
Id62fdd16187c79549328711ded5265802bc9453a
......................................................................

EXPERIMENTAL VERSION OF Id62fdd16187c79549328711ded5265802bc9453a

Change-Id: Id62fdd16187c79549328711ded5265802bc9453b
---
M repo/includes/api/GetEntities.php
1 file changed, 31 insertions(+), 1 deletion(-)


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

diff --git a/repo/includes/api/GetEntities.php 
b/repo/includes/api/GetEntities.php
index d542738..6e14d65 100644
--- a/repo/includes/api/GetEntities.php
+++ b/repo/includes/api/GetEntities.php
@@ -3,6 +3,8 @@
 namespace Wikibase\Api;
 
 use ApiBase;
+use DerivativeContext;
+use Language;
 use MWException;
 
 use Wikibase\Lib\Serializers\EntitySerializationOptions;
@@ -13,6 +15,7 @@
 use Wikibase\EntityId;
 use Wikibase\Item;
 use Wikibase\EntityContentFactory;
+use Wikibase\LanguageFallbackChain;
 
 /**
  * API module to get the data for one or more Wikibase entities.
@@ -30,6 +33,11 @@
 class GetEntities extends ApiWikibase {
 
        /**
+        * @var LanguageFallbackChainFactory
+        */
+       protected $languageFallbackChainFactory;
+
+       /**
         * @var \Wikibase\StringNormalizer
         */
        protected $stringNormalizer;
@@ -38,6 +46,7 @@
                parent::__construct( $main, $name, $prefix );
 
                $this->stringNormalizer = 
WikibaseRepo::getDefaultInstance()->getStringNormalizer();
+               $this->languageFallbackChainFactory = 
WikibaseRepo::getDefaultInstance()->getLanguageFallbackChainFactory();
        }
 
        /**
@@ -189,7 +198,24 @@
 
                                // TODO: inject id formatter
                                $options = new EntitySerializationOptions( 
WikibaseRepo::getDefaultInstance()->getIdFormatter() );
-                               $options->setLanguages( $params['languages'] );
+                               $languagefallback = $params['languagefallback'];
+                               if ( $languagefallback ) {
+                                       foreach ( $params['languages'] as 
$languageCode ) {
+                                               try {
+                                                       $contextLang = 
Language::factory( $languageCode );
+                                               } catch ( MWException $e ) {
+                                                       wfProfileOut( 
__METHOD__ );
+                                                       $this->dieUsage( 
"Invalid language: $languageCode", 'invalid-language' );
+                                               }
+                                               $context = new 
DerivativeContext( $this->getContext() );
+                                               $context->setLanguage( 
$contextLang );
+                                               $chain = 
$this->languageFallbackChainFactory->newFromContext( $context );
+                                               $languages[$languageCode] = 
$chain;
+                                       }
+                               } else {
+                                       $languages = $params['languages'];
+                               }
+                               $options->setLanguages( $languages );
                                $options->setSortDirection( $params['dir'] );
                                $options->setProps( $props );
                                $options->setIndexTags( 
$this->getResult()->getIsRawMode() );
@@ -258,6 +284,7 @@
                                ApiBase::PARAM_TYPE => 
Utils::getLanguageCodes(),
                                ApiBase::PARAM_ISMULTI => true,
                        ),
+                       'languagefallback' => false,
                ) );
        }
 
@@ -287,6 +314,9 @@
                        'languages' => array( 'By default the internationalized 
values are returned in all available languages.',
                                'This parameter allows filtering these down to 
one or more languages by providing one or more language codes.'
                        ),
+                       'languagefallback' => array( 'Apply language fallback?',
+                               'Note: the returned data might be somehow 
unusable in "raw modes" such as XML output.',
+                       ),
                ) );
        }
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id62fdd16187c79549328711ded5265802bc9453b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Liangent <liang...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to