Bug 1020: Changing user interface language does not work immediately
authorNiklas Laxström <nikerabbit@users.mediawiki.org>
Fri, 19 Aug 2005 13:27:32 +0000 (13:27 +0000)
committerNiklas Laxström <nikerabbit@users.mediawiki.org>
Fri, 19 Aug 2005 13:27:32 +0000 (13:27 +0000)
RELEASE-NOTES
includes/SpecialPreferences.php

index 2a54c6e..d40c8aa 100644 (file)
@@ -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 ===
 
index 822adca..bd46290 100644 (file)
@@ -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( "<p class='error'>" . htmlspecialchars( $err ) . "</p>\n" );
+               if ( $this->mSuccess || 'success' == $status ) {
+                       $wgOut->addWikitext( '<span class="preferences-save-success">'. wfMsg( 'savedprefs' ) . "</span>\n----" );
+               } else  if ( 'error' == $status ) {
+                       $wgOut->addWikitext( "<span class='error'>" . $message  . "</span>\n----" );
+               } else if ( '' != $status ) {
+                       $wgOut->addWikitext( $message . "\n----" );
                }
                $uname = $wgUser->getName();
                $uid = $wgUser->getID();