(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
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user