From 942a84716ac9fd476342dc13cc9c0721382265c4 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Mon, 28 Sep 2009 03:09:48 +0000 Subject: [PATCH] * Split off deletedrevision (view only) right and give it to sysops * Allow show/hide link on top revision just like history --- includes/Article.php | 11 +-- includes/ChangesList.php | 2 +- includes/DefaultSettings.php | 5 +- includes/HistoryPage.php | 9 +- includes/ImagePage.php | 13 +-- includes/LogEventsList.php | 17 ++-- includes/Revision.php | 2 +- includes/User.php | 1 + includes/diff/DifferenceEngine.php | 53 ++++++----- includes/filerepo/ArchivedFile.php | 2 +- includes/filerepo/OldLocalFile.php | 2 +- includes/specials/SpecialContributions.php | 5 +- .../specials/SpecialDeletedContributions.php | 7 +- includes/specials/SpecialRevisiondelete.php | 91 ++++++++++--------- includes/specials/SpecialUndelete.php | 18 ++-- skins/common/shared.css | 4 + 16 files changed, 136 insertions(+), 106 deletions(-) diff --git a/includes/Article.php b/includes/Article.php index 443bce3a2a..8287682a8c 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -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( diff --git a/includes/ChangesList.php b/includes/ChangesList.php index 91bf212bb6..dab30b66a5 100644 --- a/includes/ChangesList.php +++ b/includes/ChangesList.php @@ -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 { diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index e90b156c2d..d86f1cbac9 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -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: diff --git a/includes/HistoryPage.php b/includes/HistoryPage.php index 27958024ea..9bc58baa30 100644 --- a/includes/HistoryPage.php +++ b/includes/HistoryPage.php @@ -351,7 +351,7 @@ class HistoryPager extends ReverseChronologicalPager { $s .= Xml::hidden( 'title', $this->title->getPrefixedDbKey() ) . "\n"; $this->buttons = '
'; - 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 { diff --git a/includes/ImagePage.php b/includes/ImagePage.php index 3ff18dc012..399ee7d3c7 100644 --- a/includes/ImagePage.php +++ b/includes/ImagePage.php @@ -821,7 +821,7 @@ class ImageHistoryList { . $navLinks . "\n" . Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n" . '' - . ( $this->current->isLocal() && ($wgUser->isAllowed('delete') || $wgUser->isAllowed('deleterevision') ) ? '' : '' ) + . ( $this->current->isLocal() && ($wgUser->isAllowed('delete') || $wgUser->isAllowed('deletedrevision') ) ? '' : '' ) . '' . wfMsgHtml( 'filehist-datetime' ) . '' . ( $this->showThumb ? '' . wfMsgHtml( 'filehist-thumb' ) . '' : '' ) . '' . wfMsgHtml( 'filehist-dimensions' ) . '' @@ -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 .= ''; # 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 .= '
'; } - $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', diff --git a/includes/LogEventsList.php b/includes/LogEventsList.php index 77f0f8a5ec..d05be83c4d 100644 --- a/includes/LogEventsList.php +++ b/includes/LogEventsList.php @@ -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) . diff --git a/includes/Revision.php b/includes/Revision.php index 8ef33938bd..9ec8a89dd9 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -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 { diff --git a/includes/User.php b/includes/User.php index 2e1e14a37f..a1385191b2 100644 --- a/includes/User.php +++ b/includes/User.php @@ -143,6 +143,7 @@ class User { 'delete', 'deletedhistory', 'deletedcontent', + 'deletedrevision', 'deleterevision', 'edit', 'editinterface', diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index 8e6d2a952c..50f60468fe 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -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 = "   $ldel "; } - $ldel = "   $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 = "   $rdel "; } - $rdel = "   $rdel "; } $oldHeader = '
'.$this->mOldtitle.'
' . diff --git a/includes/filerepo/ArchivedFile.php b/includes/filerepo/ArchivedFile.php index 4aeeb0c16d..1ec075333a 100644 --- a/includes/filerepo/ArchivedFile.php +++ b/includes/filerepo/ArchivedFile.php @@ -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 { diff --git a/includes/filerepo/OldLocalFile.php b/includes/filerepo/OldLocalFile.php index 2d249d7a04..aaa7c4469f 100644 --- a/includes/filerepo/OldLocalFile.php +++ b/includes/filerepo/OldLocalFile.php @@ -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 { diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index 73a6549ec8..78a5d49403 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -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' ), diff --git a/includes/specials/SpecialDeletedContributions.php b/includes/specials/SpecialDeletedContributions.php index 87bd76c5aa..1d4437613c 100644 --- a/includes/specials/SpecialDeletedContributions.php +++ b/includes/specials/SpecialDeletedContributions.php @@ -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' ), diff --git a/includes/specials/SpecialRevisiondelete.php b/includes/specials/SpecialRevisiondelete.php index aeb0e3d1c9..24fd276bb9 100644 --- a/includes/specials/SpecialRevisiondelete.php +++ b/includes/specials/SpecialRevisiondelete.php @@ -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' ) . - "\n" . - '' . - Xml::label( wfMsg( 'revdelete-log' ), 'wpRevDeleteReasonList' ) . - '' . - '' . - Xml::listDropDown( 'wpRevDeleteReasonList', - wfMsgForContent( 'revdelete-reason-dropdown' ), - wfMsgForContent( 'revdelete-reasonotherlist' ), '', 'wpReasonDropDown', 1 - ) . - '' . - "\n" . - '' . - Xml::label( wfMsg( 'revdelete-otherreason' ), 'wpReason' ) . - '' . - '' . - Xml::input( 'wpReason', 60, $this->otherReason, array( 'id' => 'wpReason' ) ) . - '' . - "\n" . - '' . - '' . - Xml::submitButton( wfMsg( 'revdelete-submit' ), array( 'name' => 'wpSubmit' ) ) . - '' . - "\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' ) . + "\n" . + '' . + Xml::label( wfMsg( 'revdelete-log' ), 'wpRevDeleteReasonList' ) . + '' . + '' . + Xml::listDropDown( 'wpRevDeleteReasonList', + wfMsgForContent( 'revdelete-reason-dropdown' ), + wfMsgForContent( 'revdelete-reasonotherlist' ), '', 'wpReasonDropDown', 1 + ) . + '' . + "\n" . + '' . + Xml::label( wfMsg( 'revdelete-otherreason' ), 'wpReason' ) . + '' . + '' . + Xml::input( 'wpReason', 60, $this->otherReason, array( 'id' => 'wpReason' ) ) . + '' . + "\n" . + '' . + '' . + Xml::submitButton( wfMsg( 'revdelete-submit' ), array( 'name' => 'wpSubmit' ) ) . + '' . + "\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 ); } diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index 3ba7613f42..226cf7a592 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -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').')' ); diff --git a/skins/common/shared.css b/skins/common/shared.css index 8f46c5c1a7..92b84c1737 100644 --- a/skins/common/shared.css +++ b/skins/common/shared.css @@ -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 { -- 2.20.1