From f48e86c816e2f7c94654c3c083f663df2cf21e42 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niklas=20Laxstr=C3=B6m?= Date: Fri, 19 Aug 2005 13:27:32 +0000 Subject: [PATCH] Bug 1020: Changing user interface language does not work immediately --- RELEASE-NOTES | 2 ++ includes/SpecialPreferences.php | 40 ++++++++++++++++++++++++--------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 2a54c6e57f..d40c8aab07 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -34,6 +34,8 @@ Misc work going on..... * Finnish date format was hardcoded, now implemented properly * (bug 3190) Added some date format choices for language sr * (bug 1334) LanguageGa.php update +* (bug 1020) Changing user interface language does not work immediately + === Caveats === diff --git a/includes/SpecialPreferences.php b/includes/SpecialPreferences.php index 822adcab22..bd462909c3 100644 --- a/includes/SpecialPreferences.php +++ b/includes/SpecialPreferences.php @@ -66,6 +66,7 @@ class PreferencesForm { $this->mAction = $request->getVal( 'action' ); $this->mReset = $request->getCheck( 'wpReset' ); $this->mPosted = $request->wasPosted(); + $this->mSuccess = $request->getCheck( 'success' ); $this->mSaveprefs = $request->getCheck( 'wpSaveprefs' ) && $this->mPosted && @@ -113,7 +114,7 @@ class PreferencesForm { } if ( $this->mReset ) { $this->resetPrefs(); - $this->mainPrefsForm( wfMsg( 'prefsreset' ) ); + $this->mainPrefsForm( 'reset', wfMsg( 'prefsreset' ) ); } else if ( $this->mSaveprefs ) { $this->savePreferences(); } else { @@ -197,26 +198,33 @@ class PreferencesForm { if ( '' != $this->mNewpass ) { if ( $this->mNewpass != $this->mRetypePass ) { - $this->mainPrefsForm( wfMsg( 'badretype' ) ); + $this->mainPrefsForm( 'error', wfMsg( 'badretype' ) ); return; } if ( strlen( $this->mNewpass ) < $wgMinimalPasswordLength ) { - $this->mainPrefsForm( wfMsg( 'passwordtooshort', $wgMinimalPasswordLength ) ); + $this->mainPrefsForm( 'error', wfMsg( 'passwordtooshort', $wgMinimalPasswordLength ) ); return; } if (!$wgUser->checkPassword( $this->mOldpass )) { - $this->mainPrefsForm( wfMsg( 'wrongpassword' ) ); + $this->mainPrefsForm( 'error', wfMsg( 'wrongpassword' ) ); return; } if (!$wgAuth->setPassword( $wgUser, $this->mNewpass )) { - $this->mainPrefsForm( wfMsg( 'externaldberror' ) ); + $this->mainPrefsForm( 'error', wfMsg( 'externaldberror' ) ); return; } $wgUser->setPassword( $this->mNewpass ); } $wgUser->setRealName( $this->mRealName ); + + if( $wgUser->getOption( 'language' ) !== $this->mUserLanguage ) { + $needRedirect = true; + } else { + $needRedirect = false; + } + $wgUser->setOption( 'language', $this->mUserLanguage ); $wgUser->setOption( 'variant', $this->mUserVariant ); $wgUser->setOption( 'nickname', $this->mNick ); @@ -259,7 +267,7 @@ class PreferencesForm { $wgUser->setCookies(); $wgUser->saveSettings(); - $error = wfMsg( 'savedprefs' ); + $error = false; if( $wgEnableEmail ) { $newadr = $this->mUserEmail; $oldadr = $wgUser->getEmail(); @@ -274,7 +282,7 @@ class PreferencesForm { # User can come back through the confirmation URL to re-enable email. $result = $wgUser->sendConfirmationMail(); if( WikiError::isError( $result ) ) { - $error = wfMsg( 'mailerror', $result->getMessage() ); + $error = wfMsg( 'mailerror', htmlspecialchars( $result->getMessage() ) ); } else { $error = wfMsg( 'eauthentsent', $wgUser->getName() ); } @@ -289,9 +297,15 @@ class PreferencesForm { } } + if( $needRedirect && $error === false ) { + $title =& Title::makeTitle( NS_SPECIAL, "Preferences" ); + $wgOut->redirect($title->getFullURL('success')); + return; + } + $wgOut->setParserOptions( ParserOptions::newFromUser( $wgUser ) ); $po = ParserOptions::newFromUser( $wgUser ); - $this->mainPrefsForm( $error ); + $this->mainPrefsForm( $error === false ? 'success' : 'error', $error); } /** @@ -404,7 +418,7 @@ class PreferencesForm { /** * @access private */ - function mainPrefsForm( $err ) { + function mainPrefsForm( $status , $message = '' ) { global $wgUser, $wgOut, $wgLang, $wgContLang, $wgValidSkinNames; global $wgAllowRealName, $wgImageLimits, $wgThumbLimits; global $wgDisableLangConversion; @@ -417,8 +431,12 @@ class PreferencesForm { $wgOut->setArticleRelated( false ); $wgOut->setRobotpolicy( 'noindex,nofollow' ); - if ( '' != $err ) { - $wgOut->addHTML( "

" . htmlspecialchars( $err ) . "

\n" ); + if ( $this->mSuccess || 'success' == $status ) { + $wgOut->addWikitext( ''. wfMsg( 'savedprefs' ) . "\n----" ); + } else if ( 'error' == $status ) { + $wgOut->addWikitext( "" . $message . "\n----" ); + } else if ( '' != $status ) { + $wgOut->addWikitext( $message . "\n----" ); } $uname = $wgUser->getName(); $uid = $wgUser->getID(); -- 2.20.1