r51204 - Code Review

From MediaWiki.org

Jump to: navigation, search
Repository:MediaWiki
Revision:r51203 | r51204 (on ViewVC) | r51205 >
Date:19:49, 30 May 2009
Author:shinjiman
Status:resolved (Comments)
Tags:
Comment:* (bug 10837) Introducing the StubUserVariant class to determine the variant variable instead of using this to overrules the user language preference.
Modified paths:

Diff [purge]

Index: trunk/phase3/includes/StubObject.php
===================================================================
--- trunk/phase3/includes/StubObject.php	(revision 51203)
+++ trunk/phase3/includes/StubObject.php	(revision 51204)
@@ -145,6 +145,45 @@
 		global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang;
 		$code = $wgRequest->getVal( 'uselang', $wgUser->getOption( 'language' ) );
 
+		# Validate $code
+		if( empty( $code ) || !preg_match( '/^[a-z-]+$/', $code ) || ( $code === 'qqq' ) ) {
+			wfDebug( "Invalid user language code\n" );
+			$code = $wgContLanguageCode;
+		}
+
+		if( $code === $wgContLanguageCode ) {
+			return $wgContLang;
+		} else {
+			$obj = Language::factory( $code );
+			return $obj;
+		}
+	}
+}
+
+/**
+ * Stub object for the user variant. It depends of the user preferences and
+ * "variant" parameter that can be passed to index.php. This object have to be
+ * in $wgVariant global.
+ */
+class StubUserVariant extends StubObject {
+
+	function __construct() {
+		parent::__construct( 'wgVariant' );
+	}
+
+	function __call( $name, $args ) {
+		return $this->_call( $name, $args );
+	}
+
+	function _newObject() {
+		global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang;
+
+		if( $wgContLang->hasVariants() ) {
+			$code = $wgRequest->getVal( 'variant', $wgUser->getOption( 'variant' ) );
+		} else {
+			$code = $wgRequest->getVal( 'variant', $wgUser->getOption( 'language' ) );
+		}
+
 		// if variant is explicitely selected, use it instead the one from wgUser
 		// see bug #7605
 		if( $wgContLang->hasVariants() && in_array($code, $wgContLang->getVariants()) ){
@@ -155,7 +194,7 @@
 
 		# Validate $code
 		if( empty( $code ) || !preg_match( '/^[a-z-]+$/', $code ) || ( $code === 'qqq' ) ) {
-			wfDebug( "Invalid user language code\n" );
+			wfDebug( "Invalid user variant code\n" );
 			$code = $wgContLanguageCode;
 		}
 
Index: trunk/phase3/includes/Setup.php
===================================================================
--- trunk/phase3/includes/Setup.php	(revision 51203)
+++ trunk/phase3/includes/Setup.php	(revision 51204)
@@ -269,6 +269,7 @@
 
 $wgUser = new StubUser;
 $wgLang = new StubUserLang;
+$wgVariant = new StubUserVariant;
 $wgOut = new StubObject( 'wgOut', 'OutputPage' );
 $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) );
 
Index: trunk/phase3/includes/Skin.php
===================================================================
--- trunk/phase3/includes/Skin.php	(revision 51203)
+++ trunk/phase3/includes/Skin.php	(revision 51204)
@@ -352,7 +352,7 @@
 	 */
 	static function makeGlobalVariablesScript( $data ) {
 		global $wgScript, $wgTitle, $wgStylePath, $wgUser;
-		global $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang, $wgLang;
+		global $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang, $wgLang, $wgVariant;
 		global $wgCanonicalNamespaceNames, $wgOut, $wgArticle;
 		global $wgBreakFrames, $wgRequest, $wgVariantArticlePath, $wgActionPaths;
 		global $wgUseAjax, $wgAjaxWatch;
@@ -394,6 +394,7 @@
 			'wgIsArticle' => $wgOut->isArticle(),
 			'wgUserName' => $wgUser->isAnon() ? NULL : $wgUser->getName(),
 			'wgUserGroups' => $wgUser->isAnon() ? NULL : $wgUser->getEffectiveGroups(),
+			'wgUserVariant' => $wgVariant->getCode(),
 			'wgUserLanguage' => $wgLang->getCode(),
 			'wgContentLanguage' => $wgContLang->getCode(),
 			'wgBreakFrames' => $wgBreakFrames,
@@ -404,6 +405,9 @@
 			'wgSeparatorTransformTable' => $compactSeparatorTransTable,
 			'wgDigitTransformTable' => $compactDigitTransTable,
 		);
+		if ( !( $wgContLang->hasVariants() ) ) {
+			unset( $vars['wgUserVariant'] );
+		}
 		
 		if( $wgUseAjax && $wgEnableMWSuggest && !$wgUser->getOption( 'disablesuggest', false ) ){
 			$vars['wgMWSuggestTemplate'] = SearchEngine::getMWSuggestTemplate();
Index: trunk/phase3/RELEASE-NOTES
===================================================================
--- trunk/phase3/RELEASE-NOTES	(revision 51203)
+++ trunk/phase3/RELEASE-NOTES	(revision 51204)
@@ -38,6 +38,8 @@
 * Subpages are now enabled in the MediaWiki namespace by default.  This is
   mainly a cosmetic change, and does not in any way affect the MessageCache,
   which was already effectively treating the namespace as if it had subpages.
+* (bug 10837) $wgVariant is a user variant selected in the user's preferences 
+  if the $wgContLang does not have variant, then the $wgLang is used instead.
 
 === New features in 1.16 ===
 
@@ -174,6 +176,8 @@
   uploading/moving is disabled for registered users as well (e.g. only sysops)
 * (bug 18943) Handle invalid titles gracefully at Special:Mostlinked
 * (bug 8873) Enable variant conversion in text on 'alt' and 'title' attributes
+* (bug 10837) Introducing the StubUserVariant class to determine the variant 
+  variable instead of using this to overrules the user language preference.
 
 == API changes in 1.16 ==
 

Follow-up revisions

RevisionCommit summaryAuthorDate
r55746Fixes for r51204: removed useless $wgVariant and StubUserVariant. In Skin::makeG...tstarling07:19, 2 September 2009

Comments

#Comment by Tim Starling (Talk | contribs)   07:48, 3 June 2009

StubObject exists only for backwards-compatibility. Do not use it in new code. Use an accessor function instead, such as Language::variantSingleton().

Note that if you actually use this for anything, you will have to include the variant code in User::getPageRenderingHash() or its caller ParserCache::getKey(). The user language is currently included, which makes sure the different variants are stored to different keys.

#Comment by Tim Starling (Talk | contribs)   06:59, 2 September 2009

Note that the code here does actually do something, contrary to what I originally thought. The effect is to make it so that the return value of Language::getPreferredVariant() does not override the language in $wgLang. Instead, that override is only done for $wgVariant, which is never referenced except for the global variable script.

#Comment by Tim Starling (Talk | contribs)   07:20, 2 September 2009

Fixed in r55746.

Status & tagging log

Views
Toolbox