Hoo man has uploaded a new change for review.
https://gerrit.wikimedia.org/r/189324
Change subject: Allow getting the user's language and splitting the ParserCache
from Lua
......................................................................
Allow getting the user's language and splitting the ParserCache from Lua
Needed for convenience functions that return things in a user's language
in multilingual wikis (will make use in follow-up patches).
Equivalent to calling mw.getCurrentFrame():preprocess("{{int:lang}}") in
Lua.
Please note that this function can *only* be called within our mw.wikibase
module, user code can't directly use it.
Change-Id: I805c88253b2b0388015e9521308a84e86f1bced8
---
M client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php
M client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
M client/includes/scribunto/WikibaseLuaBindings.php
M client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php
M client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php
5 files changed, 107 insertions(+), 16 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/24/189324/1
diff --git a/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php
b/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php
index ae65d6d..3312eca 100644
--- a/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php
+++ b/client/includes/scribunto/Scribunto_LuaWikibaseEntityLibrary.php
@@ -72,7 +72,7 @@
}
/**
- * Wrapper for getGlobalSiteId in
Scribunto_LuaWikibaseLibraryImplementation
+ * Wrapper for getGlobalSiteId in WikibaseLuaEntityBindings
*
* @since 0.5
*
diff --git a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
index 42329d1..38104f8 100644
--- a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
+++ b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
@@ -95,6 +95,7 @@
$wikibaseClient->getSettings(),
$labelLookup,
$this->getUsageAccumulator(),
+ $this->getParserOptions(),
$wikibaseClient->getSettings()->getSetting(
'siteGlobalID' )
);
}
@@ -141,6 +142,7 @@
'getSetting' => array( $this, 'getSetting' ),
'getEntityId' => array( $this, 'getEntityId' ),
'getSiteLinkPageName' => array( $this,
'getSiteLinkPageName' ),
+ 'splitParserCacheByUserLang' => array( $this,
'splitParserCacheByUserLang' ),
);
return $this->getEngine()->registerInterface(
@@ -149,7 +151,7 @@
}
/**
- * Wrapper for getEntity in Scribunto_LuaWikibaseLibraryImplementation
+ * Wrapper for getEntity in WikibaseLuaBindings
*
* @since 0.5
*
@@ -175,7 +177,7 @@
}
/**
- * Wrapper for getEntityId in Scribunto_LuaWikibaseLibraryImplementation
+ * Wrapper for getEntityId in WikibaseLuaBindings
*
* @since 0.5
*
@@ -189,7 +191,7 @@
}
/**
- * Wrapper for getSetting in Scribunto_LuaWikibaseLibraryImplementation
+ * Wrapper for getSetting in WikibaseLuaBindings
*
* @since 0.5
*
@@ -217,7 +219,7 @@
}
/**
- * Wrapper for getSiteLinkPageName in
Scribunto_LuaWikibaseLibraryImplementation
+ * Wrapper for getSiteLinkPageName in WikibaseLuaBindings
*
* @since 0.5
*
@@ -229,4 +231,16 @@
$this->checkType( 'getSiteLinkPageName', 1, $prefixedEntityId,
'string' );
return array( $this->getLuaBindings()->getSiteLinkPageName(
$prefixedEntityId ) );
}
+
+ /**
+ * Wrapper for getUserLang in WikibaseLuaBindings
+ * Side effect: Splits the parser cache by user language!
+ *
+ * @since 0.5
+ *
+ * @return string[]
+ */
+ public function getUserLang() {
+ return array( $this->getLuaBindings()->getUserLang() );
+ }
}
diff --git a/client/includes/scribunto/WikibaseLuaBindings.php
b/client/includes/scribunto/WikibaseLuaBindings.php
index c299976..d278a61 100644
--- a/client/includes/scribunto/WikibaseLuaBindings.php
+++ b/client/includes/scribunto/WikibaseLuaBindings.php
@@ -4,6 +4,7 @@
use InvalidArgumentException;
use OutOfBoundsException;
+use ParserOptions;
use Wikibase\Client\Usage\UsageAccumulator;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdParsingException;
@@ -48,11 +49,6 @@
private $settings;
/**
- * @var string
- */
- private $siteId;
-
- /**
* @var LabelLookup
*/
private $labelLookup;
@@ -63,12 +59,23 @@
private $usageAccumulator;
/**
+ * @var ParserOptions
+ */
+ private $parserOptions;
+
+ /**
+ * @var string
+ */
+ private $siteId;
+
+ /**
* @param EntityIdParser $entityIdParser
* @param EntityLookup $entityLookup
* @param SiteLinkLookup $siteLinkTable
* @param SettingsArray $settings
* @param LabelLookup $labelLookup
* @param UsageAccumulator $usageAccumulator
+ * @param ParserOptions $parserOptions
* @param string $siteId
*/
public function __construct(
@@ -78,6 +85,7 @@
SettingsArray $settings,
LabelLookup $labelLookup,
UsageAccumulator $usageAccumulator,
+ ParserOptions $parserOptions,
$siteId
) {
$this->entityIdParser = $entityIdParser;
@@ -85,8 +93,9 @@
$this->siteLinkTable = $siteLinkTable;
$this->settings = $settings;
$this->labelLookup = $labelLookup;
- $this->siteId = $siteId;
$this->usageAccumulator = $usageAccumulator;
+ $this->parserOptions = $parserOptions;
+ $this->siteId = $siteId;
}
/**
@@ -171,4 +180,15 @@
return $item->getSiteLinkList()->getBySiteId( $this->siteId
)->getPageName();
}
+ /**
+ * Get the user's language.
+ * Side effect: Splits the parser cache by user language!
+ *
+ * @since 0.5
+ *
+ * @return string Language code
+ */
+ public function getUserLang() {
+ return $this->parserOptions->getUserLang();
+ }
}
diff --git
a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php
b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php
index d2990d1..0e0fdc4 100644
---
a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php
+++
b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryTest.php
@@ -8,7 +8,6 @@
use Scribunto;
use Scribunto_LuaWikibaseLibrary;
use Title;
-use Wikibase\Client\WikibaseClient;
/**
* @covers Scribunto_LuaWikibaseLibrary
@@ -107,10 +106,39 @@
$this->assertEquals( array( null ), $entityId );
}
- private function newScribuntoLuaWikibaseLibrary() {
+ public function testGetUserLang() {
+ $parserOptions = new ParserOptions();
+ $parserOptions->setUserLang( Language::factory( 'ru' ) );
+
+ $luaWikibaseLibrary = $this->newScribuntoLuaWikibaseLibrary(
$parserOptions );
+
+ $self = $this; // PHP 5.3 ...
+ $cacheSplit = false;
+ $parserOptions->registerWatcher(
+ function( $optionName ) use ( $self, &$cacheSplit ) {
+ $self->assertSame( 'userlang', $optionName );
+ $cacheSplit = true;
+ }
+ );
+
+ $userLang = $luaWikibaseLibrary->getUserLang();
+ $this->assertSame( array( 'ru' ), $userLang );
+ $this->assertTrue( $cacheSplit );
+ }
+
+ /**
+ * @param ParserOptions|null $parserOptions
+ * @return Scribunto_LuaWikibaseLibrary
+ */
+ private function newScribuntoLuaWikibaseLibrary( ParserOptions
$parserOptions = null ) {
$title = Title::newFromText( 'Whatever' );
+
$parser = new Parser();
- $parser->startExternalParse( $title, new ParserOptions(),
Parser::OT_HTML );
+ $parser->startExternalParse(
+ $title,
+ $parserOptions ?: new ParserOptions(),
+ Parser::OT_HTML
+ );
$engine = Scribunto::newDefaultEngine( array(
'parser' => $parser,
diff --git
a/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php
b/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php
index 7055ab0..5833a0b 100644
--- a/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php
+++ b/client/tests/phpunit/includes/scribunto/WikibaseLuaBindingsTest.php
@@ -2,6 +2,8 @@
namespace Wikibase\Client\Tests\Scribunto;
+use Language;
+use ParserOptions;
use Wikibase\Client\Scribunto\WikibaseLuaBindings;
use Wikibase\Client\Usage\EntityUsage;
use Wikibase\Client\Usage\HashUsageAccumulator;
@@ -38,9 +40,16 @@
);
}
+ /**
+ * @param EntityLookup|null $entityLookup
+ * @param UsageAccumulator|null $usageAccumulator
+ * @param ParserOptions|null $parserOptions
+ * @return WikibaseLuaBindings
+ */
private function getWikibaseLuaBindings(
EntityLookup $entityLookup = null,
- UsageAccumulator $usageAccumulator = null
+ UsageAccumulator $usageAccumulator = null,
+ ParserOptions $parserOptions = null
) {
$siteLinkTable = $this->getMockBuilder(
'Wikibase\Lib\Store\SiteLinkTable' )
@@ -65,7 +74,8 @@
$siteLinkTable,
new SettingsArray(),
$labelLookup,
- $usageAccumulator ? $usageAccumulator : new
HashUsageAccumulator(),
+ $usageAccumulator ?: new HashUsageAccumulator(),
+ $parserOptions ?: new ParserOptions(),
"enwiki" // siteId
);
}
@@ -161,6 +171,25 @@
$this->assertFalse( $this->hasUsage( $usages->getUsages(),
$itemId, EntityUsage::ALL_USAGE ), 'all usage' );
}
+ public function testGetUserLang() {
+ $parserOptions = new ParserOptions();
+ $parserOptions->setUserLang( Language::factory( 'ru' ) );
+
+ $self = $this; // PHP 5.3 ...
+ $cacheSplit = false;
+ $parserOptions->registerWatcher(
+ function( $optionName ) use ( $self, &$cacheSplit ) {
+ $self->assertSame( 'userlang', $optionName );
+ $cacheSplit = true;
+ }
+ );
+
+ $wikibaseLuaBindings = $this->getWikibaseLuaBindings( null,
null, $parserOptions );
+ $userLang = $wikibaseLuaBindings->getUserLang();
+ $this->assertSame( 'ru', $userLang );
+ $this->assertTrue( $cacheSplit );
+ }
+
protected function getItem() {
$item = new Item( new ItemId( 'Q666' ) );
$item->setLabel( 'en', 'Beer' );
--
To view, visit https://gerrit.wikimedia.org/r/189324
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I805c88253b2b0388015e9521308a84e86f1bced8
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