Merge "(bug 44010) Try to avoid messing wrong request contexts"

This commit is contained in:
Santhosh
2013-01-16 10:08:52 +00:00
committed by Gerrit Code Review

View File

@@ -19,13 +19,12 @@
*/ */
class UniversalLanguageSelectorHooks { class UniversalLanguageSelectorHooks {
public static function isToolbarEnabled() { public static function isToolbarEnabled( $user ) {
global $wgULSEnable, $wgULSEnableAnon; global $wgULSEnable, $wgULSEnableAnon;
if ( !$wgULSEnable ) { if ( !$wgULSEnable ) {
return false; return false;
} }
if ( !$wgULSEnableAnon ) { if ( !$wgULSEnableAnon ) {
$user = RequestContext::getMain()->getUser();
if ( $user->isAnon() ) { if ( $user->isAnon() ) {
return false; return false;
} }
@@ -40,7 +39,7 @@ class UniversalLanguageSelectorHooks {
* @return bool * @return bool
*/ */
public static function addModules( $out, $skin ) { public static function addModules( $out, $skin ) {
if ( !self::isToolbarEnabled() ) { if ( !self::isToolbarEnabled( $out->getUser() ) ) {
return true; return true;
} }
@@ -72,8 +71,8 @@ class UniversalLanguageSelectorHooks {
* Hooks: SkinTemplateNavigation, SkinTemplateTabs * Hooks: SkinTemplateNavigation, SkinTemplateTabs
*/ */
static function addTrigger( array &$personal_urls, &$title ) { static function addTrigger( array &$personal_urls, &$title ) {
global $wgLang; global $wgLang, $wgUser;
if ( !self::isToolbarEnabled() ) { if ( !self::isToolbarEnabled( $wgUser ) ) {
return true; return true;
} }
@@ -134,14 +133,26 @@ class UniversalLanguageSelectorHooks {
* @param $code String * @param $code String
* @return bool * @return bool
*/ */
public static function getLanguage( $user, &$code ) { public static function getLanguage( $user, &$code, $request = null ) {
global $wgRequest, $wgULSLanguageDetection; global $wgUser, $wgRequest, $wgULSLanguageDetection;
if ( !self::isToolbarEnabled() ) { if ( !self::isToolbarEnabled( $user ) ) {
return true; return true;
} }
$languageToSave = $wgRequest->getVal( 'setlang' ); /* Before $request is passed to this, check if the given user
if ( $wgRequest->getVal( 'uselang' ) && !$languageToSave ) { * 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 // uselang can be used for temporary override of language preference
// when setlang is not provided // when setlang is not provided
return true; return true;
@@ -150,7 +161,7 @@ class UniversalLanguageSelectorHooks {
$languageToUse = null; $languageToUse = null;
if ( self::isSupportedLanguage( $languageToSave ) ) { if ( self::isSupportedLanguage( $languageToSave ) ) {
if ( $user->isAnon() ) { if ( $user->isAnon() ) {
$wgRequest->response()->setcookie( 'language', $languageToSave ); $request->response()->setcookie( 'language', $languageToSave );
} else { } else {
$user->setOption( 'language', $languageToSave ); $user->setOption( 'language', $languageToSave );
$user->saveSettings(); $user->saveSettings();
@@ -160,7 +171,7 @@ class UniversalLanguageSelectorHooks {
// Load from cookie unless overriden // Load from cookie unless overriden
if ( $languageToUse === null && $user->isAnon() ) { if ( $languageToUse === null && $user->isAnon() ) {
$languageToUse = $wgRequest->getCookie( 'language' ); $languageToUse = $request->getCookie( 'language' );
} }
// Check whether we got valid language from store or // Check whether we got valid language from store or
@@ -168,7 +179,7 @@ class UniversalLanguageSelectorHooks {
if ( self::isSupportedLanguage( $languageToUse ) ) { if ( self::isSupportedLanguage( $languageToUse ) ) {
$code = $languageToUse; $code = $languageToUse;
} elseif ( $user->isAnon() && $wgULSLanguageDetection ) { } elseif ( $user->isAnon() && $wgULSLanguageDetection ) {
$preferred = $wgRequest->getAcceptLang(); $preferred = $request->getAcceptLang();
$default = self::getDefaultLanguage( $preferred ); $default = self::getDefaultLanguage( $preferred );
if ( $default !== '' ) { if ( $default !== '' ) {
$code = $default; $code = $default;