From 585141ece986cd0dad20b9d79fe60311119fc5c9 Mon Sep 17 00:00:00 2001 From: Alexandre Emsenhuber Date: Wed, 28 Dec 2011 18:41:36 +0000 Subject: [PATCH] * Use Linker::getRevDeleteLink() where possible to remove code duplication * Pass the User object to Revision::userCan() in Linker::getRevDeleteLink() * Return the result Linker::revDeleteLinkDisabled() in Linker::getRevDeleteLink() instead of storing it in a variable that will not be used --- includes/Article.php | 17 +------- includes/Linker.php | 47 +++++++++++----------- includes/diff/DifferenceEngine.php | 20 +-------- includes/specials/SpecialContributions.php | 18 +-------- 4 files changed, 30 insertions(+), 72 deletions(-) diff --git a/includes/Article.php b/includes/Article.php index aaef36eea2..2fdcd1a29e 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -1147,21 +1147,8 @@ class Article extends Page { array( 'known', 'noclasses' ) ); - $cdel = ''; - - // User can delete revisions or view deleted revisions... - $canHide = $wgUser->isAllowed( 'deleterevision' ); - if ( $canHide || ( $revision->getVisibility() && $wgUser->isAllowed( 'deletedhistory' ) ) ) { - if ( !$revision->userCan( Revision::DELETED_RESTRICTED ) ) { - $cdel = Linker::revDeleteLinkDisabled( $canHide ); // rev was hidden from Sysops - } else { - $query = array( - 'type' => 'revision', - 'target' => $this->getTitle()->getPrefixedDbkey(), - 'ids' => $oldid - ); - $cdel = Linker::revDeleteLink( $query, $revision->isDeleted( File::DELETED_RESTRICTED ), $canHide ); - } + $cdel = Linker::getRevDeleteLink( $wgUser, $revision, $this->getTitle() ); + if ( $cdel !== '' ) { $cdel .= ' '; } diff --git a/includes/Linker.php b/includes/Linker.php index 35cf756f4d..e789113733 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1803,32 +1803,33 @@ class Linker { */ public static function getRevDeleteLink( User $user, Revision $rev, Title $title ) { $canHide = $user->isAllowed( 'deleterevision' ); - if ( $canHide || ( $rev->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) { - if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { - $revdlink = Linker::revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops + if ( !$canHide && !( $rev->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) { + return ''; + } + + if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) { + return Linker::revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops + } else { + if ( $rev->getId() ) { + // RevDelete links using revision ID are stable across + // page deletion and undeletion; use when possible. + $query = array( + 'type' => 'revision', + 'target' => $title->getPrefixedDBkey(), + 'ids' => $rev->getId() + ); } else { - if ( $rev->getId() ) { - // RevDelete links using revision ID are stable across - // page deletion and undeletion; use when possible. - $query = array( - 'type' => 'revision', - 'target' => $title->getPrefixedDBkey(), - 'ids' => $rev->getId() - ); - } else { - // Older deleted entries didn't save a revision ID. - // We have to refer to these by timestamp, ick! - $query = array( - 'type' => 'archive', - 'target' => $title->getPrefixedDBkey(), - 'ids' => $rev->getTimestamp() - ); - } - return Linker::revDeleteLink( $query, - $rev->isDeleted( File::DELETED_RESTRICTED ), $canHide ); + // Older deleted entries didn't save a revision ID. + // We have to refer to these by timestamp, ick! + $query = array( + 'type' => 'archive', + 'target' => $title->getPrefixedDBkey(), + 'ids' => $rev->getTimestamp() + ); } + return Linker::revDeleteLink( $query, + $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide ); } - return ''; } /** diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index 3236e61ba4..f645d3b538 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -462,24 +462,8 @@ class DifferenceEngine extends ContextSource { * @return String */ protected function revisionDeleteLink( $rev ) { - $link = ''; - $user = $this->getUser(); - $canHide = $user->isAllowed( 'deleterevision' ); - // Show del/undel link if: - // (a) the user can delete revisions, or - // (b) the user can view deleted revision *and* this one is deleted - if ( $canHide || ( $rev->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) { - if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) { - $link = Linker::revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops - } else { - $query = array( - 'type' => 'revision', - 'target' => $rev->getTitle()->getPrefixedDBkey(), - 'ids' => $rev->getId() - ); - $link = Linker::revDeleteLink( $query, - $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide ); - } + $link = Linker::getRevDeleteLink( $this->getUser(), $rev, $rev->getTitle() ); + if ( $link !== '' ) { $link = '   ' . $link . ' '; } return $link; diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index 315e640f67..865295bfff 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -833,23 +833,9 @@ class ContribsPager extends ReverseChronologicalPager { $mflag = ''; } - // Don't show useless link to people who cannot hide revisions - $canHide = $user->isAllowed( 'deleterevision' ); - if ( $canHide || ( $rev->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) { - if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) { - $del = Linker::revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops - } else { - $query = array( - 'type' => 'revision', - 'target' => $page->getPrefixedDbkey(), - 'ids' => $rev->getId() - ); - $del = Linker::revDeleteLink( $query, - $rev->isDeleted( Revision::DELETED_RESTRICTED ), $canHide ); - } + $del = Linker::getRevDeleteLink( $user, $rev, $page ); + if ( $del !== '' ) { $del .= ' '; - } else { - $del = ''; } $diffHistLinks = '(' . $difftext . $this->messages['pipe-separator'] . $histlink . ')'; -- 2.20.1