From ed425dfeda976fe2539cdce7aa9b102cb478b42b Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 3 Aug 2011 22:37:20 +0000 Subject: [PATCH] * Refactored SpecialUndelete::revDeleteLink into a Linker::getRevDeleteLink function * (bug 21279) Updated DeletedContributions to use type=revision when possible (ar_rev_id exists) --- includes/Linker.php | 45 ++++++++++++++- .../specials/SpecialDeletedContributions.php | 17 +----- includes/specials/SpecialUndelete.php | 55 +++---------------- 3 files changed, 54 insertions(+), 63 deletions(-) diff --git a/includes/Linker.php b/includes/Linker.php index f724ca6d6a..f1fb577174 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1768,6 +1768,50 @@ class Linker { return self::$accesskeycache[$name] = $accesskey; } + /** + * Get a revision-deletion link, or disabled link, or nothing, depending + * on user permissions & the settings on the revision. + * + * Will use forward-compatible revision ID in the Special:RevDelete link + * if possible, otherwise the timestamp-based ID which may break after + * undeletion. + * + * @param User $user + * @param Revision $rev + * @param Revision $title + * @return string HTML fragment + */ + 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 + } 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 ); + } + } else { + return ''; + } + } + /** * Creates a (show/hide) link for deleting revisions/log entries * @@ -2003,4 +2047,3 @@ class DummyLinker { return call_user_func_array( array( 'Linker', $fname ), $args ); } } - diff --git a/includes/specials/SpecialDeletedContributions.php b/includes/specials/SpecialDeletedContributions.php index 77c7e84ffb..e45e85fd5b 100644 --- a/includes/specials/SpecialDeletedContributions.php +++ b/includes/specials/SpecialDeletedContributions.php @@ -213,21 +213,8 @@ class DeletedContribsPager extends IndexPager { } // Revision delete link - $canHide = $wgUser->isAllowed( 'deleterevision' ); - if( $canHide || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) { - if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { - $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 ), $canHide ) . ' '; - } - } else { - $del = ''; - } + $del = Linker::getRevDeleteLink( $wgUser, $rev, $page ); + if ( $del ) $del .= ' '; $tools = Html::rawElement( 'span', diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index fca840d861..4e4477a136 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -844,9 +844,9 @@ class SpecialUndelete extends SpecialPage { // Revision delete links if ( !$this->mDiff ) { - $revdel = $this->revDeleteLink( $rev ); + $revdel = Linker::getRevDeleteLink( $this->getUser(), $rev, $this->mTargetObj ); if ( $revdel ) { - $out->addHTML( $revdel ); + $out->addHTML( "$revdel " ); } } @@ -896,48 +896,6 @@ class SpecialUndelete extends SpecialPage { Xml::closeElement( 'div' ) ); } - /** - * Get a revision-deletion link, or disabled link, or nothing, depending - * on user permissions & the settings on the revision. - * - * Will use forward-compatible revision ID in the Special:RevDelete link - * if possible, otherwise the timestamp-based ID which may break after - * undeletion. - * - * @param Revision $rev - * @return string HTML fragment - */ - function revDeleteLink( $rev ) { - $canHide = $this->getUser()->isAllowed( 'deleterevision' ); - if( $canHide || ( $rev->getVisibility() && $this->getUser()->isAllowed( 'deletedhistory' ) ) ) { - if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { - $revdlink = 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' => $this->mTargetObj->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' => $this->mTargetObj->getPrefixedDBkey(), - 'ids' => $rev->getTimestamp() - ); - } - return Linker::revDeleteLink( $query, - $rev->isDeleted( File::DELETED_RESTRICTED ), $canHide ); - } - } else { - return ''; - } - } - /** * Build a diff display between this and the previous either deleted * or non-deleted edit. @@ -991,7 +949,8 @@ class SpecialUndelete extends SpecialPage { $targetQuery = array( 'oldid' => $rev->getId() ); } // Add show/hide deletion links if available - $del = $this->revDeleteLink( $rev ); + $rdel = Linker::getRevDeleteLink( $this->getUser(), $rev, $this->mTargetObj ); + if ( $rdel ) $rdel = " $rdel"; return '
' . Linker::link( @@ -1011,7 +970,7 @@ class SpecialUndelete extends SpecialPage { Linker::revUserTools( $rev ) . '
' . '
' . '
' . - Linker::revComment( $rev ) . $del . '
' . + Linker::revComment( $rev ) . $rdel . '
' . '
'; } @@ -1274,7 +1233,7 @@ class SpecialUndelete extends SpecialPage { // Edit summary $comment = Linker::revComment( $rev ); // Revision delete links - $revdlink = $this->revDeleteLink( $rev ); + $revdlink = Linker::getRevDeleteLink( $this->getUser(), $rev, $this->mTargetObj ); return "
  • $checkBox $revdlink ($last) $pageLink . . $userLink $stxt $comment
  • "; } @@ -1300,6 +1259,7 @@ class SpecialUndelete extends SpecialPage { ')'; $data = htmlspecialchars( $data ); $comment = $this->getFileComment( $file ); + // Add show/hide deletion links if available $canHide = $this->getUser()->isAllowed( 'deleterevision' ); if( $canHide || ( $file->getVisibility() && $this->getUser()->isAllowed( 'deletedhistory' ) ) ) { @@ -1317,6 +1277,7 @@ class SpecialUndelete extends SpecialPage { } else { $revdlink = ''; } + return "
  • $checkBox $revdlink $pageLink . . $userLink $data $comment
  • \n"; } -- 2.20.1