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