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; return true;
} }
protected static function isSupportedLanguage( $language ) {
$supported = Language::fetchLanguageNames( null, 'mwfile' );
return isset( $supported[$language] );
}
/** /**
* Hook to UserGetLanguageObject * Hook to UserGetLanguageObject
* @param $user User * @param $user User
@@ -75,29 +80,29 @@ class UniversalLanguageSelectorHooks {
return true; return true;
} }
$setlang = $wgRequest->getVal( 'setlang' ); $languageToUse = null;
if ( $setlang ) { $languageToSave = $wgRequest->getVal( 'setlang' );
// TODO: replace with core method once one exists if ( self::isSupportedLanguage( $languageToSave ) ) {
$supported = Language::fetchLanguageNames( null, 'mwfile' );
if ( !isset( $supported[$setlang] ) ) {
wfDebug( "Invalid user language code\n" );
return true;
}
if ( $user->isAnon() ) { if ( $user->isAnon() ) {
$wgRequest->response()->setcookie( 'language', $setlang ); $wgRequest->response()->setcookie( 'language', $languageToSave );
} else { } else {
$user->setOption( 'language', $setlang ); $user->setOption( 'language', $languageToSave );
$user->saveSettings(); $user->saveSettings();
} }
$code = $setlang; $languageToUse = $languageToSave;
} else {
if ( $user->isAnon() ) {
$code = $wgRequest->getCookie( 'language' );
} else {
$code = $user->getOption( 'language' );
}
} }
// 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; return true;
} }