Liangent has uploaded a new change for review.

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


Change subject: Enable variant level fallback for {{#property: }}
......................................................................

Enable variant level fallback for {{#property: }}

Change-Id: I181b88fec971c066b9dde7145a85467faafaa02d
---
M client/includes/parserhooks/PropertyParserFunction.php
M lib/includes/SnakFormatter.php
M lib/includes/TypedValueFormatter.php
M lib/includes/formatters/EntityIdLabelFormatter.php
4 files changed, 30 insertions(+), 14 deletions(-)


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

diff --git a/client/includes/parserhooks/PropertyParserFunction.php 
b/client/includes/parserhooks/PropertyParserFunction.php
index 4d09ab9..434e7e3 100644
--- a/client/includes/parserhooks/PropertyParserFunction.php
+++ b/client/includes/parserhooks/PropertyParserFunction.php
@@ -114,7 +114,11 @@
         * @return string - wikitext format
         */
        private function formatSnakList( $snaks ) {
-               $formattedValues = $this->snaksFormatter->formatSnaks( $snaks, 
$this->language->getCode() );
+               $formattedValues = $this->snaksFormatter->formatSnaks( $snaks,
+                       Utils::getLanguageFallbackChain( $this->language,
+                               Utils::LANGUAGE_FALLBACK_SELF | 
Utils::LANGUAGE_FALLBACK_VARIANTS
+                       )
+               );
                return $this->language->commaList( $formattedValues );
        }
 
diff --git a/lib/includes/SnakFormatter.php b/lib/includes/SnakFormatter.php
index 4ebe82b..0982fa5 100644
--- a/lib/includes/SnakFormatter.php
+++ b/lib/includes/SnakFormatter.php
@@ -67,34 +67,34 @@
         * @since 0.4
         *
         * @param Snak[] $snaks
-        * @param string $languageCode
+        * @param array $languages
         *
         * @return string[]
         */
-       public function formatSnaks( array $snaks, $languageCode ) {
+       public function formatSnaks( array $snaks, $languages ) {
                $formattedValues = array();
 
                foreach ( $snaks as $snak ) {
-                       $formattedValues[] = $this->formatSnak( $snak, 
$languageCode );
+                       $formattedValues[] = $this->formatSnak( $snak, 
$languages );
                }
 
                return $formattedValues;
        }
 
-       private function formatSnak( Snak $snak, $languageCode ) {
+       private function formatSnak( Snak $snak, $languages ) {
                if ( $snak instanceof PropertyValueSnak ) {
-                       return $this->formatPropertyValueSnak( $snak, 
$languageCode );
+                       return $this->formatPropertyValueSnak( $snak, 
$languages );
                }
 
                // TODO: we might want to allow customization here (this 
happens for NoValue and SomeValue snaks)
                return '';
        }
 
-       private function formatPropertyValueSnak( PropertyValueSnak $snak, 
$languageCode ) {
+       private function formatPropertyValueSnak( PropertyValueSnak $snak, 
$languages ) {
                $dataValue = $snak->getDataValue();
                $dataTypeId = $this->getDataTypeForProperty( 
$snak->getPropertyId() );
 
-               return $this->typedValueFormatter->formatToString( $dataValue, 
$dataTypeId, $languageCode );
+               return $this->typedValueFormatter->formatToString( $dataValue, 
$dataTypeId, $languages );
        }
 
        private function getDataTypeForProperty( EntityId $propertyId ) {
diff --git a/lib/includes/TypedValueFormatter.php 
b/lib/includes/TypedValueFormatter.php
index 06ce802..cf05788 100644
--- a/lib/includes/TypedValueFormatter.php
+++ b/lib/includes/TypedValueFormatter.php
@@ -38,7 +38,7 @@
  */
 class TypedValueFormatter {
 
-       public function formatToString( DataValue $dataValue, DataType 
$dataType, $languageCode ) {
+       public function formatToString( DataValue $dataValue, DataType 
$dataType, $languages ) {
                // TODO: update this code to obtain the string formatter as 
soon as corresponding changes
                // in the DataTypes library have been made.
 
@@ -48,7 +48,7 @@
                // FIXME: before we can properly use the DataType system some 
issues to its implementation need
                // to be solved. Once this is done, this evil if block and 
function it calls should go.
                if ( $valueFormatter === false && $dataType->getId() === 
'wikibase-item' ) {
-                       $valueFormatter = $this->evilGetEntityIdFormatter( 
$languageCode );
+                       $valueFormatter = $this->evilGetEntityIdFormatter( 
$languages );
                }
 
                if ( $valueFormatter === false ) {
@@ -69,7 +69,7 @@
                return $valueFormatter->format( $dataValue );
        }
 
-       private function evilGetEntityIdFormatter( $languageCode ) {
+       private function evilGetEntityIdFormatter( $languages ) {
                $entityLookup = new CachingEntityLoader( new 
WikiPageEntityLookup( Settings::get( 'repoDatabase' ) ) );
 
                $prefixMap = array();
@@ -85,7 +85,7 @@
                $idFormatter = new EntityIdFormatter( $options );
 
                $options = new FormatterOptions();
-               $options->setOption( EntityIdLabelFormatter::OPT_LANG, 
$languageCode );
+               $options->setOption( EntityIdLabelFormatter::OPT_LANG, 
$languages );
 
                $labelFormatter = new EntityIdLabelFormatter( $options, 
$entityLookup );
                $labelFormatter->setIdFormatter( $idFormatter );
diff --git a/lib/includes/formatters/EntityIdLabelFormatter.php 
b/lib/includes/formatters/EntityIdLabelFormatter.php
index f744c64..e3c93d1 100644
--- a/lib/includes/formatters/EntityIdLabelFormatter.php
+++ b/lib/includes/formatters/EntityIdLabelFormatter.php
@@ -146,12 +146,24 @@
                        return false;
                }
 
-               $languageCode = $this->getOption( self::OPT_LANG );
+               $languages = $this->getOption( self::OPT_LANG );
+
+               // back-compat for usages where $languages is a string
+               if ( is_string( $languages ) ) {
+                       $languages = array( LanguageWrapper::factory( 
Language::factory( $languages ) ) );
+               }
 
                /**
                 * @var Entity $entity
                 */
-               return $entity->getLabel( $languageCode );
+               foreach ( $languages as $language ) {
+                       $label = $entity->getLabel( 
$language->getFetchLanguage()->getCode() );
+                       if ( $label !== false ) {
+                               return $language->translate( $label );
+                       }
+               }
+
+               return false;
        }
 
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I181b88fec971c066b9dde7145a85467faafaa02d
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