(bug 8487) Don't show users action watch preferences that aren't applicable
[lhc/web/wiklou.git] / includes / SpecialPreferences.php
index da2d3cd..d910dff 100644 (file)
@@ -530,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) {
@@ -591,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;
                }
@@ -853,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' ),
@@ -876,16 +872,31 @@ 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( $this->getToggles( array( 'watchdefault', 'watchcreations', 'watchmoves', 'watchdeletion' ) ) );
+               
+               $wgOut->addHtml( '</fieldset>' );
 
                # Search
                $wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'searchresultshead' ) . '</legend><table>' .
@@ -917,14 +928,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 ) );