Return nothing on empty math tags instead of char encoding
[lhc/web/wiklou.git] / includes / SpecialPreferences.php
index a06bf79..643932c 100644 (file)
@@ -206,7 +206,7 @@ class PreferencesForm {
        function savePreferences() {
                global $wgUser, $wgOut, $wgParser;
                global $wgEnableUserEmail, $wgEnableEmail;
-               global $wgEmailAuthentication, $wgMinimalPasswordLength;
+               global $wgEmailAuthentication;
                global $wgAuth;
 
 
@@ -216,22 +216,18 @@ class PreferencesForm {
                                return;
                        }
 
-                       if ( strlen( $this->mNewpass ) < $wgMinimalPasswordLength ) {
-                               $this->mainPrefsForm( 'error', wfMsg( 'passwordtooshort', $wgMinimalPasswordLength ) );
-                               return;
-                       }
-
                        if (!$wgUser->checkPassword( $this->mOldpass )) {
                                $this->mainPrefsForm( 'error', wfMsg( 'wrongpassword' ) );
                                return;
                        }
-                       if (!$wgAuth->setPassword( $wgUser, $this->mNewpass )) {
-                               $this->mainPrefsForm( 'error', wfMsg( 'externaldberror' ) );
+                       
+                       try {
+                               $wgUser->setPassword( $this->mNewpass );
+                               $this->mNewpass = $this->mOldpass = $this->mRetypePass = '';
+                       } catch( PasswordError $e ) {
+                               $this->mainPrefsForm( 'error', $e->getMessage() );
                                return;
                        }
-                       $wgUser->setPassword( $this->mNewpass );
-                       $this->mNewpass = $this->mOldpass = $this->mRetypePass = '';
-
                }
                $wgUser->setRealName( $this->mRealName );
 
@@ -334,7 +330,6 @@ class PreferencesForm {
                }
 
                $wgOut->setParserOptions( ParserOptions::newFromUser( $wgUser ) );
-               $po = ParserOptions::newFromUser( $wgUser );
                $this->mainPrefsForm( $error === false ? 'success' : 'error', $error);
        }
 
@@ -342,18 +337,16 @@ class PreferencesForm {
         * @access private
         */
        function resetPrefs() {
-               global $wgUser, $wgLang, $wgContLang, $wgAllowRealName;
+               global $wgUser, $wgLang, $wgContLang, $wgContLanguageCode, $wgAllowRealName;
 
                $this->mOldpass = $this->mNewpass = $this->mRetypePass = '';
                $this->mUserEmail = $wgUser->getEmail();
                $this->mUserEmailAuthenticationtimestamp = $wgUser->getEmailAuthenticationtimestamp();
                $this->mRealName = ($wgAllowRealName) ? $wgUser->getRealName() : '';
-               $this->mUserLanguage = $wgUser->getOption( 'language' );
-               if( empty( $this->mUserLanguage ) ) {
-                       # Quick hack for conversions, where this value is blank
-                       global $wgContLanguageCode;
-                       $this->mUserLanguage = $wgContLanguageCode;
-               }
+
+               # language value might be blank, default to content language
+               $this->mUserLanguage = $wgUser->getOption( 'language', $wgContLanguageCode );
+
                $this->mUserVariant = $wgUser->getOption( 'variant');
                $this->mEmailFlag = $wgUser->getOption( 'disablemail' ) == 1 ? 1 : 0;
                $this->mNick = $wgUser->getOption( 'nickname' );
@@ -487,6 +480,7 @@ class PreferencesForm {
                $this->mUsedToggles[ 'enotifusertalkpages' ] = true;
                $this->mUsedToggles[ 'enotifminoredits' ] = true;
                $this->mUsedToggles[ 'enotifrevealaddr' ] = true;
+               $this->mUsedToggles[ 'ccmeonemails' ] = true;
                $this->mUsedToggles[ 'uselivepreview' ] = true;
 
                # Enotif
@@ -536,19 +530,19 @@ class PreferencesForm {
 
                $wgOut->addHTML( "<fieldset>\n<legend>" . wfMsg('prefs-personal') . "</legend>\n<table>\n");
 
-               $wgOut->addHTML(
+               $userInformationHtml =
                        $this->addRow(
                                wfMsg( 'username'),
                                $wgUser->getName()
-                       )
-               );
-
-               $wgOut->addHTML(
+                       ) .
                        $this->addRow(
                                wfMsg( 'uid' ),
                                $wgUser->getID()
-                       )
-               );
+                       );
+               
+               if( wfRunHooks( 'PreferencesUserInformationPanel', array( $this, &$userInformationHtml ) ) ) {
+                       $wgOut->addHtml( $userInformationHtml );
+               }
 
 
                if ($wgAllowRealName) {
@@ -597,7 +591,7 @@ class PreferencesForm {
                 * Make sure the site language is in the list; a custom language code
                 * might not have a defined name...
                 */
-               $languages = $wgLang->getLanguageNames( true );
+               $languages = Language::getLanguageNames( true );
                if( !array_key_exists( $wgContLanguageCode, $languages ) ) {
                        $languages[$wgContLanguageCode] = $wgContLanguageCode;
                }
@@ -689,6 +683,7 @@ class PreferencesForm {
                                $wgOut->addHTML(
                                "<div><input type='checkbox' $emfc $disabled value='1' name='wpEmailFlag' id='wpEmailFlag' /> <label for='wpEmailFlag'>$emf</label></div>" );
                        }
+                       $wgOut->addHtml( $this->getToggle( 'ccmeonemails' ) );
 
                        $wgOut->addHTML( '</fieldset>' );
                }
@@ -858,17 +853,13 @@ class PreferencesForm {
                                'showtoolbar',
                                'previewonfirst',
                                'previewontop',
-                               'watchcreations',
-                               'watchdefault',
                                'minordefault',
                                'externaleditor',
                                'externaldiff',
                                $wgLivePreview ? 'uselivepreview' : false,
-                               $wgUser->isAllowed( 'patrol' ) && $wgUseRCPatrol ? 'autopatrol' : false,
                                'forceeditsummary',
                        ) ) . '</fieldset>'
                );
-               $this->mUsedToggles['autopatrol'] = true; # Don't show this up for users who can't; the handler below is dumb and doesn't know it
 
                $wgOut->addHTML( '<fieldset><legend>' . htmlspecialchars(wfMsg('prefs-rc')) . '</legend>' .
                                        wfInputLabel( wfMsg( 'recentchangescount' ),
@@ -881,16 +872,29 @@ class PreferencesForm {
                );
 
                # Watchlist
-               $wgOut->addHTML( '<fieldset><legend>' . wfMsgHtml( 'prefs-watchlist' ) . '</legend>' );
-
-               $wgOut->addHTML( wfInputLabel( wfMsg( 'prefs-watchlist-days' ),
-                       'wpWatchlistDays', 'wpWatchlistDays', 3, $this->mWatchlistDays ) );
-               $wgOut->addHTML( '<br /><br />' ); # Spacing
-               $wgOut->addHTML( $this->getToggles( array( 'watchlisthideown', 'watchlisthidebots', 'extendwatchlist' ) ) );
-               $wgOut->addHTML( wfInputLabel( wfMsg( 'prefs-watchlist-edits' ),
-                       'wpWatchlistEdits', 'wpWatchlistEdits', 3, $this->mWatchlistEdits ) );
-
-               $wgOut->addHTML( '</fieldset>' );
+               $wgOut->addHtml( '<fieldset><legend>' . wfMsgHtml( 'prefs-watchlist' ) . '</legend>' );
+               
+               $wgOut->addHtml( wfInputLabel( wfMsg( 'prefs-watchlist-days' ), 'wpWatchlistDays', 'wpWatchlistDays', 3, $this->mWatchlistDays ) );
+               $wgOut->addHtml( '<br /><br />' );
+
+               $wgOut->addHtml( $this->getToggle( 'extendwatchlist' ) );
+               $wgOut->addHtml( wfInputLabel( wfMsg( 'prefs-watchlist-edits' ), 'wpWatchlistEdits', 'wpWatchlistEdits', 3, $this->mWatchlistEdits ) );
+               $wgOut->addHtml( '<br /><br />' );
+
+               $wgOut->addHtml( $this->getToggles( array( 'watchlisthideown', 'watchlisthidebots', 'watchlisthideminor' ) ) );
+               
+               if( $wgUser->isAllowed( 'createpage' ) || $wgUser->isAllowed( 'createtalk' ) )
+                       $wgOut->addHtml( $this->getToggle( 'watchcreations' ) );
+               foreach( array( 'edit' => 'watchdefault', 'move' => 'watchmoves', 'delete' => 'watchdeletion' ) as $action => $toggle ) {
+                       if( $wgUser->isAllowed( $action ) )
+                               $wgOut->addHtml( $this->getToggle( $toggle ) );
+               }
+               $this->mUsedToggles['watchcreations'] = true;
+               $this->mUsedToggles['watchdefault'] = true;
+               $this->mUsedToggles['watchmoves'] = true;
+               $this->mUsedToggles['watchdeletion'] = true;
+               
+               $wgOut->addHtml( '</fieldset>' );
 
                # Search
                $wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'searchresultshead' ) . '</legend><table>' .
@@ -922,14 +926,13 @@ class PreferencesForm {
                $s1 = $uopt == 1 ? ' selected="selected"' : '';
                $s2 = $uopt == 2 ? ' selected="selected"' : '';
                $wgOut->addHTML("
-<div class='toggle'><label for='wpOpunderline'>$msgUnderline</label>
+<div class='toggle'><p><label for='wpOpunderline'>$msgUnderline</label>
 <select name='wpOpunderline' id='wpOpunderline'>
 <option value=\"0\"$s0>$msgUnderlinenever</option>
 <option value=\"1\"$s1>$msgUnderlinealways</option>
 <option value=\"2\"$s2>$msgUnderlinedefault</option>
-</select>
-</div>
-");
+</select></p></div>");
+
                foreach ( $togs as $tname ) {
                        if( !array_key_exists( $tname, $this->mUsedToggles ) ) {
                                $wgOut->addHTML( $this->getToggle( $tname ) );