diff options
Diffstat (limited to 'includes/SpecialPreferences.php')
-rw-r--r-- | includes/SpecialPreferences.php | 67 |
1 files changed, 43 insertions, 24 deletions
diff --git a/includes/SpecialPreferences.php b/includes/SpecialPreferences.php index 6e99b3f03fe6..bdf9e1e45c98 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 ); @@ -226,7 +234,7 @@ class PreferencesForm { if( $wgUseTeX ) { $wgUser->setOption( 'math', $this->mMath ); } - $wgUser->setOption( 'date', $this->validateDate( $this->mDate, 0, 10 ) ); + $wgUser->setOption( 'date', $this->validateDate( $this->mDate, 0, 20 ) ); $wgUser->setOption( 'searchlimit', $this->validateIntOrNull( $this->mSearch ) ); $wgUser->setOption( 'contextlines', $this->validateIntOrNull( $this->mSearchLines ) ); $wgUser->setOption( 'contextchars', $this->validateIntOrNull( $this->mSearchChars ) ); @@ -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); } /** @@ -378,7 +392,7 @@ class PreferencesForm { $checked = $wgUser->getOption( $tname ) == 1 ? ' checked="checked"' : ''; $trailer = $trailer ? $trailer : ''; return "<div class='toggle'><input type='checkbox' value='1' id=\"$tname\" name=\"wpOp$tname\"$checked />" . - " <span class='toggletext'><label for=\"$tname\">$ttext</label>$trailer</span></div>"; + " <span class='toggletext'><label for=\"$tname\">$ttext</label>$trailer</span></div>\n"; } function getToggles( $items ) { @@ -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(); @@ -661,7 +679,7 @@ class PreferencesForm { $imageLimitOptions = null; foreach ( $wgImageLimits as $index => $limits ) { $selected = ($index == $this->mImageSize) ? 'selected="selected"' : ''; - $imageLimitOptions .= "<option value=\"{$index}\" {$selected}>{$limits[0]}x{$limits[1]}</option>\n"; + $imageLimitOptions .= "<option value=\"{$index}\" {$selected}>{$limits[0]}×{$limits[1]}". wfMsgHtml('unit-pixel') ."</option>\n"; } $imageThumbOptions = null; @@ -669,7 +687,7 @@ class PreferencesForm { <div><label>" . wfMsg('thumbsize') . "<select name=\"wpThumbSize\">"); foreach ( $wgThumbLimits as $index => $size ) { $selected = ($index == $this->mThumbSize) ? 'selected="selected"' : ''; - $imageThumbOptions .= "<option value=\"{$index}\" {$selected}>{$size}px</option>\n"; + $imageThumbOptions .= "<option value=\"{$index}\" {$selected}>{$size}". wfMsgHtml('unit-pixel') ."</option>\n"; } $wgOut->addHTML( "{$imageThumbOptions}</select></label></div></fieldset>\n\n"); @@ -754,14 +772,14 @@ class PreferencesForm { # $wgOut->addHTML('<fieldset><legend>' . wfMsg('prefs-misc') . '</legend>'); - $msgUnderline = htmlspecialchars(wfMsg("tog-underline")); - $msgUnderlinenever = htmlspecialchars(wfMsg("underline-never")); - $msgUnderlinealways = htmlspecialchars(wfMsg("underline-always")); - $msgUnderlinedefault = htmlspecialchars(wfMsg("underline-default")); - $uopt = $wgUser->getOption("underline"); - $s0 = $uopt == 0 ? " selected=\"selected\"" : ""; - $s1 = $uopt == 1 ? " selected=\"selected\"" : ""; - $s2 = $uopt == 2 ? " selected=\"selected\"" : ""; + $msgUnderline = htmlspecialchars(wfMsg('tog-underline')); + $msgUnderlinenever = htmlspecialchars(wfMsg('underline-never')); + $msgUnderlinealways = htmlspecialchars(wfMsg('underline-always')); + $msgUnderlinedefault = htmlspecialchars(wfMsg('underline-default')); + $uopt = $wgUser->getOption('underline'); + $s0 = $uopt == 0 ? ' selected="selected"' : ''; + $s1 = $uopt == 1 ? ' selected="selected"' : ''; + $s2 = $uopt == 2 ? ' selected="selected"' : ''; $wgOut->addHTML(" <div class='toggle'><label>$msgUnderline <select name=\"wpOpunderline\"> @@ -769,7 +787,8 @@ class PreferencesForm { <option value=\"1\"$s1>$msgUnderlinealways</option> <option value=\"2\"$s2>$msgUnderlinedefault</option> </select> -</label></div> +</label> +</div> "); foreach ( $togs as $tname ) { if( !array_key_exists( $tname, $this->mUsedToggles ) ) { |