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

Reply via email to