Hoo man has uploaded a new change for review.

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

Change subject: Make the property parser function respect 
allowDataAccessInUserLanguage
......................................................................

Make the property parser function respect allowDataAccessInUserLanguage

Like the mw.wikibase.* lua functions do.

Bug: T125358
Change-Id: Ib5bd7d7c22b7728a00a031833e0239cac2afedf1
---
M 
client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
M client/includes/WikibaseClient.php
M 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
M 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
M 
client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
5 files changed, 90 insertions(+), 28 deletions(-)


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

diff --git 
a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
 
b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
index b6071a4..56a14b7 100644
--- 
a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
+++ 
b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
@@ -59,24 +59,32 @@
        private $entityLookup;
 
        /**
+        * @var bool
+        */
+       private $allowDataAccessInUserLanguage;
+
+       /**
         * @param PropertyIdResolver $propertyIdResolver
         * @param SnaksFinder $snaksFinder
         * @param LanguageFallbackChainFactory $languageFallbackChainFactory
         * @param OutputFormatSnakFormatterFactory $snakFormatterFactory
         * @param EntityLookup $entityLookup
+        * @param bool $allowDataAccessInUserLanguage
         */
        public function __construct(
                PropertyIdResolver $propertyIdResolver,
                SnaksFinder $snaksFinder,
                LanguageFallbackChainFactory $languageFallbackChainFactory,
                OutputFormatSnakFormatterFactory $snakFormatterFactory,
-               EntityLookup $entityLookup
+               EntityLookup $entityLookup,
+               $allowDataAccessInUserLanguage
        ) {
                $this->propertyIdResolver = $propertyIdResolver;
                $this->snaksFinder = $snaksFinder;
                $this->languageFallbackChainFactory = 
$languageFallbackChainFactory;
                $this->snakFormatterFactory = $snakFormatterFactory;
                $this->entityLookup = $entityLookup;
+               $this->allowDataAccessInUserLanguage = 
$allowDataAccessInUserLanguage;
        }
 
        /**
@@ -87,7 +95,12 @@
        public function newRendererFromParser( Parser $parser ) {
                $usageAccumulator = new ParserOutputUsageAccumulator( 
$parser->getOutput() );
 
-               if ( $this->useVariants( $parser ) ) {
+               if ( $this->allowDataAccessInUserLanguage ) {
+                       // Use the user's language.
+                       // Note: This splits the parser cache.
+                       $targetLanguage = 
$parser->getOptions()->getUserLangObj();
+                       return $this->newLanguageAwareRenderer( 
$targetLanguage, $usageAccumulator );
+               } elseif ( $this->useVariants( $parser ) ) {
                        $variants = 
$parser->getConverterLanguage()->getVariants();
                        return $this->newVariantsAwareRenderer( $variants, 
$usageAccumulator );
                } else {
diff --git a/client/includes/WikibaseClient.php 
b/client/includes/WikibaseClient.php
index d0aa69f..04ea126 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -882,7 +882,8 @@
                        new SnaksFinder(),
                        $this->getLanguageFallbackChainFactory(),
                        $this->getSnakFormatterFactory(),
-                       $entityLookup
+                       $entityLookup,
+                       $this->getSettings()->getSetting( 
'allowDataAccessInUserLanguage' )
                );
        }
 
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
index ad76337..2064a23 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
@@ -7,6 +7,7 @@
 use Parser;
 use ParserOptions;
 use Title;
+use User;
 use Wikibase\Client\Tests\DataAccess\WikibaseDataAccessTestItemSetUpHelper;
 use Wikibase\Client\WikibaseClient;
 use Wikibase\Test\MockClientStore;
@@ -47,12 +48,24 @@
 
                $setupHelper = new WikibaseDataAccessTestItemSetUpHelper( 
$store );
                $setupHelper->setUp();
+
+               $this->oldAllowDataAccessInUserLanguage = 
$wikibaseClient->getSettings()->getSetting( 'allowDataAccessInUserLanguage' );
+               $this->setAllowDataAccessInUserLanguage( false );
        }
 
        protected function tearDown() {
                parent::tearDown();
 
+               $this->setAllowDataAccessInUserLanguage( 
$this->oldAllowDataAccessInUserLanguage );
                WikibaseClient::getDefaultInstance( 'reset' );
+       }
+
+       /**
+        * @param bool $value
+        */
+       private function setAllowDataAccessInUserLanguage( $value ) {
+               $settings = WikibaseClient::getDefaultInstance()->getSettings();
+               $settings->setSetting( 'allowDataAccessInUserLanguage', $value 
);
        }
 
        public function testPropertyParserFunction_byPropertyLabel() {
@@ -105,7 +118,7 @@
         */
        private function parseWikitextToHtml( $wikiText, $title = 
'WikibaseClientDataAccessTest' ) {
                $parserConfig = array( 'class' => 'Parser' );
-               $popt = new ParserOptions();
+               $popt = new ParserOptions( User::newFromId( 0 ), 
Language::factory( 'en' ) );
 
                $parser = new Parser( $parserConfig );
                $pout = $parser->parse( $wikiText, Title::newFromText( $title 
), $popt, Parser::OT_HTML );
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
index 4b3a4cb..3bc40e4 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
@@ -35,7 +35,7 @@
 class StatementGroupRendererFactoryTest extends \PHPUnit_Framework_TestCase {
 
        public function testNewRendererForInterfaceMessage() {
-               $parser = $this->getParser( 'zh', true );
+               $parser = $this->getParser( 'zh', 'es', true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -47,7 +47,7 @@
        }
 
        public function testNewRenderer_contentConversionDisabled() {
-               $parser = $this->getParser( 'zh', false, true );
+               $parser = $this->getParser( 'zh', 'es', false, true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -59,7 +59,7 @@
        }
 
        public function testNewRenderer_titleConversionDisabled() {
-               $parser = $this->getParser( 'zh', false, false, true );
+               $parser = $this->getParser( 'zh', 'es', false, false, true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -74,7 +74,7 @@
         * @dataProvider newRenderer_forParserFormatProvider
         */
        public function testNewRenderer_forParserFormat( $languageCode, $format 
) {
-               $parser = $this->getParser( $languageCode, false, false, false, 
$format );
+               $parser = $this->getParser( $languageCode, 'es', false, false, 
false, $format );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -94,7 +94,7 @@
        }
 
        public function testNewRenderer_forNonVariantLanguage() {
-               $parser = $this->getParser( 'en', true );
+               $parser = $this->getParser( 'en', 'es', true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -117,21 +117,31 @@
                );
        }
 
-       public function testNewRenderer_usageTracking() {
-               $parser = $this->getParser( 'en', true );
+       /**
+        * @dataProvider allowDataAccessInUserLanguageProvider
+        */
+       public function testNewRenderer_usageTracking( 
$allowDataAccessInUserLanguage ) {
+               $parser = $this->getParser( 'en', 'es', true );
 
-               $rendererFactory = $this->getStatementGroupRendererFactory();
+               $rendererFactory = $this->getStatementGroupRendererFactory( 
$allowDataAccessInUserLanguage );
                $renderer = $rendererFactory->newRendererFromParser( $parser );
 
                $usageAccumulator = new ParserOutputUsageAccumulator( 
$parser->getOutput() );
                $this->assertEquals( "Kittens!", $renderer->render( new ItemId( 
'Q1' ), 'P1' ) );
 
                $usages = $usageAccumulator->getUsages();
-               $this->assertArrayHasKey( 'Q7#L.en', $usages );
+               if ( $allowDataAccessInUserLanguage ) {
+                       $this->assertArrayHasKey( 'Q7#L.es', $usages );
+               } else {
+                       $this->assertArrayHasKey( 'Q7#L.en', $usages );
+               }
                $this->assertArrayHasKey( 'Q7#T', $usages );
        }
 
-       public function testNewRendererFromParser_languageOption() {
+       /**
+        * @dataProvider allowDataAccessInUserLanguageProvider
+        */
+       public function testNewRendererFromParser_languageOption( 
$allowDataAccessInUserLanguage ) {
                $idResolver = $this->getMockBuilder( 
'Wikibase\Client\DataAccess\PropertyIdResolver' )
                        ->disableOriginalConstructor()
                        ->getMock();
@@ -142,28 +152,42 @@
                $self = $this;
                $formatterFactory->expects( $this->once() )
                        ->method( 'getSnakFormatter' )
-                       ->will( $this->returnCallback( function( $format, 
FormatterOptions $options ) use ( $self )  {
-                               $self->assertSame( 'de', $options->getOption( 
ValueFormatter::OPT_LANG ) );
-                               return $self->getMock( 
'Wikibase\Lib\SnakFormatter' );
-                       } ) );
+                       ->will( $this->returnCallback(
+                               function( $format, FormatterOptions $options ) 
use ( $self, $allowDataAccessInUserLanguage )  {
+                                       $self->assertSame(
+                                               $allowDataAccessInUserLanguage 
? 'es' : 'de',
+                                               $options->getOption( 
ValueFormatter::OPT_LANG )
+                                       );
+                                       return $self->getMock( 
'Wikibase\Lib\SnakFormatter' );
+                               }
+                       ) );
 
                $factory = new StatementGroupRendererFactory(
                        $idResolver,
                        new SnaksFinder(),
                        new LanguageFallbackChainFactory(),
                        $formatterFactory,
-                       $this->getMock( 
'Wikibase\DataModel\Services\Lookup\EntityLookup' )
+                       $this->getMock( 
'Wikibase\DataModel\Services\Lookup\EntityLookup' ),
+                       $allowDataAccessInUserLanguage
                );
-               $factory->newRendererFromParser( $this->getParser( 'de' ) );
+               $factory->newRendererFromParser( $this->getParser( 'de', 'es' ) 
);
        }
 
-       private function getStatementGroupRendererFactory() {
+       public function allowDataAccessInUserLanguageProvider() {
+               return array(
+                       array( true ),
+                       array( false ),
+               );
+       }
+
+       private function getStatementGroupRendererFactory( 
$allowDataAccessInUserLanguage = false ) {
                return new StatementGroupRendererFactory(
                        $this->getPropertyIdResolver(),
                        $this->getSnaksFinder(),
                        $this->getLanguageFallbackChainFactory(),
                        $this->getSnakFormatterFactory(),
-                       $this->getEntityLookup()
+                       $this->getEntityLookup(),
+                       $allowDataAccessInUserLanguage
                );
        }
 
@@ -243,6 +267,7 @@
 
        private function getParser(
                $languageCode = 'en',
+               $userLanguageCode = 'es',
                $interfaceMessage = false,
                $disableContentConversion = false,
                $disableTitleConversion = false,
@@ -252,6 +277,7 @@
 
                $parserOptions = $this->getParserOptions(
                        $languageCode,
+                       $userLanguageCode,
                        $interfaceMessage,
                        $disableContentConversion,
                        $disableTitleConversion
@@ -265,12 +291,13 @@
                return $parser;
        }
 
-       private function getParserOptions( $languageCode, $interfaceMessage, 
$disableContentConversion,
-               $disableTitleConversion
+       private function getParserOptions( $languageCode, $userLanguageCode, 
$interfaceMessage,
+               $disableContentConversion, $disableTitleConversion
        ) {
                $language = Language::factory( $languageCode );
+               $userLanguage = Language::factory( $userLanguageCode );
 
-               $parserOptions = new ParserOptions( User::newFromId( 0 ), 
$languageCode );
+               $parserOptions = new ParserOptions( User::newFromId( 0 ), 
$userLanguage );
                $parserOptions->setTargetLanguage( $language );
                $parserOptions->setInterfaceMessage( $interfaceMessage );
                $parserOptions->disableContentConversion( 
$disableContentConversion );
diff --git 
a/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
 
b/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
index a5c6321..5c0826c 100644
--- 
a/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
+++ 
b/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
@@ -93,13 +93,21 @@
                $statement2 = $this->getTestStatement( $stringSnak2 );
                $statement2->setRank( Statement::RANK_NORMAL );
 
-               $itemSnak = new PropertyValueSnak(
+               $itemSnak1 = new PropertyValueSnak(
                        $itemProperty->getId(),
                        new EntityIdValue( new ItemId( 'Q885588' ) )
                );
 
-               $statement3 = $this->getTestStatement( $itemSnak );
+               $itemSnak2 = new PropertyValueSnak(
+                       $itemProperty->getId(),
+                       new EntityIdValue( new ItemId( 'Q32487' ) )
+               );
+
+               $statement3 = $this->getTestStatement( $itemSnak1 );
                $statement3->setRank( Statement::RANK_NORMAL );
+
+               $statement4 = $this->getTestStatement( $itemSnak2 );
+               $statement4->setRank( Statement::RANK_NORMAL );
 
                $siteLinks = array( $siteLink );
                $siteLinks[] = new SiteLink(
@@ -117,7 +125,7 @@
                $this->createTestItem( new ItemId( 'Q32488' ), array(), array( 
$statement1, $statement3 ), array() );
 
                // Create another test item to test arbitrary access
-               $this->createTestItem( new ItemId( 'Q199024' ), array( 'de' => 
'Arbitrary access \o/' ) );
+               $this->createTestItem( new ItemId( 'Q199024' ), array( 'de' => 
'Arbitrary access \o/' ), array( $statement4 ) );
 
                $this->createTestItem( new ItemId( 'Q885588' ), array( 
'ku-latn' => 'Pisîk' ) );
        }

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

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

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

Reply via email to