jenkins-bot has submitted this change and it was merged.
Change subject: New LanguageFallbackChainFactory functions
......................................................................
New LanguageFallbackChainFactory functions
newFromContextAndLanguageCode() and ->newFromUserAndLanguageCode() are added.
Change-Id: I1122e1757e0f5ac3b5982e343ede62dbec3e34bf
---
M lib/includes/LanguageFallbackChainFactory.php
M lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
2 files changed, 57 insertions(+), 9 deletions(-)
Approvals:
Denny Vrandecic: Looks good to me, approved
jenkins-bot: Verified
diff --git a/lib/includes/LanguageFallbackChainFactory.php
b/lib/includes/LanguageFallbackChainFactory.php
index 475db4e..e077ebf 100644
--- a/lib/includes/LanguageFallbackChainFactory.php
+++ b/lib/includes/LanguageFallbackChainFactory.php
@@ -1,7 +1,7 @@
<?php
namespace Wikibase;
-use Language, IContextSource, MWException;
+use User, Language, IContextSource, MWException;
/**
* Object creating LanguageFallbackChain objects in Wikibase.
@@ -180,32 +180,56 @@
}
/**
- * Construct the fallback chain based a context, currently from on data
provided by Extension:Babel.
+ * Construct the fallback chain based on a context. Currently it just
uses user and language info in it.
*
* @param IContextSource $context
*
* @return LanguageFallbackChain
*/
public function newFromContext( IContextSource $context ) {
+ return $this->newFromUserAndLanguageCode( $context->getUser(),
$context->getLanguage()->getCode() );
+ }
+
+ /**
+ * Construct the fallback chain based on a context, but ignore the
language info in it and use a specified one instead.
+ *
+ * @param IContextSource $context
+ * @param string $languageCode
+ *
+ * @return LanguageFallbackChain
+ */
+ public function newFromContextAndLanguageCode( IContextSource $context,
$languageCode ) {
+ return $this->newFromUserAndLanguageCode( $context->getUser(),
$languageCode );
+ }
+
+ /**
+ * Construct the fallback chain based on a user and a language,
currently from data provided by Extension:Babel.
+ *
+ * @param User $user
+ * @param string $languageCode
+ *
+ * @return LanguageFallbackChain
+ */
+ public function newFromUserAndLanguageCode( User $user, $languageCode )
{
global $wgBabelCategoryNames;
wfProfileIn( __METHOD__ );
- $user = $context->getUser();
-
if ( !class_exists( 'Babel' ) || $user->isAnon() ) {
- $cached = $this->newFromLanguage(
$context->getLanguage(), self::FALLBACK_ALL );
+ $cached = $this->newFromLanguageCode( $languageCode,
self::FALLBACK_ALL );
wfProfileOut( __METHOD__ );
return $cached;
}
- if ( isset(
$this->userLanguageCache[$user->getName()][$context->getLanguage()->getCode()]
) ) {
- $cached =
$this->userLanguageCache[$user->getName()][$context->getLanguage()->getCode()];
+ $languageCode = LanguageWithConversion::validateLanguageCode(
$languageCode );
+
+ if ( isset(
$this->userLanguageCache[$user->getName()][$languageCode] ) ) {
+ $cached =
$this->userLanguageCache[$user->getName()][$languageCode];
wfProfileOut( __METHOD__ );
return $cached;
}
$babel = array();
- $contextLanguage = array( $context->getLanguage()->getCode() );
+ $contextLanguage = array( $languageCode );
if ( count( $wgBabelCategoryNames ) ) {
// A little redundant but it's the only way to get
required information with current Babel API.
@@ -226,7 +250,7 @@
$chain = $this->buildFromBabel( $babel );
$languageFallbackChain = new LanguageFallbackChain( $chain );
-
$this->userLanguageCache[$user->getName()][$context->getLanguage()->getCode()]
= $languageFallbackChain;
+ $this->userLanguageCache[$user->getName()][$languageCode] =
$languageFallbackChain;
wfProfileOut( __METHOD__ );
return $languageFallbackChain;
diff --git a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
index ca40695..d9ced64 100644
--- a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
+++ b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
@@ -190,6 +190,30 @@
/**
* @group WikibaseLib
+ */
+ public function testNewFromContextAndLanguageCode() {
+ $factory = new LanguageFallbackChainFactory();
+ $languageFallbackChain = $factory->newFromContext(
\RequestContext::getMain(), 'en' );
+ $this->assertTrue( $languageFallbackChain instanceof
LanguageFallbackChain );
+ }
+
+ /**
+ * @group WikibaseLib
+ * @dataProvider providerNewFromLanguage
+ */
+ public function testNewFromUserAndLanguageCode( $lang, $mode, $expected
) {
+ if ( $mode !== LanguageFallbackChainFactory::FALLBACK_ALL ) {
+ $this->assertTrue( true );
+ return;
+ }
+ $factory = new LanguageFallbackChainFactory();
+ $anon = new \User();
+ $chain = $factory->newFromUserAndLanguageCode( $anon, $lang
)->getFallbackChain();
+ $this->assertChainEquals( $expected, $chain );
+ }
+
+ /**
+ * @group WikibaseLib
* @dataProvider provideTestFromBabel
*/
public function testBuildFromBabel( $babel, $expected ) {
--
To view, visit https://gerrit.wikimedia.org/r/74653
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I1122e1757e0f5ac3b5982e343ede62dbec3e34bf
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Liangent <[email protected]>
Gerrit-Reviewer: Denny Vrandecic <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits