From 55493e2a0542b5519ea887fadbe4e5deb14c8846 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Tue, 22 Sep 2009 22:30:09 +0000 Subject: [PATCH] * Split out 'deletedcontent' from 'undelete' right (bug 19199/bug 9884) * Don't blue-link unviewable hidden revisions --- includes/DefaultSettings.php | 1 + includes/SkinTemplate.php | 2 +- .../specials/SpecialDeletedContributions.php | 2 +- includes/specials/SpecialUndelete.php | 37 +++++++++++++------ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 17e76f9baa..440c308c21 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1353,6 +1353,7 @@ $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']['undelete'] = true; $wgGroupPermissions['sysop']['editinterface'] = true; $wgGroupPermissions['sysop']['editusercss'] = true; diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index 4042514122..e0afaa9f51 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -800,7 +800,7 @@ class SkinTemplate extends Skin { } } else { //article doesn't exist or is deleted - if( $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'undelete' ) ) { + if( $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'deletedcontent' ) ) { if( $n = $this->mTitle->isDeleted() ) { $undelTitle = SpecialPage::getTitleFor( 'Undelete' ); $content_actions['undelete'] = array( diff --git a/includes/specials/SpecialDeletedContributions.php b/includes/specials/SpecialDeletedContributions.php index c63c446718..d5d220e0b6 100644 --- a/includes/specials/SpecialDeletedContributions.php +++ b/includes/specials/SpecialDeletedContributions.php @@ -145,7 +145,7 @@ class DeletedContribsPager extends IndexPager { $this->messages['undeleteviewlink'] ); - if( $wgUser->isAllowed('undelete') ) { + if( $wgUser->isAllowed('deletedcontent') ) { $last = $sk->linkKnown( $undelete, $this->messages['diff'], diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index c0ff3b871a..3ba7613f42 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -552,7 +552,7 @@ class PageArchive { */ class UndeleteForm { var $mAction, $mTarget, $mTimestamp, $mRestore, $mInvert, $mTargetObj; - var $mTargetTimestamp, $mAllowed, $mComment, $mToken; + var $mTargetTimestamp, $mAllowed, $mCanView, $mComment, $mToken; function UndeleteForm( $request, $par = "" ) { global $wgUser; @@ -576,10 +576,15 @@ class UndeleteForm { if( $par != "" ) { $this->mTarget = $par; } - if ( $wgUser->isAllowed( 'undelete' ) && !$wgUser->isBlocked() ) { - $this->mAllowed = true; - } else { + if ( $wgUser->isAllowed( 'deletedcontent' ) && $wgUser->isAllowed( 'undelete' ) && !$wgUser->isBlocked() ) { + $this->mAllowed = true; // user can restore + $this->mCanView = true; // user can view content + } elseif ( $wgUser->isAllowed( 'deletedcontent' ) ) { + $this->mAllowed = false; // user cannot restore + $this->mCanView = true; // user can view content + } else { // user can only view the list of revisions $this->mAllowed = false; + $this->mCanView = false; $this->mTimestamp = ''; $this->mRestore = false; } @@ -1136,8 +1141,9 @@ class UndeleteForm { array( 'page' => $this->mTargetObj->getArticleId() ) ); $stxt = ''; $ts = wfTimestamp( TS_MW, $row->ar_timestamp ); + // Build checkboxen... if( $this->mAllowed ) { - if( $this->mInvert){ + if( $this->mInvert ) { if( in_array( $ts, $this->mTargetTimestamp ) ) { $checkBox = Xml::check( "ts$ts"); } else { @@ -1146,12 +1152,18 @@ class UndeleteForm { } else { $checkBox = Xml::check( "ts$ts" ); } + } else { + $checkBox = ''; + } + // Build page & diff links... + if( $this->mCanView ) { $titleObj = SpecialPage::getTitleFor( "Undelete" ); - $pageLink = $this->getPageLink( $rev, $titleObj, $ts, $sk ); # Last link if( !$rev->userCan( Revision::DELETED_TEXT ) ) { + $pageLink = htmlspecialchars( $wgLang->timeanddate( $ts, true ) ); $last = wfMsgHtml('diff'); } else if( $remaining > 0 || ($earliestLiveTime && $ts > $earliestLiveTime) ) { + $pageLink = $this->getPageLink( $rev, $titleObj, $ts, $sk ); $last = $sk->linkKnown( $titleObj, wfMsgHtml('diff'), @@ -1163,20 +1175,22 @@ class UndeleteForm { ) ); } else { + $pageLink = $this->getPageLink( $rev, $titleObj, $ts, $sk ); $last = wfMsgHtml('diff'); } } else { - $checkBox = ''; $pageLink = htmlspecialchars( $wgLang->timeanddate( $ts, true ) ); $last = wfMsgHtml('diff'); } + // User links $userLink = $sk->revUserTools( $rev ); - - if(!is_null($size = $row->ar_len)) { + // Revision text size + if( !is_null($size = $row->ar_len) ) { $stxt = $sk->formatRevisionSize( $size ); } + // Edit summary $comment = $sk->revComment( $rev ); - $revdlink = ''; + // Show/hide link if( $wgUser->isAllowed( 'deleterevision' ) ) { if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { // If revision was hidden from sysops @@ -1190,8 +1204,9 @@ class UndeleteForm { ); $revdlink = $sk->revDeleteLink( $query, $rev->isDeleted( Revision::DELETED_RESTRICTED ) ); } + } else { + $revdlink = ''; } - return "
  • $checkBox $revdlink ($last) $pageLink . . $userLink $stxt $comment
  • "; } -- 2.20.1