From 90dcb3c1f2c4b03f2cb9358b40666af1eff88a99 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Fri, 30 Oct 2009 02:14:22 +0000 Subject: [PATCH] * bug 21267 change "show/hide" to "show", if user cannot submit Special:Revisiondelete * Added revDeleteLinkDisabled() function --- includes/Article.php | 17 +++-- includes/HistoryPage.php | 9 ++- includes/ImagePage.php | 12 +-- includes/Linker.php | 18 ++++- includes/LogEventsList.php | 18 +++-- includes/diff/DifferenceInterface.php | 16 ++-- includes/specials/SpecialContributions.php | 16 ++-- .../specials/SpecialDeletedContributions.php | 12 ++- includes/specials/SpecialUndelete.php | 74 ++++++++++--------- languages/messages/MessagesEn.php | 1 + maintenance/language/messages.inc | 1 + 11 files changed, 109 insertions(+), 85 deletions(-) diff --git a/includes/Article.php b/includes/Article.php index 6e993fca14..42625e30b6 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -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 ); diff --git a/includes/HistoryPage.php b/includes/HistoryPage.php index 01d95e0d16..ff9808861f 100644 --- a/includes/HistoryPage.php +++ b/includes/HistoryPage.php @@ -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 "; diff --git a/includes/ImagePage.php b/includes/ImagePage.php index 9a0c08986e..d1fa75c468 100644 --- a/includes/ImagePage.php +++ b/includes/ImagePage.php @@ -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 .= '
'; } // 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; } diff --git a/includes/Linker.php b/includes/Linker.php index b0324b1993..f6b3d688de 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -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 instead of a + * @param bool $delete Set to true to use (show/hide) rather than (show) * * @return string HTML 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 */ diff --git a/includes/LogEventsList.php b/includes/LogEventsList.php index fcd86e4fb4..3510988ead 100644 --- a/includes/LogEventsList.php +++ b/includes/LogEventsList.php @@ -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; } diff --git a/includes/diff/DifferenceInterface.php b/includes/diff/DifferenceInterface.php index 030ade189d..2618635220 100644 --- a/includes/diff/DifferenceInterface.php +++ b/includes/diff/DifferenceInterface.php @@ -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 = "   $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 = "   $rdel "; } diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index 66748327dc..0663d53c5e 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -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 = ''; } diff --git a/includes/specials/SpecialDeletedContributions.php b/includes/specials/SpecialDeletedContributions.php index 3a7d0279b3..aa6cd5fb2c 100644 --- a/includes/specials/SpecialDeletedContributions.php +++ b/includes/specials/SpecialDeletedContributions.php @@ -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 = ''; diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index 0733d05fee..12be578ffc 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -783,25 +783,25 @@ class UndeleteForm { } else { $openDiv = '
'; } - - $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 ) . '
' ); @@ -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 "
  • $checkBox $revdlink $pageLink . . $userLink $data $comment
  • \n"; } diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 16ac1bc605..d815104537 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -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 diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 6effdb462a..05ac55aa6f 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -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', -- 2.20.1