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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user