Fixed bug causing infinite recursion on failure to contact a slave. Some other genera...
[lhc/web/wiklou.git] / includes / SpecialPreferences.php
index 1e9976c..6f6e75b 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 function wfSpecialPreferences()
 {
        global $wgRequest;
@@ -12,10 +11,10 @@ class PreferencesForm {
        var $mQuickbar, $mOldpass, $mNewpass, $mRetypePass, $mStubs;
        var $mRows, $mCols, $mSkin, $mMath, $mDate, $mUserEmail, $mEmailFlag, $mNick;
        var $mSearch, $mRecent, $mHourDiff, $mSearchLines, $mSearchChars, $mAction;
-       var $mReset, $mPosted, $mToggles, $mSearchNs;
+       var $mReset, $mPosted, $mToggles, $mSearchNs, $mRealName;
 
        function PreferencesForm( &$request ) { 
-               global $wgLang;
+               global $wgLang, $wgAllowRealName;
                
                $this->mQuickbar = $request->getVal( 'wpQuickbar' );
                $this->mOldpass = $request->getVal( 'wpOldpass' );
@@ -28,6 +27,7 @@ class PreferencesForm {
                $this->mMath = $request->getVal( 'wpMath' );
                $this->mDate = $request->getVal( 'wpDate' );
                $this->mUserEmail = $request->getVal( 'wpUserEmail' );
+               $this->mRealName = ($wgAllowRealName) ? $request->getVal( 'wpRealName' ) : '';
                $this->mEmailFlag = $request->getCheck( 'wpEmailFlag' ) ? 1 : 0;
                $this->mNick = $request->getVal( 'wpNick' );
                $this->mSearch = $request->getVal( 'wpSearch' );
@@ -44,11 +44,13 @@ class PreferencesForm {
                $this->mToggles = array();
                if ( $this->mPosted ) {
                        $togs = $wgLang->getUserToggles();
-                       foreach ( $togs as $tname => $ttext ) {
+                       foreach ( $togs as $tname ) {
                                $this->mToggles[$tname] = $request->getCheck( "wpOp$tname" ) ? 1 : 0;
                        }
                }
                
+               $this->mUsedToggles = array();
+               
                # Search namespace options
                # Note: namespaces don't necessarily have consecutive keys
                $this->mSearchNs = array();
@@ -132,16 +134,15 @@ class PreferencesForm {
                                $this->mainPrefsForm( wfMsg( "badretype" ) );                   
                                return;
                        }
-                       $ep = $wgUser->encryptPassword( $this->mOldpass );
-                       if ( $ep != $wgUser->getPassword() ) {
-                               if ( $ep != $wgUser->getNewpassword() ) {
-                                       $this->mainPrefsForm( wfMsg( "wrongpassword" ) );
-                                       return;
-                               }
+
+                       if (!$wgUser->checkPassword( $this->mOldpass )) {
+                               $this->mainPrefsForm( wfMsg( "wrongpassword" ) );
+                               return;
                        }
                        $wgUser->setPassword( $this->mNewpass );
                }
                $wgUser->setEmail( $this->mUserEmail );
+               $wgUser->setRealName( $this->mRealName );
                $wgUser->setOption( "nickname", $this->mNick );
                $wgUser->setOption( "quickbar", $this->mQuickbar );
                $wgUser->setOption( "skin", $this->mSkin );
@@ -177,10 +178,11 @@ class PreferencesForm {
 
        /* private */ function resetPrefs()
        {
-               global $wgUser, $wgLang;
+               global $wgUser, $wgLang, $wgAllowRealName;
 
                $this->mOldpass = $this->mNewpass = $this->mRetypePass = "";
                $this->mUserEmail = $wgUser->getEmail();
+               $this->mRealName = ($wgAllowRealName) ? $wgUser->getRealName() : '';
                if ( 1 == $wgUser->getOption( "disablemail" ) ) { $this->mEmailFlag = 1; }
                else { $this->mEmailFlag = 0; }
                $this->mNick = $wgUser->getOption( "nickname" );
@@ -199,7 +201,8 @@ class PreferencesForm {
                $this->mRecent = $wgUser->getOption( "rclimit" );
 
                $togs = $wgLang->getUserToggles();
-               foreach ( $togs as $tname => $ttext ) {
+               foreach ( $togs as $tname ) {
+                       $ttext = wfMsg("tog-".$tname);
                        $this->mToggles[$tname] = $wgUser->getOption( $tname );
                }
 
@@ -234,8 +237,8 @@ class PreferencesForm {
                                if ( 0 != $i ) { 
                                        $r1 .= " "; 
                                }
-                               $r1 .= "<label><input type=checkbox value=\"1\" name=\"" .
-                                 "wpNs$i\"{$checked}>{$name}</label>\n";
+                               $r1 .= "<label><input type='checkbox' value=\"1\" name=\"" .
+                                 "wpNs$i\"{$checked} />{$name}</label>\n";
                        }
                }
                
@@ -243,23 +246,38 @@ class PreferencesForm {
        }
 
 
-
+       function getToggle( $tname ) {
+               global $wgUser, $wgLang;
+               
+               $this->mUsedToggles[$tname] = true;
+               $ttext = $wgLang->getUserToggle( $tname );
+               
+               if ( 1 == $wgUser->getOption( $tname ) ) {
+                       $checked = ' checked="checked"';
+               } else {
+                       $checked = "";
+               }               
+               return "<div><input type='checkbox' value=\"1\" "
+                 . "id=\"$tname\" name=\"wpOp$tname\"$checked /><label for=\"$tname\">$ttext</label></div>\n";
+       }
 
        /* private */ function mainPrefsForm( $err )
        {
                global $wgUser, $wgOut, $wgLang, $wgUseDynamicDates, $wgValidSkinNames;
-
+               global $wgAllowRealName;
+           
                $wgOut->setPageTitle( wfMsg( "preferences" ) );
                $wgOut->setArticleRelated( false );
                $wgOut->setRobotpolicy( "noindex,nofollow" );
 
                if ( "" != $err ) {
-                       $wgOut->addHTML( "<font size='+1' color='red'>$err</font>\n<p>" );
+                       $wgOut->addHTML( "<p class='error'>" . htmlspecialchars( $err ) . "</p>\n" );
                }
                $uname = $wgUser->getName();
                $uid = $wgUser->getID();
 
                $wgOut->addWikiText( wfMsg( "prefslogintext", $uname, $uid ) );
+               $wgOut->addWikiText( wfMsg('clearyourcache'));
 
                $qbs = $wgLang->getQuickbarSettings();
                $skinNames = $wgLang->getSkinNames();
@@ -284,11 +302,13 @@ class PreferencesForm {
                $tbr = wfMsg( "rows" );
                $tbc = wfMsg( "columns" );
                $ltz = wfMsg( "localtime" );
+               $timezone = wfMsg( "timezonelegend" );
                $tzt = wfMsg( "timezonetext" );
                $tzo = wfMsg( "timezoneoffset" );
                $tzGuess = wfMsg( "guesstimezone" );
                $tzServerTime = wfMsg( "servertime" );
                $yem = wfMsg( "youremail" );
+               $yrn = ($wgAllowRealName) ? wfMsg( "yourrealname" ) : '';
                $emf = wfMsg( "emailflag" );
                $ynn = wfMsg( "yournick" );
                $stt = wfMsg ( "stubthreshold" ) ;
@@ -300,16 +320,28 @@ class PreferencesForm {
                $dsn = wfMsg( "defaultns" );
 
                $wgOut->addHTML( "<form id=\"preferences\" name=\"preferences\" action=\"$action\"
-       method=\"post\"><table border=\"1\"><tr><td valign=top nowrap><b>$qb:</b><br>\n" );
-
-               # Quickbar setting
+       method=\"post\">" );
+       
+               # First section: identity
+               # Email, etc.
                #
-               for ( $i = 0; $i < count( $qbs ); ++$i ) {
-                       if ( $i == $this->mQuickbar ) { $checked = ' checked="checked"'; }
-                       else { $checked = ""; }
-                       $wgOut->addHTML( "<label><input type=radio name=\"wpQuickbar\"
-       value=\"$i\"$checked> {$qbs[$i]}</label><br>\n" );
+               $this->mUserEmail = wfEscapeHTML( $this->mUserEmail );
+               $this->mRealName = wfEscapeHTML( $this->mRealName );
+               $this->mNick = wfEscapeHTML( $this->mNick );
+               if ( $this->mEmailFlag ) { $emfc = 'checked="checked"'; }
+               else { $emfc = ""; }
+
+               $ps = $this->namespacesCheckboxes();
+
+               $wgOut->addHTML( "<fieldset>
+               <legend>".wfMsg('prefs-personal')."</legend>");
+               if ($wgAllowRealName) {
+                   $wgOut->addHTML("<div><label>$yrn: <input type='text' name=\"wpRealName\" value=\"{$this->mRealName}\" size='20' /></label></div>");
                }
+               $wgOut->addHTML("
+               <div><label>$yem: <input type='text' name=\"wpUserEmail\" value=\"{$this->mUserEmail}\" size='20' /></label></div>
+               <div><label><input type='checkbox' $emfc value=\"1\" name=\"wpEmailFlag\" /> $emf</label></div>
+               <div><label>$ynn: <input type='text' name=\"wpNick\" value=\"{$this->mNick}\" size='12' /></label></div>\n" );
 
                # Fields for changing password
                #
@@ -317,15 +349,31 @@ class PreferencesForm {
                $this->mNewpass = wfEscapeHTML( $this->mNewpass );
                $this->mRetypePass = wfEscapeHTML( $this->mRetypePass );
 
-               $wgOut->addHTML( "</td><td vaign=top nowrap><b>$cp:</b><br>
-       <label>$opw: <input type=password name=\"wpOldpass\" value=\"{$this->mOldpass}\" size=20></label><br>
-       <label>$npw: <input type=password name=\"wpNewpass\" value=\"{$this->mNewpass}\" size=20></label><br>
-       <label>$rpw: <input type=password name=\"wpRetypePass\" value=\"{$this->mRetypePass}\" size=20></label><br>
-       </td></tr>\n" );
+               $wgOut->addHTML( "<fieldset>
+       <legend>$cp</legend>
+       <div><label>$opw: <input type='password' name=\"wpOldpass\" value=\"{$this->mOldpass}\" size='20' /></label></div>
+       <div><label>$npw: <input type='password' name=\"wpNewpass\" value=\"{$this->mNewpass}\" size='20' /></label></div>
+       <div><label>$rpw: <input type='password' name=\"wpRetypePass\" value=\"{$this->mRetypePass}\" size='20' /></label></div>
+       " . $this->getToggle( "rememberpassword" ) . "
+       </fieldset>
+       <div class='prefsectiontip'>".wfMsg('prefs-help-userdata')."</div>\n</fieldset>\n" );
+
+       
+               # Quickbar setting
+               #
+               $wgOut->addHtml( "<fieldset>\n<legend>$qb</legend>\n" );
+               for ( $i = 0; $i < count( $qbs ); ++$i ) {
+                       if ( $i == $this->mQuickbar ) { $checked = ' checked="checked"'; }
+                       else { $checked = ""; }
+                       $wgOut->addHTML( "<div><label><input type='radio' name=\"wpQuickbar\"
+       value=\"$i\"$checked /> {$qbs[$i]}</label></div>\n" );
+               }
+               $wgOut->addHtml('<div class="prefsectiontip">'.wfMsg('qbsettingsnote').'</div>');
+               $wgOut->addHtml( "</fieldset>\n\n" );
 
                # Skin setting
                #
-               $wgOut->addHTML( "<tr><td valign=top nowrap><b>$sk:</b><br>\n" );
+               $wgOut->addHTML( "<fieldset>\n<legend>$sk</legend>\n" );
                # Only show members of $wgValidSkinNames rather than
                # $skinNames (skins is all skin names from Language.php)
                foreach ($wgValidSkinNames as $skinkey => $skinname ) {
@@ -334,96 +382,106 @@ class PreferencesForm {
                        } else { 
                                $checked = ""; 
                        }
-                       $wgOut->addHTML( "<label><input type=radio name=\"wpSkin\"
-       value=\"$skinkey\"$checked> {$skinNames[$skinkey]}</label><br>\n" );
-               }
-
-               # Various checkbox options
-               #
-               if ( $wgUseDynamicDates ) {
-                       $wgOut->addHTML( "</td><td rowspan=3 valign=top nowrap>\n" );
-               } else {
-                       $wgOut->addHTML( "</td><td rowspan=2 valign=top nowrap>\n" );
-               }
-               $wgOut->addHTML("<table border=0>");
-               foreach ( $togs as $tname => $ttext ) {
-                       if ( 1 == $wgUser->getOption( $tname ) ) {
-                               $checked = ' checked="checked"';
-                       } else {
-                               $checked = "";
-                       }               
-                       $wgOut->addHTML( "<tr valign=\"top\"><td><input type=checkbox value=\"1\" "
-                         . "id=\"$tname\" name=\"wpOp$tname\"$checked></td><td><label for=\"$tname\">$ttext</label></td></tr>\n" );
+                       $wgOut->addHTML( "<div><label><input type='radio' name=\"wpSkin\"
+       value=\"$skinkey\"$checked /> {$skinNames[$skinkey]}</label></div>\n" );
                }
-               $wgOut->addHTML( "</table></td>" );
+               $wgOut->addHTML( "</fieldset>\n\n" );
 
                # Math setting
                #
-               $wgOut->addHTML( "<tr><td valign=top nowrap><b>$math:</b><br>\n" );
+               $wgOut->addHTML( "<fieldset>\n<legend>$math</legend>\n" );
                for ( $i = 0; $i < count( $mathopts ); ++$i ) {
                        if ( $i == $this->mMath ) { $checked = ' checked="checked"'; }
                        else { $checked = ""; }
-                       $wgOut->addHTML( "<label><input type=radio name=\"wpMath\"
-       value=\"$i\"$checked> {$mathopts[$i]}</label><br>\n" );
+                       $wgOut->addHTML( "<div><label><input type='radio' name=\"wpMath\"
+       value=\"$i\"$checked /> ".wfMsg($mathopts[$i])."</label></div>\n" );
                }
-               $wgOut->addHTML( "</td></tr>" );
+               $wgOut->addHTML( "</fieldset>\n\n" );
                
                # Date format
                #
                if ( $wgUseDynamicDates ) {
-                       $wgOut->addHTML( "<tr><td valign=top nowrap><b>$dateFormat:</b><br>" );
+                       $wgOut->addHTML( "<fieldset>\n<legend>$dateFormat</legend>\n" );
                        for ( $i = 0; $i < count( $dateopts ); ++$i) {
                                if ( $i == $this->mDate ) {
                                        $checked = ' checked="checked"';
                                } else {
                                        $checked = "";
                                }
-                               $wgOut->addHTML( "<label><input type=radio name=\"wpDate\" ".
-                                       "value=\"$i\"$checked> {$dateopts[$i]}</label><br>\n" );
+                               $wgOut->addHTML( "<div><label><input type='radio' name=\"wpDate\" ".
+                                       "value=\"$i\"$checked /> {$dateopts[$i]}</label></div>\n" );
                        }
-                       $wgOut->addHTML( "</td></tr>");
+                       $wgOut->addHTML( "</fieldset>\n\n");
                }
+               
                # Textbox rows, cols
                #
                $nowlocal = $wgLang->time( $now = wfTimestampNow(), true );
                $nowserver = $wgLang->time( $now, false );
-               $wgOut->addHTML( "<td valign=top nowrap><b>$tbs:</b><br>
-       <label>$tbr: <input type=text name=\"wpRows\" value=\"{$this->mRows}\" size=6></label><br>
-       <label>$tbc: <input type=text name=\"wpCols\" value=\"{$this->mCols}\" size=6></label><br><br>
-       <b>$tzServerTime:</b> $nowserver<br />
-       <b>$ltz:</b> $nowlocal<br />
-       <label>$tzo*: <input type=text name=\"wpHourDiff\" value=\"{$this->mHourDiff}\" size=6></label><br />
-       <input type=\"button\" value=\"$tzGuess\" onClick=\"javascript:guessTimezone()\" />
-       </td>" );
-
-               # Email, etc.
+               $wgOut->addHTML( "<fieldset>
+       <legend>$tbs</legend>\n
+               <div>
+                       <label>$tbr: <input type='text' name=\"wpRows\" value=\"{$this->mRows}\" size='6' /></label>
+                       <label>$tbc: <input type='text' name=\"wpCols\" value=\"{$this->mCols}\" size='6' /></label>
+               </div> " .
+               $this->getToggle( "editwidth" ) .
+               $this->getToggle( "showtoolbar" ) .
+               $this->getToggle( "previewontop" ) .
+               $this->getToggle( "watchdefault" ) .
+               $this->getToggle( "minordefault" ) . "
+       </fieldset>
+       
+       <fieldset>
+               <legend>$timezone</legend>
+               <div><b>$tzServerTime:</b> $nowserver</div>
+               <div><b>$ltz:</b> $nowlocal</div>
+               <div><label>$tzo*: <input type='text' name=\"wpHourDiff\" value=\"{$this->mHourDiff}\" size='6' /></label></div>
+               <div><input type=\"button\" value=\"$tzGuess\" onClick=\"javascript:guessTimezone()\" id=\"guesstimezonebutton\" style=\"display:none\" /></div>
+               <div class='prefsectiontip'>* {$tzt}</div>
+       </fieldset>\n\n" );
+
+               $wgOut->addHTML( "
+       <fieldset><legend>".wfMsg('prefs-rc')."</legend>
+               <div><label>$rcc: <input type='text' name=\"wpRecent\" value=\"$this->mRecent\" size='6' /></label></div>
+               " . $this->getToggle( "hideminor" ) .
+               $this->getToggle( "usenewrc" ) . "
+               <div><label>$stt: <input type='text' name=\"wpStubs\" value=\"$this->mStubs\" size='6' /></label></div>
+       </fieldset>
+       
+       <fieldset>
+               <legend>$srh</legend>
+               <div><label>$rpp: <input type='text' name=\"wpSearch\" value=\"$this->mSearch\" size='6' /></label></div>
+               <div><label>$scl: <input type='text' name=\"wpSearchLines\" value=\"$this->mSearchLines\" size='6' /></label></div>
+               <div><label>$scc: <input type='text' name=\"wpSearchChars\" value=\"$this->mSearchChars\" size='6' /></label></div>
+
+               <fieldset>
+                       <legend>$dsn</legend>
+                       $ps
+               </fieldset>
+       </fieldset>
+               " );
+       
+               # Various checkbox options
                #
-               $this->mUserEmail = wfEscapeHTML( $this->mUserEmail );
-               $this->mNick = wfEscapeHTML( $this->mNick );
-               if ( $this->mEmailFlag ) { $emfc = 'checked="checked"'; }
-               else { $emfc = ""; }
-
-               $ps = $this->namespacesCheckboxes();
-
-               $wgOut->addHTML( "<td valign=top nowrap>
-       <label>$yem: <input type=text name=\"wpUserEmail\" value=\"{$this->mUserEmail}\" size=20></label><br>
-       <label><input type=checkbox $emfc value=\"1\" name=\"wpEmailFlag\"> $emf</label><br>
-       <label>$ynn: <input type=text name=\"wpNick\" value=\"{$this->mNick}\" size=12></label><br>
-       <label>$rcc: <input type=text name=\"wpRecent\" value=\"$this->mRecent\" size=6></label><br>
-       <label>$stt: <input type=text name=\"wpStubs\" value=\"$this->mStubs\" size=6></label><br>
-       <strong>{$srh}:</strong><br>
-       <label>$rpp: <input type=text name=\"wpSearch\" value=\"$this->mSearch\" size=6></label><br>
-       <label>$scl: <input type=text name=\"wpSearchLines\" value=\"$this->mSearchLines\" size=6></label><br>
-       <label>$scc: <input type=text name=\"wpSearchChars\" value=\"$this->mSearchChars\" size=6></label></td>
-       </tr><tr>
-       <td colspan=2>
-       <b>$dsn</b><br>
-       $ps
-       </td>
-       </tr><tr>
-       <td align=center><input type=submit name=\"wpSaveprefs\" value=\"$svp\"></td>
-       <td align=center><input type=submit name=\"wpReset\" value=\"$rsp\"></td>
-       </tr></table>* {$tzt} </form>\n" );
+               $wgOut->addHTML("<fieldset><legend>".wfMsg('prefs-misc')."</legend>");
+               foreach ( $togs as $tname ) {
+                       if( !array_key_exists( $tname, $this->mUsedToggles ) ) {
+                               $wgOut->addHTML( $this->getToggle( $tname ) );
+                       }
+               }
+               $wgOut->addHTML( "</fieldset>\n\n" );
+
+               $wgOut->addHTML( "
+       <div id='prefsubmit'>
+       <div>
+               <input type='submit' name=\"wpSaveprefs\" value=\"$svp\" accesskey=\"".
+               wfMsg('accesskey-save')."\" title=\"[alt-".wfMsg('accesskey-save')."]\" />
+               <input type='submit' name=\"wpReset\" value=\"$rsp\" />
+       </div>
+       
+       </div>
+       
+       </form>\n" );
        }
 }
 ?>