* bug 21267 change "show/hide" to "show", if user cannot submit Special:Revisiondelete
authorAaron Schulz <aaron@users.mediawiki.org>
Fri, 30 Oct 2009 02:14:22 +0000 (02:14 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Fri, 30 Oct 2009 02:14:22 +0000 (02:14 +0000)
* Added revDeleteLinkDisabled() function

includes/Article.php
includes/HistoryPage.php
includes/ImagePage.php
includes/Linker.php
includes/LogEventsList.php
includes/diff/DifferenceInterface.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialUndelete.php
languages/messages/MessagesEn.php
maintenance/language/messages.inc

index 6e993fc..42625e3 100644 (file)
@@ -3369,6 +3369,8 @@ class Article {
                        return;
                }
 
+               $unhide = $wgRequest->getInt('unhide') == 1 &&
+                       $wgUser->matchEditToken( $wgRequest->getVal('token'), $oldid );
                # Cascade unhide param in links for easy deletion browsing
                $extraParams = array();
                if( $wgRequest->getVal('unhide') ) {
@@ -3452,23 +3454,24 @@ class Article {
                                array( 'known', 'noclasses' )
                        );
 
-               $cdel='';
-               // Don't show useless link to people who cannot hide revisions
-               if( $wgUser->isAllowed('deleterevision') || ($revision->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
+               $cdel = '';
+               // User can delete revisions or view deleted revisions...
+               $canHide = $wgUser->isAllowed('deleterevision');
+               if( $canHide || ($revision->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
+                       // Is this hidden from Sysops?
                        if( !$revision->userCan( Revision::DELETED_RESTRICTED ) ) {
-                       // If revision was hidden from sysops
-                               $cdel = wfMsgHtml( 'rev-delundel' );
+                               $cdel = $sk->revDeleteLinkDisabled( $canHide );
                        } else {
                                $query = array(
                                        'type'   => 'revision',
                                        'target' => urlencode( $this->mTitle->getPrefixedDbkey() ),
                                        'ids'    => urlencode( $oldid )
                                );
-                               $cdel = $sk->revDeleteLink( $query, $revision->isDeleted(File::DELETED_RESTRICTED) );
+                               $cdel = $sk->revDeleteLink( $query, $revision->isDeleted(File::DELETED_RESTRICTED), $canHide );
                        }
                        $cdel .= ' ';
                }
-               $unhide = $wgRequest->getInt('unhide') == 1 && $wgUser->matchEditToken( $wgRequest->getVal('token'), $oldid );
+
                # Show user links if allowed to see them. If hidden, then show them only if requested...
                $userlinks = $sk->revUserTools( $revision, !$unhide );
 
index 01d95e0..ff98088 100644 (file)
@@ -50,7 +50,7 @@ class HistoryPage {
        function preCacheMessages() {
                // Precache various messages
                if( !isset( $this->message ) ) {
-                       $msgs = array( 'cur', 'last', 'rev-delundel', 'pipe-separator' );
+                       $msgs = array( 'cur', 'last', 'pipe-separator' );
                        foreach( $msgs as $msg ) {
                                $this->message[$msg] = wfMsgExt( $msg, array( 'escapenoentities') );
                        }
@@ -472,6 +472,7 @@ class HistoryPager extends ReverseChronologicalPager {
                $classes = array();
 
                $del = '';
+               // User can delete revisions...
                if( $wgUser->isAllowed( 'deleterevision' ) ) {
                        // If revision was hidden from sysops, disable the checkbox
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
@@ -484,13 +485,13 @@ class HistoryPager extends ReverseChronologicalPager {
                } else if( $rev->getVisibility() && $wgUser->isAllowed( 'deletedhistory' ) ) {
                        // If revision was hidden from sysops, disable the link
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                               $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
-                                       '(' . $this->historyPage->message['rev-delundel'] . ')' );
+                               $cdel = $this->getSkin()->revDeleteLinkDisabled( false );
                        // Otherwise, show the link...
                        } else {
                                $query = array( 'type' => 'revision',
                                        'target' => $this->title->getPrefixedDbkey(), 'ids' => $rev->getId() );          
-                               $del .= $this->getSkin()->revDeleteLink( $query, $rev->isDeleted( Revision::DELETED_RESTRICTED ) );
+                               $del .= $this->getSkin()->revDeleteLink( $query,
+                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ), false );
                        }
                }
                if( $del ) $s .= " $del ";
index 9a0c089..d1fa75c 100644 (file)
@@ -861,21 +861,23 @@ class ImageHistoryList {
                                );
                        }
                        # Link to hide content. Don't show useless link to people who cannot hide revisions.
-                       if( $wgUser->isAllowed('deleterevision') || ($wgUser->isAllowed('deletedhistory') && $file->getVisibility()) ) {
+                       $canHide = $wgUser->isAllowed( 'deleterevision' );
+                       if( $canHide || ($wgUser->isAllowed('deletedhistory') && $file->getVisibility()) ) {
                                if( $wgUser->isAllowed('delete') ) {
                                        $row .= '<br/>';
                                }
                                // If file is top revision or locked from this user, don't link
                                if( $iscur || !$file->userCan(File::DELETED_RESTRICTED) ) {
-                                       $del = wfMsgHtml( 'rev-delundel' );
+                                       $del = $this->skin->revDeleteLinkDisabled( $canHide );
                                } else {
                                        list( $ts, $name ) = explode( '!', $img, 2 );
                                        $query = array(
-                                               'type' => 'oldimage',
+                                               'type'   => 'oldimage',
                                                'target' => $wgTitle->getPrefixedText(), 
-                                               'ids' => $ts,
+                                               'ids'    => $ts,
                                        );
-                                       $del = $this->skin->revDeleteLink( $query, $file->isDeleted(File::DELETED_RESTRICTED) );
+                                       $del = $this->skin->revDeleteLink( $query,
+                                               $file->isDeleted(File::DELETED_RESTRICTED), $canHide );
                                }
                                $row .= $del;
                        }
index b0324b1..f6b3d68 100644 (file)
@@ -1636,17 +1636,31 @@ class Linker {
         *
         * @param array $query  Query parameters to be passed to link()
         * @param bool $restricted  Set to true to use a <strong> instead of a <span>
+        * @param bool $delete Set to true to use (show/hide) rather than (show)
         *
         * @return string HTML <a> link to Special:Revisiondelete, wrapped in a
         * span to allow for customization of appearance with CSS
         */
-       public function revDeleteLink( $query = array(), $restricted = false ) {
+       public function revDeleteLink( $query = array(), $restricted = false, $delete = true ) {
                $sp = SpecialPage::getTitleFor( 'Revisiondelete' );
-               $text = wfMsgHtml( 'rev-delundel' );
+               $text = $delete ? wfMsgHtml( 'rev-delundel' ) : wfMsgHtml( 'rev-showdeleted' );
                $tag = $restricted ? 'strong' : 'span';
                $link = $this->link( $sp, $text, array(), $query, array( 'known', 'noclasses' ) );
                return Xml::tags( $tag, array( 'class' => 'mw-revdelundel-link' ), "($link)" );
        }
+       
+       /**
+        * Creates a dead (show/hide) link for deleting revisions/log entries
+        *
+        * @param bool $delete Set to true to use (show/hide) rather than (show)
+        *
+        * @return string HTML text wrapped in a span to allow for customization
+        * of appearance with CSS
+        */
+       public function revDeleteLinkDisabled( $delete = true ) {
+               $text = $delete ? wfMsgHtml( 'rev-delundel' ) : wfMsgHtml( 'rev-showdeleted' );
+               return Xml::tags( 'span', array( 'class' => 'mw-revdelundel-link' ), "($text)" );
+       }
 
        /* Deprecated methods */
 
index fcd86e4..3510988 100644 (file)
@@ -39,7 +39,7 @@ class LogEventsList {
                // Precache various messages
                if( !isset( $this->message ) ) {
                        $messages = array( 'revertmerge', 'protect_change', 'unblocklink', 'change-blocklink',
-                               'revertmove', 'undeletelink', 'undeleteviewlink', 'revdel-restore', 'rev-delundel', 'hist', 'diff',
+                               'revertmove', 'undeletelink', 'undeleteviewlink', 'revdel-restore', 'hist', 'diff',
                                'pipe-separator' );
                        foreach( $messages as $msg ) {
                                $this->message[$msg] = wfMsgExt( $msg, array( 'escapenoentities' ) );
@@ -507,22 +507,24 @@ class LogEventsList {
         * @return string
         */
        private function getShowHideLinks( $row ) {
+               global $wgUser;
+               if( $row->log_type == 'suppress' ) {
+                       return ''; // No one can hide items from the oversight log
+               }
+               $canHide = $wgUser->isAllowed( 'deleterevision' );
                // If event was hidden from sysops
                if( !self::userCan( $row, LogPage::DELETED_RESTRICTED ) ) {
-                       $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
-                               '(' . $this->message['rev-delundel'] . ')' );
-               } else if( $row->log_type == 'suppress' ) {
-                       $del = ''; // No one should be hiding from the oversight log
+                       $del = $this->skin->revDeleteLinkDisabled( $canHide );
                } else {
                        $target = SpecialPage::getTitleFor( 'Log', $row->log_type );
                        $page = Title::makeTitle( $row->log_namespace, $row->log_title );
                        $query = array(
                                'target' => $target->getPrefixedDBkey(),
-                               'type' => 'logging',
-                               'ids' => $row->log_id,
+                               'type'   => 'logging',
+                               'ids'    => $row->log_id,
                        );
                        $del = $this->skin->revDeleteLink( $query,
-                               self::isDeleted( $row, LogPage::DELETED_RESTRICTED ) );
+                               self::isDeleted( $row, LogPage::DELETED_RESTRICTED ), $canHide );
                }
                return $del;
        }
index 030ade1..2618635 100644 (file)
@@ -315,34 +315,34 @@ CONTROL;
                $rdel = ''; $ldel = '';
                # Handle RevisionDelete links...
                if( $wgUser->isAllowed( 'deletedhistory' ) ) {
+                       $canHide = $wgUser->isAllowed( 'deleterevision' );
                        // Don't show useless link to people who cannot hide revisions
-                       if( $this->mOldRev->getVisibility() || $wgUser->isAllowed( 'deleterevision' ) ) {
+                       if( $canHide || $this->mOldRev->getVisibility() ) {
                                if( !$this->mOldRev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                                       // If revision was hidden from sysops
-                                       $ldel = Xml::tags( 'span', array( 'class' => 'mw-revdelundel-link' ),
-                                               '(' . wfMsgHtml( 'rev-delundel' ) . ')' );
+                                       $ldel = $sk->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                                } else {
                                        $query = array( 
                                                'type' => 'revision',
                                                'target' => $this->mOldRev->mTitle->getPrefixedDbkey(),
                                                'ids' => $this->mOldRev->getId()
                                        );
-                                       $ldel = $sk->revDeleteLink( $query, $this->mOldRev->isDeleted( Revision::DELETED_RESTRICTED ) );
+                                       $ldel = $sk->revDeleteLink( $query,
+                                               $this->mOldRev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
                                }
                                $ldel = "&nbsp;&nbsp;&nbsp;$ldel ";
                        }
                        // Don't show useless link to people who cannot hide revisions
                        if( $this->mNewRev->getVisibility() || $wgUser->isAllowed( 'deleterevision' ) ) {
                                if( !$this->mNewRev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                                       // If revision was hidden from sysops
-                                       $rdel = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), '('.wfMsgHtml( 'rev-delundel' ).')' );
+                                       $rdel = $sk->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                                } else {
                                        $query = array( 
                                                'type' => 'revision',
                                                'target' =>  $this->mNewRev->mTitle->getPrefixedDbkey(),
                                                'ids' => $this->mNewRev->getId()
                                        );
-                                       $rdel = $sk->revDeleteLink( $query, $this->mNewRev->isDeleted( Revision::DELETED_RESTRICTED ) );
+                                       $rdel = $sk->revDeleteLink( $query,
+                                               $this->mNewRev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
                                }
                                $rdel = "&nbsp;&nbsp;&nbsp;$rdel ";
                        }
index 6674832..0663d53 100644 (file)
@@ -622,20 +622,20 @@ class ContribsPager extends ReverseChronologicalPager {
                }
 
                // Don't show useless link to people who cannot hide revisions
-               if( $wgUser->isAllowed('deleterevision') || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
-                       // If revision was hidden from sysops
+               $canHide = $wgUser->isAllowed( 'deleterevision' );
+               if( $canHide || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                               $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
-                                       wfMsg( 'parentheses', $this->messages['rev-delundel'] ) ) . ' ';
-                       // Otherwise, show the link...
+                               $del = $this->mSkin->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                        } else {
                                $query = array(
-                                       'type' => 'revision',
+                                       'type'   => 'revision',
                                        'target' => $page->getPrefixedDbkey(),
-                                       'ids' => $rev->getId() );
+                                       'ids'    => $rev->getId()
+                               );
                                $del = $this->mSkin->revDeleteLink( $query,
-                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ) ) . ' ';
+                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
                        }
+                       $del .= ' ';
                } else {
                        $del = '';
                }
index 3a7d027..aa6cd5f 100644 (file)
@@ -190,20 +190,18 @@ class DeletedContribsPager extends IndexPager {
                        $mflag = '';
                }
                
-               // Don't show useless link to people who cannot hide revisions
-               if( $wgUser->isAllowed('deleterevision') || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
-                       // If revision was hidden from sysops
+               // Revision delete link
+               $canHide = $wgUser->isAllowed( 'deleterevision' );
+               if( $canHide || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                               $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
-                                       '(' . $this->message['rev-delundel'] . ')' ) . ' ';
-                       // Otherwise, show the link...
+                               $del = $this->mSkin->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                        } else {
                                $query = array(
                                        'type' => 'archive',
                                        'target' => $page->getPrefixedDbkey(),
                                        'ids' => $rev->getTimestamp() );
                                $del = $this->mSkin->revDeleteLink( $query,
-                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ) ) . ' ';
+                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide ) . ' ';
                        }
                } else {
                        $del = '';
index 0733d05..12be578 100644 (file)
@@ -783,25 +783,25 @@ class UndeleteForm {
                } else {
                        $openDiv = '<div id="mw-undelete-revision">';
                }
-               
-               $revdlink = '';
-               // Diffs already have revision delete links
-               if( !$this->mDiff && $wgUser->isAllowed( 'deletedhistory' ) ) {
-                       // Don't show useless link to people who cannot hide revisions
-                       if( !$rev->getVisibility() && !$wgUser->isAllowed( 'deleterevision' ) ) {
-                               $revdlink = '';
-                       // If revision was hidden from sysops
-                       } else if( !$rev->userCan(Revision::DELETED_RESTRICTED ) ) {
-                               $revdlink = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
-                                       '('.wfMsgHtml('rev-delundel').')' );
+
+               // Revision delete links
+               $canHide = $wgUser->isAllowed( 'deleterevision' );
+               if( $this->mDiff ) {
+                       $revdlink = ''; // diffs already have revision delete links
+               } else if( $canHide || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
+                       if( !$rev->userCan(Revision::DELETED_RESTRICTED ) ) {
+                               $revdlink = $skin->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                        } else {
                                $query = array(
                                        'type'   => 'archive',
                                        'target' => $this->mTargetObj->getPrefixedDBkey(),
                                        'ids'    => $rev->getTimestamp()
                                );
-                               $revdlink = $skin->revDeleteLink( $query, $rev->isDeleted( File::DELETED_RESTRICTED ) );
+                               $revdlink = $skin->revDeleteLink( $query,
+                                       $rev->isDeleted( File::DELETED_RESTRICTED ), $canHide );
                        }
+               } else {
+                       $revdlink = '';
                }
 
                $wgOut->addHTML( $openDiv . $revdlink . wfMsgWikiHtml( 'undelete-revision', $link, $time, $user, $d, $t ) . '</div>' );
@@ -899,20 +899,20 @@ class UndeleteForm {
                        $targetPage = $rev->getTitle();
                        $targetQuery = array( 'oldid' => $rev->getId() );
                }
-               // Add show/hide link if available. Don't show useless link to people who cannot hide revisions.
-               if( $wgUser->isAllowed('deleterevision') || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
-                       // If revision was hidden from sysops
+               // Add show/hide deletion links if available
+               $canHide = $wgUser->isAllowed( 'deleterevision' );
+               if( $canHide || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
+                       $del = ' ';
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                               $del = ' ' . Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
-                                       '(' . wfMsgHtml('rev-delundel') . ')' );
-                       // Otherwise, show the link...
+                               $del .= $sk->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                        } else {
                                $query = array( 
-                                       'type' => 'archive',
+                                       'type'   => 'archive',
                                        'target' => $this->mTargetObj->getPrefixedDbkey(),
-                                       'ids' => $rev->getTimestamp() );
-                               $del = ' ' . $sk->revDeleteLink( $query,
-                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ) );
+                                       'ids'    => $rev->getTimestamp()
+                               );
+                               $del .= $sk->revDeleteLink( $query,
+                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
                        }
                } else {
                        $del = '';
@@ -1200,19 +1200,19 @@ class UndeleteForm {
                }
                // Edit summary
                $comment = $sk->revComment( $rev );
-               // Show/hide link. // Don't show useless link to people who cannot hide revisions.
-               if( $wgUser->isAllowed('deleterevision') || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
+               // Revision delete links
+               $canHide = $wgUser->isAllowed( 'deleterevision' );
+               if( $canHide || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                       // If revision was hidden from sysops
-                               $revdlink = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
-                                       '('.wfMsgHtml('rev-delundel').')' );
+                               $revdlink = $sk->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                        } else {
                                $query = array(
-                                       'type' => 'archive',
+                                       'type'   => 'archive',
                                        'target' => $this->mTargetObj->getPrefixedDBkey(),
-                                       'ids' => $ts
+                                       'ids'    => $ts
                                );
-                               $revdlink = $sk->revDeleteLink( $query, $rev->isDeleted( Revision::DELETED_RESTRICTED ) );
+                               $revdlink = $sk->revDeleteLink( $query,
+                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide );
                        }
                } else {
                        $revdlink = '';
@@ -1246,20 +1246,22 @@ class UndeleteForm {
                        ')';
                $data = htmlspecialchars( $data );
                $comment = $this->getFileComment( $file, $sk );
-               $revdlink = '';
-               // Add show/hide link if available. Don't show useless link to people who cannot hide revisions.
-               if( $wgUser->isAllowed('deleterevision') || ($file->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
+               // Add show/hide deletion links if available
+               $canHide = $wgUser->isAllowed( 'deleterevision' );
+               if( $canHide || ($file->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
                        if( !$file->userCan(File::DELETED_RESTRICTED ) ) {
-                       // If revision was hidden from sysops
-                               $revdlink = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), '('.wfMsgHtml('rev-delundel').')' );
+                               $revdlink = $sk->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
                        } else {
                                $query = array(
                                        'type' => 'filearchive',
                                        'target' => $this->mTargetObj->getPrefixedDBkey(),
                                        'ids' => $row->fa_id
                                );
-                               $revdlink = $sk->revDeleteLink( $query, $file->isDeleted( File::DELETED_RESTRICTED ) );
+                               $revdlink = $sk->revDeleteLink( $query,
+                                       $file->isDeleted( File::DELETED_RESTRICTED ), $canHide );
                        }
+               } else {
+                       $revdlink = '';
                }
                return "<li>$checkBox $revdlink $pageLink . . $userLink $data $comment</li>\n";
        }
index 16ac1bc..d815104 100644 (file)
@@ -1450,6 +1450,7 @@ As an administrator you can view this diff; there may be details in the [{{fullu
 'rev-suppressed-diff-view'    => "One of the revisions of this diff has been '''suppressed'''.
 As an administrator you can view this diff; there may be details in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
 'rev-delundel'                => 'show/hide',
+'rev-showdeleted'             => 'show',
 'revisiondelete'              => 'Delete/undelete revisions',
 'revdelete-nooldid-title'     => 'Invalid target revision',
 'revdelete-nooldid-text'      => 'You have either not specified a target revision(s) to perform this
index 6effdb4..05ac55a 100644 (file)
@@ -669,6 +669,7 @@ $wgMessageStructure = array(
                'rev-deleted-diff-view',
                'rev-suppressed-diff-view',
                'rev-delundel',
+               'rev-showdeleted',
                'revisiondelete',
                'revdelete-nooldid-title',
                'revdelete-nooldid-text',