From 36e82a41caa4cc91675fde8e3f936edcb1610b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Tue, 28 Aug 2012 13:58:44 +0000 Subject: [PATCH] Trying to fix language selection once more Anon users were getting fatal errors if they did not possess the language cookie. Change-Id: I00f71ca6462ebcaa800ef8569efeea794ba16a7c --- UniversalLanguageSelector.hooks.php | 41 ++++++++++++++++------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index 00737cd7..7d95098f 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -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; }