From 9b72969b072b08cedb9d298acecad12a6ff22e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Wed, 16 Jan 2013 09:55:48 +0000 Subject: [PATCH] (bug 44010) Try to avoid messing wrong request contexts Also takes use of $request parameter if given, but does not depend on Idc11b547 Change-Id: I870281f26cbc87c43d9b2a763f78c5756cb2327f --- UniversalLanguageSelector.hooks.php | 37 +++++++++++++++++++---------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index 1e2a2548..7f68ce20 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -19,13 +19,12 @@ */ class UniversalLanguageSelectorHooks { - public static function isToolbarEnabled() { + public static function isToolbarEnabled( $user ) { global $wgULSEnable, $wgULSEnableAnon; if ( !$wgULSEnable ) { return false; } if ( !$wgULSEnableAnon ) { - $user = RequestContext::getMain()->getUser(); if ( $user->isAnon() ) { return false; } @@ -40,7 +39,7 @@ class UniversalLanguageSelectorHooks { * @return bool */ public static function addModules( $out, $skin ) { - if ( !self::isToolbarEnabled() ) { + if ( !self::isToolbarEnabled( $out->getUser() ) ) { return true; } @@ -72,8 +71,8 @@ class UniversalLanguageSelectorHooks { * Hooks: SkinTemplateNavigation, SkinTemplateTabs */ static function addTrigger( array &$personal_urls, &$title ) { - global $wgLang; - if ( !self::isToolbarEnabled() ) { + global $wgLang, $wgUser; + if ( !self::isToolbarEnabled( $wgUser ) ) { return true; } @@ -134,14 +133,26 @@ class UniversalLanguageSelectorHooks { * @param $code String * @return bool */ - public static function getLanguage( $user, &$code ) { - global $wgRequest, $wgULSLanguageDetection; - if ( !self::isToolbarEnabled() ) { + public static function getLanguage( $user, &$code, $request = null ) { + global $wgUser, $wgRequest, $wgULSLanguageDetection; + if ( !self::isToolbarEnabled( $user ) ) { return true; } - $languageToSave = $wgRequest->getVal( 'setlang' ); - if ( $wgRequest->getVal( 'uselang' ) && !$languageToSave ) { + /* Before $request is passed to this, check if the given user + * name matches the current user name to detect if we are not + * running in the primary request context. See bug 44010 */ + if ( $request === null ) { + if ( $wgUser->getName() !== $user->getName() ) { + return true; + } + + // Should be safe to use the global request now + $request = $wgRequest; + } + + $languageToSave = $request->getVal( 'setlang' ); + if ( $request->getVal( 'uselang' ) && !$languageToSave ) { // uselang can be used for temporary override of language preference // when setlang is not provided return true; @@ -150,7 +161,7 @@ class UniversalLanguageSelectorHooks { $languageToUse = null; if ( self::isSupportedLanguage( $languageToSave ) ) { if ( $user->isAnon() ) { - $wgRequest->response()->setcookie( 'language', $languageToSave ); + $request->response()->setcookie( 'language', $languageToSave ); } else { $user->setOption( 'language', $languageToSave ); $user->saveSettings(); @@ -160,7 +171,7 @@ class UniversalLanguageSelectorHooks { // Load from cookie unless overriden if ( $languageToUse === null && $user->isAnon() ) { - $languageToUse = $wgRequest->getCookie( 'language' ); + $languageToUse = $request->getCookie( 'language' ); } // Check whether we got valid language from store or @@ -168,7 +179,7 @@ class UniversalLanguageSelectorHooks { if ( self::isSupportedLanguage( $languageToUse ) ) { $code = $languageToUse; } elseif ( $user->isAnon() && $wgULSLanguageDetection ) { - $preferred = $wgRequest->getAcceptLang(); + $preferred = $request->getAcceptLang(); $default = self::getDefaultLanguage( $preferred ); if ( $default !== '' ) { $code = $default;