* Split off deletedrevision (view only) right and give it to sysops
authorAaron Schulz <aaron@users.mediawiki.org>
Mon, 28 Sep 2009 03:09:48 +0000 (03:09 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Mon, 28 Sep 2009 03:09:48 +0000 (03:09 +0000)
* Allow show/hide link on top revision just like history

16 files changed:
includes/Article.php
includes/ChangesList.php
includes/DefaultSettings.php
includes/HistoryPage.php
includes/ImagePage.php
includes/LogEventsList.php
includes/Revision.php
includes/User.php
includes/diff/DifferenceEngine.php
includes/filerepo/ArchivedFile.php
includes/filerepo/OldLocalFile.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialUndelete.php
skins/common/shared.css

index 443bce3..8287682 100644 (file)
@@ -3429,17 +3429,14 @@ class Article {
                        );
 
                $cdel='';
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
-                       $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-                       if( $revision->isCurrent() ) {
-                       // We don't handle top deleted edits too well
-                               $cdel = wfMsgHtml( 'rev-delundel' );
-                       } else if( !$revision->userCan( Revision::DELETED_RESTRICTED ) ) {
+               // Don't show useless link to people who cannot hide revisions
+               if( $wgUser->isAllowed('deleterevision') || ($revision->getVisibility() && $wgUser->isAllowed('deletedrevision')) ) {
+                       if( !$revision->userCan( Revision::DELETED_RESTRICTED ) ) {
                        // If revision was hidden from sysops
                                $cdel = wfMsgHtml( 'rev-delundel' );
                        } else {
                                $cdel = $sk->link(
-                                       $revdel,
+                                       SpecialPage::getTitleFor( 'Revisiondelete' ),
                                        wfMsgHtml('rev-delundel'),
                                        array(),
                                        array(
index 91bf212..dab30b6 100644 (file)
@@ -450,7 +450,7 @@ class ChangesList {
                        global $wgUser;
                        $permission = ( $rc->mAttribs['rc_deleted'] & Revision::DELETED_RESTRICTED ) == Revision::DELETED_RESTRICTED
                                ? 'suppressrevision'
-                               : 'deleterevision';
+                               : 'deletedrevision';
                        wfDebug( "Checking for $permission due to $field match on {$rc->mAttribs['rc_deleted']}\n" );
                        return $wgUser->isAllowed( $permission );
                } else {
index e90b156..d86f1cb 100644 (file)
@@ -1354,7 +1354,8 @@ $wgGroupPermissions['sysop']['createaccount']    = true;
 $wgGroupPermissions['sysop']['delete']           = true;
 $wgGroupPermissions['sysop']['bigdelete']        = true; // can be separately configured for pages with > $wgDeleteRevisionsLimit revs
 $wgGroupPermissions['sysop']['deletedhistory']   = true; // can view deleted history entries, but not see or restore the text
-$wgGroupPermissions['sysop']['deletedcontent']   = true; // can view deleted content
+$wgGroupPermissions['sysop']['deletedcontent']   = true; // can view deleted revision text
+$wgGroupPermissions['sysop']['deletedrevision']  = true; // can view hidden revision items (user/comment/text)
 $wgGroupPermissions['sysop']['undelete']         = true;
 $wgGroupPermissions['sysop']['editinterface']    = true;
 $wgGroupPermissions['sysop']['editusercss']      = true;
@@ -1605,7 +1606,7 @@ $wgCacheEpoch = '20030516000000';
  * to ensure that client-side caches do not keep obsolete copies of global
  * styles.
  */
-$wgStyleVersion = '240';
+$wgStyleVersion = '241';
 
 
 # Server-side caching:
index 2795802..9bc58ba 100644 (file)
@@ -351,7 +351,7 @@ class HistoryPager extends ReverseChronologicalPager {
                $s .= Xml::hidden( 'title', $this->title->getPrefixedDbKey() ) . "\n";
 
                $this->buttons = '<div>';
-               if( $wgUser->isAllowed('deleterevision') ) {
+               if( $wgUser->isAllowed('deletedrevision') ) {
                        $this->buttons .= Xml::element( 'button',
                                array(
                                        'type' => 'submit',
@@ -464,9 +464,12 @@ class HistoryPager extends ReverseChronologicalPager {
 
                $s = "($curlink) ($lastlink) $diffButtons";
 
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
+               if( $wgUser->isAllowed( 'deletedrevision' ) ) {
+                       // Don't show useless link to people who cannot hide revisions
+                       if( !$rev->getVisibility() && !$wgUser->isAllowed( 'deleterevision' ) ) {
+                               $del = Xml::check( 'deleterevisions', false, array('class' => 'mw-revdelundel-hidden') );
                        // If revision was hidden from sysops
-                       if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
+                       } else if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
                                $del = Xml::check( 'deleterevisions', false, array('disabled' => 'disabled') );
                        // Otherwise, show the link...
                        } else {
index 3ff18dc..399ee7d 100644 (file)
@@ -821,7 +821,7 @@ class ImageHistoryList {
                        . $navLinks . "\n"
                        . Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
                        . '<tr><td></td>'
-                       . ( $this->current->isLocal() && ($wgUser->isAllowed('delete') || $wgUser->isAllowed('deleterevision') ) ? '<td></td>' : '' )
+                       . ( $this->current->isLocal() && ($wgUser->isAllowed('delete') || $wgUser->isAllowed('deletedrevision') ) ? '<td></td>' : '' )
                        . '<th>' . wfMsgHtml( 'filehist-datetime' ) . '</th>'
                        . ( $this->showThumb ? '<th>' . wfMsgHtml( 'filehist-thumb' ) . '</th>' : '' )
                        . '<th>' . wfMsgHtml( 'filehist-dimensions' ) . '</th>'
@@ -847,7 +847,7 @@ class ImageHistoryList {
                $row = $css = $selected = '';
 
                // Deletion link
-               if( $local && ($wgUser->isAllowed('delete') || $wgUser->isAllowed('deleterevision') ) ) {
+               if( $local && ($wgUser->isAllowed('delete') || $wgUser->isAllowed('deletedrevision') ) ) {
                        $row .= '<td>';
                        # Link to remove from history
                        if( $wgUser->isAllowed( 'delete' ) ) {
@@ -860,18 +860,19 @@ class ImageHistoryList {
                                        array(), $q, array( 'known' )
                                );
                        }
-                       # Link to hide content
-                       if( $wgUser->isAllowed( 'deleterevision' ) ) {
+                       # Link to hide content. Don't show useless link to people who cannot hide revisions.
+                       if( $wgUser->isAllowed('deleterevision') || ($wgUser->isAllowed('deletedrevision') && $file->getVisibility()) ) {
                                if( $wgUser->isAllowed('delete') ) {
                                        $row .= '<br/>';
                                }
-                               $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
                                // If file is top revision or locked from this user, don't link
                                if( $iscur || !$file->userCan(File::DELETED_RESTRICTED) ) {
                                        $del = wfMsgHtml( 'rev-delundel' );
                                } else {
                                        list( $ts, $name ) = explode( '!', $img, 2 );
-                                       $del = $this->skin->link( $revdel, wfMsgHtml( 'rev-delundel' ),
+                                       $del = $this->skin->link(
+                                               SpecialPage::getTitleFor( 'Revisiondelete' ),
+                                               wfMsgHtml( 'rev-delundel' ),
                                                array(),
                                                array( 
                                                        'type' => 'oldimage',
index 77f0f8a..d05be83 100644 (file)
@@ -284,8 +284,11 @@ class LogEventsList {
                $paramArray = LogPage::extractParams( $row->log_params );
                $revert = $del = '';
                // Some user can hide log items and have review links
-               if( !($this->flags & self::NO_ACTION_LINK) && $wgUser->isAllowed( 'deleterevision' ) ) {
-                       $del = $this->getShowHideLinks( $row ) . ' ';
+               if( !($this->flags & self::NO_ACTION_LINK) && $wgUser->isAllowed( 'deletedrevision' ) ) {
+                       // Don't show useless link to people who cannot hide revisions
+                       if( $row->log_deleted || $wgUser->isAllowed( 'deleterevision' ) ) {
+                               $del = $this->getShowHideLinks( $row ) . ' ';
+                       }
                }
                // Add review links and such...
                if( ($this->flags & self::NO_ACTION_LINK) || ($row->log_deleted & LogPage::DELETED_ACTION) ) {
@@ -378,7 +381,7 @@ class LogEventsList {
                                array( 'known', 'noclasses' )
                        ) . ')';
                // If an edit was hidden from a page give a review link to the history
-               } else if( self::typeAction($row,array('delete','suppress'),'revision','deleterevision') ) {
+               } else if( self::typeAction($row,array('delete','suppress'),'revision','deletedrevision') ) {
                        if( count($paramArray) >= 2 ) {
                                // Different revision types use different URL params...
                                $key = $paramArray[0];
@@ -431,7 +434,7 @@ class LogEventsList {
                                $revert = wfMsg( 'parentheses', $wgLang->pipeList( $revert ) );
                        }
                // Hidden log items, give review link
-               } else if( self::typeAction($row,array('delete','suppress'),'event','deleterevision') ) {
+               } else if( self::typeAction($row,array('delete','suppress'),'event','deletedrevision') ) {
                        if( count($paramArray) >= 1 ) {
                                $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
                                // $paramArray[1] is a CSV of the IDs
@@ -548,7 +551,7 @@ class LogEventsList {
                        global $wgUser;
                        $permission = ( $row->log_deleted & LogPage::DELETED_RESTRICTED ) == LogPage::DELETED_RESTRICTED
                                ? 'suppressrevision'
-                               : 'deleterevision';
+                               : 'deletedrevision';
                        wfDebug( "Checking for $permission due to $field match on $row->log_deleted\n" );
                        return $wgUser->isAllowed( $permission );
                } else {
@@ -804,7 +807,7 @@ class LogPager extends ReverseChronologicalPager {
                        global $wgUser;
                        $this->mConds['log_user'] = $userid;
                        // Paranoia: avoid brute force searches (bug 17342)
-                       if( !$wgUser->isAllowed( 'deleterevision' ) ) {
+                       if( !$wgUser->isAllowed( 'deletedrevision' ) ) {
                                $this->mConds[] = $this->mDb->bitAnd('log_deleted', LogPage::DELETED_USER) . ' = 0';
                        } else if( !$wgUser->isAllowed( 'suppressrevision' ) ) {
                                $this->mConds[] = $this->mDb->bitAnd('log_deleted', LogPage::SUPPRESSED_USER) .
@@ -851,7 +854,7 @@ class LogPager extends ReverseChronologicalPager {
                        $this->mConds['log_title'] = $title->getDBkey();
                }
                // Paranoia: avoid brute force searches (bug 17342)
-               if( !$wgUser->isAllowed( 'deleterevision' ) ) {
+               if( !$wgUser->isAllowed( 'deletedrevision' ) ) {
                        $this->mConds[] = $this->mDb->bitAnd('log_deleted', LogPage::DELETED_ACTION) . ' = 0';
                } else if( !$wgUser->isAllowed( 'suppressrevision' ) ) {
                        $this->mConds[] = $this->mDb->bitAnd('log_deleted', LogPage::SUPPRESSED_ACTION) .
index 8ef3393..9ec8a89 100644 (file)
@@ -981,7 +981,7 @@ class Revision {
                        global $wgUser;
                        $permission = ( $this->mDeleted & self::DELETED_RESTRICTED ) == self::DELETED_RESTRICTED
                                ? 'suppressrevision'
-                               : 'deleterevision';
+                               : 'deletedrevision';
                        wfDebug( "Checking for $permission due to $field match on $this->mDeleted\n" );
                        return $wgUser->isAllowed( $permission );
                } else {
index 2e1e14a..a138519 100644 (file)
@@ -143,6 +143,7 @@ class User {
                'delete',
                'deletedhistory',
                'deletedcontent',
+               'deletedrevision',
                'deleterevision',
                'edit',
                'editinterface',
index 8e6d2a9..50f6046 100644 (file)
@@ -318,31 +318,38 @@ CONTROL;
                }
 
                $rdel = ''; $ldel = '';
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
-                       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' ) . ')' );
-                       } else {
-                               $query = array( 
-                                       'type' => 'revision',
-                                       'target' => $this->mOldRev->mTitle->getPrefixedDbkey(),
-                                       'ids' => $this->mOldRev->getId()
-                               );
-                               $ldel = $sk->revDeleteLink( $query, $this->mOldRev->isDeleted( Revision::DELETED_RESTRICTED ) );
+               if( $wgUser->isAllowed( 'deletedrevision' ) ) {
+                       // Don't show useless link to people who cannot hide revisions
+                       if( $this->mOldRev->getVisibility() || $wgUser->isAllowed( 'deleterevision' ) ) {
+                               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' ) . ')' );
+                               } 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 = "&nbsp;&nbsp;&nbsp;$ldel ";
                        }
-                       $ldel = "&nbsp;&nbsp;&nbsp;$ldel ";
-                       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' ).')' );
-                       } else {
-                               $query = array( 
-                                       'type' => 'revision',
-                                       'target' =>  $this->mNewRev->mTitle->getPrefixedDbkey(),
-                                       'ids' => $this->mNewRev->getId()
-                               );
-                               $rdel = $sk->revDeleteLink( $query, $this->mNewRev->isDeleted( Revision::DELETED_RESTRICTED ) );
+                       // 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' ).')' );
+                               } 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 = "&nbsp;&nbsp;&nbsp;$rdel ";
                        }
-                       $rdel = "&nbsp;&nbsp;&nbsp;$rdel ";
                }
 
                $oldHeader = '<div id="mw-diff-otitle1"><strong>'.$this->mOldtitle.'</strong></div>' .
index 4aeeb0c..1ec0753 100644 (file)
@@ -372,7 +372,7 @@ class ArchivedFile
                        global $wgUser;
                        $permission = ( $this->deleted & File::DELETED_RESTRICTED ) == File::DELETED_RESTRICTED
                                ? 'suppressrevision'
-                               : 'deleterevision';
+                               : 'deletedrevision';
                        wfDebug( "Checking for $permission due to $field match on $this->deleted\n" );
                        return $wgUser->isAllowed( $permission );
                } else {
index 2d249d7..aaa7c44 100644 (file)
@@ -199,7 +199,7 @@ class OldLocalFile extends LocalFile {
                        global $wgUser;
                        $permission = ( $this->deleted & File::DELETED_RESTRICTED ) == File::DELETED_RESTRICTED
                                ? 'suppressrevision'
-                               : 'deleterevision';
+                               : 'deletedrevision';
                        wfDebug( "Checking for $permission due to $field match on $this->mDeleted\n" );
                        return $wgUser->isAllowed( $permission );
                } else {
index 73a6549..78a5d49 100644 (file)
@@ -461,7 +461,7 @@ class ContribsPager extends ReverseChronologicalPager {
                
                $conds = array_merge( $userCond, $this->getNamespaceCond() );
                // Paranoia: avoid brute force searches (bug 17342)
-               if( !$wgUser->isAllowed( 'deleterevision' ) ) {
+               if( !$wgUser->isAllowed( 'deletedrevision' ) ) {
                        $conds[] = $this->mDb->bitAnd('rev_deleted',Revision::DELETED_USER) . ' = 0';
                } else if( !$wgUser->isAllowed( 'suppressrevision' ) ) {
                        $conds[] = $this->mDb->bitAnd('rev_deleted',Revision::SUPPRESSED_USER) .
@@ -632,7 +632,8 @@ class ContribsPager extends ReverseChronologicalPager {
                        $mflag = '';
                }
 
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
+               // Don't show useless link to people who cannot hide revisions
+               if( $wgUser->isAllowed('deleterevision') || ($rev->getVisibility() && $wgUser->isAllowed('deletedrevision')) ) {
                        // If revision was hidden from sysops
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
                                $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
index 87bd76c..1d44376 100644 (file)
@@ -31,7 +31,7 @@ class DeletedContribsPager extends IndexPager {
                list( $index, $userCond ) = $this->getUserCond();
                $conds = array_merge( $userCond, $this->getNamespaceCond() );
                // Paranoia: avoid brute force searches (bug 17792)
-               if( !$wgUser->isAllowed( 'deleterevision' ) ) {
+               if( !$wgUser->isAllowed( 'deletedrevision' ) ) {
                        $conds[] = $this->mDb->bitAnd('ar_deleted',Revision::DELETED_USER) . ' = 0';
                } else if( !$wgUser->isAllowed( 'suppressrevision' ) ) {
                        $conds[] = $this->mDb->bitAnd('ar_deleted',Revision::SUPPRESSED_USER) .
@@ -189,8 +189,9 @@ class DeletedContribsPager extends IndexPager {
                } else {
                        $mflag = '';
                }
-
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
+               
+               // Don't show useless link to people who cannot hide revisions
+               if( $wgUser->isAllowed('deleterevision') || ($rev->getVisibility() && $wgUser->isAllowed('deletedrevision')) ) {
                        // If revision was hidden from sysops
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
                                $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
index aeb0e3d..24fd276 100644 (file)
@@ -90,18 +90,19 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        );
 
        public function __construct() {
-               parent::__construct( 'Revisiondelete', 'deleterevision' );
+               parent::__construct( 'Revisiondelete', 'deletedrevision' );
        }
 
        public function execute( $par ) {
                global $wgOut, $wgUser, $wgRequest;
-               if( !$wgUser->isAllowed( 'deleterevision' ) ) {
-                       $wgOut->permissionRequired( 'deleterevision' );
+               if( !$wgUser->isAllowed( 'deletedrevision' ) ) {
+                       $wgOut->permissionRequired( 'deletedrevision' );
                        return;
                } else if( wfReadOnly() ) {
                        $wgOut->readOnlyPage();
                        return;
                }
+               $this->mIsAllowed = $wgUser->isAllowed('deleterevision'); // for changes
                $this->skin = $wgUser->getSkin();
                $this->setHeaders();
                $this->outputHeader();
@@ -175,7 +176,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                }
 
                # Either submit or create our form
-               if( $this->submitClicked ) {
+               if( $this->mIsAllowed && $this->submitClicked ) {
                        $this->submit( $wgRequest );
                } else {
                        $this->showForm();
@@ -359,42 +360,47 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                // Normal sysops can always see what they did, but can't always change it
                if( !$UserAllowed ) return;
 
-               $out =  Xml::openElement( 'form', array( 'method' => 'post',
-                               'action' => $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) ), 
-                               'id' => 'mw-revdel-form-revisions' ) ) .
-                       Xml::fieldset( wfMsg( 'revdelete-legend' ) ) .
-                       $this->buildCheckBoxes( $bitfields ) .
-                       Xml::openElement( 'table' ) .
-                       "<tr>\n" .
-                               '<td class="mw-label">' .
-                                       Xml::label( wfMsg( 'revdelete-log' ), 'wpRevDeleteReasonList' ) .
-                               '</td>' .
-                               '<td class="mw-input">' .
-                                       Xml::listDropDown( 'wpRevDeleteReasonList',
-                                               wfMsgForContent( 'revdelete-reason-dropdown' ),
-                                               wfMsgForContent( 'revdelete-reasonotherlist' ), '', 'wpReasonDropDown', 1
-                                       ) .
-                               '</td>' .
-                       "</tr><tr>\n" .
-                               '<td class="mw-label">' .
-                                       Xml::label( wfMsg( 'revdelete-otherreason' ), 'wpReason' ) .
-                               '</td>' .
-                               '<td class="mw-input">' .
-                                       Xml::input( 'wpReason', 60, $this->otherReason, array( 'id' => 'wpReason' ) ) .
-                               '</td>' .
-                       "</tr><tr>\n" .
-                               '<td></td>' .
-                               '<td class="mw-submit">' .
-                                       Xml::submitButton( wfMsg( 'revdelete-submit' ), array( 'name' => 'wpSubmit' ) ) .
-                               '</td>' .
-                       "</tr>\n" .
-                       Xml::closeElement( 'table' ) .
-                       Xml::hidden( 'wpEditToken', $wgUser->editToken() ) .
-                       Xml::hidden( 'target', $this->targetObj->getPrefixedText() ) .
-                       Xml::hidden( 'type', $this->typeName ) .
-                       Xml::hidden( 'ids', implode( ',', $this->ids ) ) .
-                       Xml::closeElement( 'fieldset' ) . "\n";
-
+               // Show form if the user can submit
+               if( $this->mIsAllowed ) {
+                       $out = Xml::openElement( 'form', array( 'method' => 'post',
+                                       'action' => $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) ), 
+                                       'id' => 'mw-revdel-form-revisions' ) ) .
+                               Xml::fieldset( wfMsg( 'revdelete-legend' ) ) .
+                               $this->buildCheckBoxes( $bitfields ) .
+                               Xml::openElement( 'table' ) .
+                               "<tr>\n" .
+                                       '<td class="mw-label">' .
+                                               Xml::label( wfMsg( 'revdelete-log' ), 'wpRevDeleteReasonList' ) .
+                                       '</td>' .
+                                       '<td class="mw-input">' .
+                                               Xml::listDropDown( 'wpRevDeleteReasonList',
+                                                       wfMsgForContent( 'revdelete-reason-dropdown' ),
+                                                       wfMsgForContent( 'revdelete-reasonotherlist' ), '', 'wpReasonDropDown', 1
+                                               ) .
+                                       '</td>' .
+                               "</tr><tr>\n" .
+                                       '<td class="mw-label">' .
+                                               Xml::label( wfMsg( 'revdelete-otherreason' ), 'wpReason' ) .
+                                       '</td>' .
+                                       '<td class="mw-input">' .
+                                               Xml::input( 'wpReason', 60, $this->otherReason, array( 'id' => 'wpReason' ) ) .
+                                       '</td>' .
+                               "</tr><tr>\n" .
+                                       '<td></td>' .
+                                       '<td class="mw-submit">' .
+                                               Xml::submitButton( wfMsg( 'revdelete-submit' ), array( 'name' => 'wpSubmit' ) ) .
+                                       '</td>' .
+                               "</tr>\n" .
+                               Xml::closeElement( 'table' ) .
+                               Xml::hidden( 'wpEditToken', $wgUser->editToken() ) .
+                               Xml::hidden( 'target', $this->targetObj->getPrefixedText() ) .
+                               Xml::hidden( 'type', $this->typeName ) .
+                               Xml::hidden( 'ids', implode( ',', $this->ids ) ) .
+                               Xml::closeElement( 'fieldset' ) . "\n";
+               } else {
+                       $out = '';
+               }
+               // Show link to edit the dropdown reasons
                if( $wgUser->isAllowed( 'editinterface' ) ) {
                        $title = Title::makeTitle( NS_MEDIAWIKI, 'revdelete-reason-dropdown' );
                        $link = $wgUser->getSkin()->link(
@@ -405,8 +411,9 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        );
                        $out .= Xml::tags( 'p', array( 'class' => 'mw-revdel-editreasons' ), $link ) . "\n";
                }
-               $out .= Xml::closeElement( 'form' ) . "\n";
-
+               if( $this->mIsAllowed ) {
+                       $out .= Xml::closeElement( 'form' ) . "\n";
+               }
                $wgOut->addHTML( $out );
        }
 
index 3ba7613..226cf7a 100644 (file)
@@ -779,9 +779,12 @@ class UndeleteForm {
                
                $revdlink = '';
                // Diffs already have revision delete links
-               if( !$this->mDiff && $wgUser->isAllowed( 'deleterevision' ) ) {
-                       if( !$rev->userCan(Revision::DELETED_RESTRICTED ) ) {
+               if( !$this->mDiff && $wgUser->isAllowed( 'deletedrevision' ) ) {
+                       // 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').')' );
                        } else {
@@ -889,8 +892,8 @@ class UndeleteForm {
                        $targetPage = $rev->getTitle();
                        $targetQuery = array( 'oldid' => $rev->getId() );
                }
-               // Add show/hide link if available
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
+               // 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('deletedrevision')) ) {
                        // If revision was hidden from sysops
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
                                $del = ' ' . Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
@@ -1190,8 +1193,8 @@ class UndeleteForm {
                }
                // Edit summary
                $comment = $sk->revComment( $rev );
-               // Show/hide link
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
+               // Show/hide link. // Don't show useless link to people who cannot hide revisions.
+               if( $wgUser->isAllowed('deleterevision') || ($rev->getVisibility() && $wgUser->isAllowed('deletedrevision')) ) {
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
                        // If revision was hidden from sysops
                                $revdlink = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
@@ -1237,7 +1240,8 @@ class UndeleteForm {
                $data = htmlspecialchars( $data );
                $comment = $this->getFileComment( $file, $sk );
                $revdlink = '';
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
+               // 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('deletedrevision')) ) {
                        if( !$file->userCan(File::DELETED_RESTRICTED ) ) {
                        // If revision was hidden from sysops
                                $revdlink = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), '('.wfMsgHtml('rev-delundel').')' );
index 8f46c5c..92b84c1 100644 (file)
@@ -541,6 +541,10 @@ span.mw-revdelundel-link,
 strong.mw-revdelundel-link {
        font-size: 90%;
 }
+span.mw-revdelundel-hidden,
+input.mw-revdelundel-hidden {
+       visibility: hidden;
+}
 
 /* feed links */
 a.feedlink {