Trying to fix language selection once more

Anon users were getting fatal errors if they did
not possess the language cookie.

Change-Id: I00f71ca6462ebcaa800ef8569efeea794ba16a7c
This commit is contained in:
Niklas Laxström
2012-08-28 13:58:44 +00:00
parent 0f2f7f8b62
commit 36e82a41ca

View File

@@ -62,6 +62,11 @@ class UniversalLanguageSelectorHooks {
return true;
}
protected static function isSupportedLanguage( $language ) {
$supported = Language::fetchLanguageNames( null, 'mwfile' );
return isset( $supported[$language] );
}
/**
* Hook to UserGetLanguageObject
* @param $user User
@@ -75,29 +80,29 @@ class UniversalLanguageSelectorHooks {
return true;
}
$setlang = $wgRequest->getVal( 'setlang' );
if ( $setlang ) {
// TODO: replace with core method once one exists
$supported = Language::fetchLanguageNames( null, 'mwfile' );
if ( !isset( $supported[$setlang] ) ) {
wfDebug( "Invalid user language code\n" );
return true;
}
$languageToUse = null;
$languageToSave = $wgRequest->getVal( 'setlang' );
if ( self::isSupportedLanguage( $languageToSave ) ) {
if ( $user->isAnon() ) {
$wgRequest->response()->setcookie( 'language', $setlang );
$wgRequest->response()->setcookie( 'language', $languageToSave );
} else {
$user->setOption( 'language', $setlang );
$user->setOption( 'language', $languageToSave );
$user->saveSettings();
}
$code = $setlang;
} else {
if ( $user->isAnon() ) {
$code = $wgRequest->getCookie( 'language' );
} else {
$code = $user->getOption( 'language' );
$languageToUse = $languageToSave;
}
// Load from cookie unless overriden
if ( $languageToUse === null && $user->isAnon() ) {
$languageToUse = $wgRequest->getCookie( 'language' );
}
// Let the normal language loading mechanism decide if
// there is no cookie or setlang override.
if ( self::isSupportedLanguage( $languageToUse ) ) {
$code = $languageToUse;
}
return true;
}