From: Alexandre Emsenhuber Date: Wed, 12 Oct 2011 15:09:04 +0000 (+0000) Subject: * Added User paremeter to Revision::userCan(), Revision::userCanBitfield(), LogEvents... X-Git-Tag: 1.31.0-rc.0~27128 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22articles%22%2C%22id_article=%24id_article%22%29%20.%20%22?a=commitdiff_plain;h=0da17a29c341fd47e1527282bdab7a0dec4b16db;p=lhc%2Fweb%2Fwiklou.git * Added User paremeter to Revision::userCan(), Revision::userCanBitfield(), LogEventsList::userCan(), LogEventsList::userCanBitfield(), File::userCan() and its subclasses so that they can check against any user instead of always $wgUser. * Updated callers that have a context or may use another user than $wgUser * Revision::getUser(), Revision::getUserText(), Revision::getComment() and Revision::getText() also have a User as parameter, but it will be used only when Revision::FOR_THIS_USER is passed in the first parameter --- diff --git a/includes/ChangesList.php b/includes/ChangesList.php index 4b25489dbe..08e0718d6c 100644 --- a/includes/ChangesList.php +++ b/includes/ChangesList.php @@ -262,7 +262,7 @@ class ChangesList extends ContextSource { # Diff link if( $rc->mAttribs['rc_type'] == RC_NEW || $rc->mAttribs['rc_type'] == RC_LOG ) { $diffLink = $this->message['diff']; - } elseif( !self::userCan($rc,Revision::DELETED_TEXT) ) { + } elseif ( !self::userCan( $rc, Revision::DELETED_TEXT, $this->getUser() ) ) { $diffLink = $this->message['diff']; } else { $query = array( @@ -422,13 +422,14 @@ class ChangesList extends ContextSource { * field of this revision, if it's marked as deleted. * @param $rc RCCacheEntry * @param $field Integer + * @param $user User object to check, or null to use $wgUser * @return Boolean */ - public static function userCan( $rc, $field ) { + public static function userCan( $rc, $field, User $user = null ) { if( $rc->mAttribs['rc_type'] == RC_LOG ) { - return LogEventsList::userCanBitfield( $rc->mAttribs['rc_deleted'], $field ); + return LogEventsList::userCanBitfield( $rc->mAttribs['rc_deleted'], $field, $user ); } else { - return Revision::userCanBitfield( $rc->mAttribs['rc_deleted'], $field ); + return Revision::userCanBitfield( $rc->mAttribs['rc_deleted'], $field, $user ); } } @@ -675,7 +676,7 @@ class EnhancedChangesList extends ChangesList { } # Don't show unusable diff links - if ( !ChangesList::userCan($rc,Revision::DELETED_TEXT) ) { + if ( !ChangesList::userCan( $rc, Revision::DELETED_TEXT, $this->getUser() ) ) { $showdifflinks = false; } @@ -883,7 +884,7 @@ class EnhancedChangesList extends ChangesList { $r .= ' '; if( !$allLogs ) { $r .= '('; - if( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT ) ) { + if( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) { $r .= $nchanges[$n]; } elseif( $isnew ) { $r .= $nchanges[$n]; @@ -972,7 +973,7 @@ class EnhancedChangesList extends ChangesList { if( $type == RC_LOG ) { $link = $rcObj->timestamp; # Revision link - } elseif( !ChangesList::userCan($rcObj,Revision::DELETED_TEXT) ) { + } elseif( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) { $link = ''.$rcObj->timestamp.' '; } else { if ( $rcObj->unpatrolled && $type == RC_NEW) { diff --git a/includes/LogEventsList.php b/includes/LogEventsList.php index 5904105865..ca0aac1aa0 100644 --- a/includes/LogEventsList.php +++ b/includes/LogEventsList.php @@ -557,10 +557,11 @@ class LogEventsList { * * @param $row Row * @param $field Integer + * @param $user User object to check, or null to use $wgUser * @return Boolean */ - public static function userCan( $row, $field ) { - return self::userCanBitfield( $row->log_deleted, $field ); + public static function userCan( $row, $field, User $user = null ) { + return self::userCanBitfield( $row->log_deleted, $field, $user ); } /** @@ -569,19 +570,22 @@ class LogEventsList { * * @param $bitfield Integer (current field) * @param $field Integer + * @param $user User object to check, or null to use $wgUser * @return Boolean */ - public static function userCanBitfield( $bitfield, $field ) { + public static function userCanBitfield( $bitfield, $field, User $user = null ) { if( $bitfield & $field ) { - global $wgUser; - if ( $bitfield & LogPage::DELETED_RESTRICTED ) { $permission = 'suppressrevision'; } else { $permission = 'deletedhistory'; } wfDebug( "Checking for $permission due to $field match on $bitfield\n" ); - return $wgUser->isAllowed( $permission ); + if ( $user === null ) { + global $wgUser; + $user = $wgUser; + } + return $user->isAllowed( $permission ); } else { return true; } diff --git a/includes/Revision.php b/includes/Revision.php index e3db835f46..cd5e13fcfa 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -490,14 +490,14 @@ class Revision { * Revision::FOR_PUBLIC to be displayed to all users * Revision::FOR_THIS_USER to be displayed to $wgUser * Revision::RAW get the ID regardless of permissions - * - * + * @param $user User object to check for, only if FOR_THIS_USER is passed + * to the $audience parameter * @return Integer */ - public function getUser( $audience = self::FOR_PUBLIC ) { + public function getUser( $audience = self::FOR_PUBLIC, User $user = null ) { if( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_USER ) ) { return 0; - } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_USER ) ) { + } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_USER, $user ) ) { return 0; } else { return $this->mUser; @@ -522,13 +522,14 @@ class Revision { * Revision::FOR_PUBLIC to be displayed to all users * Revision::FOR_THIS_USER to be displayed to $wgUser * Revision::RAW get the text regardless of permissions - * + * @param $user User object to check for, only if FOR_THIS_USER is passed + * to the $audience parameter * @return string */ - public function getUserText( $audience = self::FOR_PUBLIC ) { + public function getUserText( $audience = self::FOR_PUBLIC, User $user = null ) { if( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_USER ) ) { return ''; - } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_USER ) ) { + } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_USER, $user ) ) { return ''; } else { return $this->mUserText; @@ -553,13 +554,14 @@ class Revision { * Revision::FOR_PUBLIC to be displayed to all users * Revision::FOR_THIS_USER to be displayed to $wgUser * Revision::RAW get the text regardless of permissions - * + * @param $user User object to check for, only if FOR_THIS_USER is passed + * to the $audience parameter * @return String */ - function getComment( $audience = self::FOR_PUBLIC ) { + function getComment( $audience = self::FOR_PUBLIC, User $user = null ) { if( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_COMMENT ) ) { return ''; - } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_COMMENT ) ) { + } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_COMMENT, $user ) ) { return ''; } else { return $this->mComment; @@ -630,13 +632,14 @@ class Revision { * Revision::FOR_PUBLIC to be displayed to all users * Revision::FOR_THIS_USER to be displayed to $wgUser * Revision::RAW get the text regardless of permissions - * + * @param $user User object to check for, only if FOR_THIS_USER is passed + * to the $audience parameter * @return String */ - public function getText( $audience = self::FOR_PUBLIC ) { + public function getText( $audience = self::FOR_PUBLIC, User $user = null ) { if( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_TEXT ) ) { return ''; - } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_TEXT ) ) { + } elseif( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_TEXT, $user ) ) { return ''; } else { return $this->getRawText(); @@ -1023,10 +1026,11 @@ class Revision { * @param $field Integer:one of self::DELETED_TEXT, * self::DELETED_COMMENT, * self::DELETED_USER + * @param $user User object to check, or null to use $wgUser * @return Boolean */ - public function userCan( $field ) { - return self::userCanBitfield( $this->mDeleted, $field ); + public function userCan( $field, User $user = null ) { + return self::userCanBitfield( $this->mDeleted, $field, $user ); } /** @@ -1038,11 +1042,11 @@ class Revision { * @param $field Integer: one of self::DELETED_TEXT = File::DELETED_FILE, * self::DELETED_COMMENT = File::DELETED_COMMENT, * self::DELETED_USER = File::DELETED_USER + * @param $user User object to check, or null to use $wgUser * @return Boolean */ - public static function userCanBitfield( $bitfield, $field ) { + public static function userCanBitfield( $bitfield, $field, User $user = null ) { if( $bitfield & $field ) { // aspect is deleted - global $wgUser; if ( $bitfield & self::DELETED_RESTRICTED ) { $permission = 'suppressrevision'; } elseif ( $field & self::DELETED_TEXT ) { @@ -1051,7 +1055,11 @@ class Revision { $permission = 'deletedhistory'; } wfDebug( "Checking for $permission due to $field match on $bitfield\n" ); - return $wgUser->isAllowed( $permission ); + if ( $user === null ) { + global $wgUser; + $user = $wgUser; + } + return $user->isAllowed( $permission ); } else { return true; } diff --git a/includes/RevisionList.php b/includes/RevisionList.php index 215b663ede..cf0c32a132 100644 --- a/includes/RevisionList.php +++ b/includes/RevisionList.php @@ -300,11 +300,11 @@ class RevisionItem extends RevisionItemBase { } public function canView() { - return $this->revision->userCan( Revision::DELETED_RESTRICTED ); + return $this->revision->userCan( Revision::DELETED_RESTRICTED, $this->context->getUser() ); } public function canViewContent() { - return $this->revision->userCan( Revision::DELETED_TEXT ); + return $this->revision->userCan( Revision::DELETED_TEXT, $this->context->getUser() ); } public function isDeleted() { diff --git a/includes/filerepo/ArchivedFile.php b/includes/filerepo/ArchivedFile.php index b62ed89b1e..6043d262d3 100644 --- a/includes/filerepo/ArchivedFile.php +++ b/includes/filerepo/ArchivedFile.php @@ -461,10 +461,11 @@ class ArchivedFile { * Determine if the current user is allowed to view a particular * field of this FileStore image file, if it's marked as deleted. * @param $field Integer + * @param $user User object to check, or null to use $wgUser * @return bool */ - public function userCan( $field ) { + public function userCan( $field, User $user = null ) { $this->load(); - return Revision::userCanBitfield( $this->deleted, $field ); + return Revision::userCanBitfield( $this->deleted, $field, $user ); } } diff --git a/includes/filerepo/File.php b/includes/filerepo/File.php index 630f1f8d18..afbf13ec52 100644 --- a/includes/filerepo/File.php +++ b/includes/filerepo/File.php @@ -1437,9 +1437,10 @@ abstract class File { * field of this file, if it's marked as deleted. * STUB * @param $field Integer + * @param $user User object to check, or null to use $wgUser * @return Boolean */ - function userCan( $field ) { + function userCan( $field, User $user = null ) { return true; } diff --git a/includes/filerepo/OldLocalFile.php b/includes/filerepo/OldLocalFile.php index 1fb8c5626c..de168b31f8 100644 --- a/includes/filerepo/OldLocalFile.php +++ b/includes/filerepo/OldLocalFile.php @@ -205,11 +205,12 @@ class OldLocalFile extends LocalFile { * field of this image file, if it's marked as deleted. * * @param $field Integer + * @param $user User object to check, or null to use $wgUser * @return bool */ - function userCan( $field ) { + function userCan( $field, User $user = null ) { $this->load(); - return Revision::userCanBitfield( $this->deleted, $field ); + return Revision::userCanBitfield( $this->deleted, $field, $user ); } /** diff --git a/includes/revisiondelete/RevisionDelete.php b/includes/revisiondelete/RevisionDelete.php index b329fc4b50..ea022fb15f 100644 --- a/includes/revisiondelete/RevisionDelete.php +++ b/includes/revisiondelete/RevisionDelete.php @@ -132,11 +132,11 @@ class RevDel_RevisionItem extends RevDel_Item { } public function canView() { - return $this->revision->userCan( Revision::DELETED_RESTRICTED ); + return $this->revision->userCan( Revision::DELETED_RESTRICTED, $this->list->getUser() ); } public function canViewContent() { - return $this->revision->userCan( Revision::DELETED_TEXT ); + return $this->revision->userCan( Revision::DELETED_TEXT, $this->list->getUser() ); } public function getBits() { @@ -509,11 +509,11 @@ class RevDel_FileItem extends RevDel_Item { } public function canView() { - return $this->file->userCan( File::DELETED_RESTRICTED ); + return $this->file->userCan( File::DELETED_RESTRICTED, $this->list->getUser() ); } public function canViewContent() { - return $this->file->userCan( File::DELETED_FILE ); + return $this->file->userCan( File::DELETED_FILE, $this->list->getUser() ); } public function getBits() { @@ -596,7 +596,7 @@ class RevDel_FileItem extends RevDel_Item { * @return string HTML */ protected function getUserTools() { - if( $this->file->userCan( Revision::DELETED_USER ) ) { + if( $this->file->userCan( Revision::DELETED_USER, $this->list->getUser() ) ) { $link = Linker::userLink( $this->file->user, $this->file->user_text ) . Linker::userToolLinks( $this->file->user, $this->file->user_text ); } else { @@ -615,7 +615,7 @@ class RevDel_FileItem extends RevDel_Item { * @return string HTML */ protected function getComment() { - if( $this->file->userCan( File::DELETED_COMMENT ) ) { + if( $this->file->userCan( File::DELETED_COMMENT, $this->list->getUser() ) ) { $block = Linker::commentBlock( $this->file->description ); } else { $block = ' ' . wfMsgHtml( 'rev-deleted-comment' ); @@ -807,7 +807,7 @@ class RevDel_LogItem extends RevDel_Item { } public function canView() { - return LogEventsList::userCan( $this->row, Revision::DELETED_RESTRICTED ); + return LogEventsList::userCan( $this->row, Revision::DELETED_RESTRICTED, $this->list->getUser() ); } public function canViewContent() { diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index 431787b977..bc66bc9acd 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -616,8 +616,9 @@ class ContribsPager extends ReverseChronologicalPager { $topmarktext .= ' '.Linker::generateRollback( $rev ); } } + $user = $this->getUser(); # Is there a visible previous revision? - if( $rev->userCan( Revision::DELETED_TEXT ) && $rev->getParentId() !== 0 ) { + if( $rev->userCan( Revision::DELETED_TEXT, $user ) && $rev->getParentId() !== 0 ) { $difftext = Linker::linkKnown( $page, $this->messages['diff'], @@ -646,7 +647,7 @@ class ContribsPager extends ReverseChronologicalPager { $comment = $this->getLang()->getDirMark() . Linker::revComment( $rev, false, true ); $date = $this->getLang()->timeanddate( wfTimestamp( TS_MW, $row->rev_timestamp ), true ); - if( $rev->userCan( Revision::DELETED_TEXT ) ) { + if( $rev->userCan( Revision::DELETED_TEXT, $user ) ) { $d = Linker::linkKnown( $page, htmlspecialchars($date), @@ -680,9 +681,9 @@ class ContribsPager extends ReverseChronologicalPager { } // Don't show useless link to people who cannot hide revisions - $canHide = $this->getUser()->isAllowed( 'deleterevision' ); - if( $canHide || ($rev->getVisibility() && $this->getUser()->isAllowed('deletedhistory')) ) { - if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { + $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( diff --git a/includes/specials/SpecialDeletedContributions.php b/includes/specials/SpecialDeletedContributions.php index 23c0c83260..e97fe4ceb1 100644 --- a/includes/specials/SpecialDeletedContributions.php +++ b/includes/specials/SpecialDeletedContributions.php @@ -184,7 +184,7 @@ class DeletedContribsPager extends IndexPager { $comment = Linker::revComment( $rev ); $date = htmlspecialchars( $this->getLang()->timeanddate( $rev->getTimestamp(), true ) ); - if( !$user->isAllowed('undelete') || !$rev->userCan(Revision::DELETED_TEXT) ) { + if( !$user->isAllowed( 'undelete' ) || !$rev->userCan( Revision::DELETED_TEXT, $user ) ) { $link = $date; // unusable link } else { $link = Linker::linkKnown( diff --git a/includes/specials/SpecialMergeHistory.php b/includes/specials/SpecialMergeHistory.php index 0f046ab68d..753ac9e8d0 100644 --- a/includes/specials/SpecialMergeHistory.php +++ b/includes/specials/SpecialMergeHistory.php @@ -271,7 +271,7 @@ class SpecialMergeHistory extends SpecialPage { } # Last link - if( !$rev->userCan( Revision::DELETED_TEXT ) ) { + if( !$rev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) { $last = $this->message['last']; } elseif( isset( $this->prevId[$row->rev_id] ) ) { $last = Linker::linkKnown( diff --git a/includes/specials/SpecialRevisiondelete.php b/includes/specials/SpecialRevisiondelete.php index 1bfda1ff01..e967a900b6 100644 --- a/includes/specials/SpecialRevisiondelete.php +++ b/includes/specials/SpecialRevisiondelete.php @@ -278,7 +278,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { $this->getOutput()->addWikiMsg( 'revdelete-no-file' ); return; } - if( !$oimage->userCan(File::DELETED_FILE) ) { + if( !$oimage->userCan( File::DELETED_FILE, $this->getUser() ) ) { if( $oimage->isDeleted( File::DELETED_RESTRICTED ) ) { $this->getOutput()->permissionRequired( 'suppressrevision' ); } else { diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index 1285003281..8f3542f433 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -634,7 +634,9 @@ class SpecialUndelete extends SpecialPage { function execute( $par ) { $this->setHeaders(); - if ( !$this->userCanExecute( $this->getUser() ) ) { + + $user = $this->getUser(); + if ( !$this->userCanExecute( $user ) ) { $this->displayRestrictionError(); return; } @@ -663,7 +665,7 @@ class SpecialUndelete extends SpecialPage { if( is_null( $this->mTargetObj ) ) { # Not all users can just browse every deleted page from the list - if( $this->getUser()->isAllowed( 'browsearchive' ) ) { + if( $user->isAllowed( 'browsearchive' ) ) { $this->showSearchForm(); # List undeletable articles @@ -685,14 +687,14 @@ class SpecialUndelete extends SpecialPage { if ( !$file->exists() ) { $out->addWikiMsg( 'filedelete-nofile', $this->mFilename ); return; - } elseif( !$file->userCan( File::DELETED_FILE ) ) { + } elseif( !$file->userCan( File::DELETED_FILE, $user ) ) { if( $file->isDeleted( File::DELETED_RESTRICTED ) ) { $out->permissionRequired( 'suppressrevision' ); } else { $out->permissionRequired( 'deletedtext' ); } return false; - } elseif ( !$this->getUser()->matchEditToken( $this->mToken, $this->mFilename ) ) { + } elseif ( !$user->matchEditToken( $this->mToken, $this->mFilename ) ) { $this->showFileConfirmationForm( $this->mFilename ); return false; } else { @@ -772,8 +774,6 @@ class SpecialUndelete extends SpecialPage { } private function showRevision( $timestamp ) { - $out = $this->getOutput(); - if( !preg_match( '/[0-9]{14}/', $timestamp ) ) { return 0; } @@ -782,13 +782,16 @@ class SpecialUndelete extends SpecialPage { wfRunHooks( 'UndeleteForm::showRevision', array( &$archive, $this->mTargetObj ) ); $rev = $archive->getRevision( $timestamp ); + $out = $this->getOutput(); + $user = $this->getUser(); + if( !$rev ) { $out->addWikiMsg( 'undeleterevision-missing' ); return; } if( $rev->isDeleted( Revision::DELETED_TEXT ) ) { - if( !$rev->userCan( Revision::DELETED_TEXT ) ) { + if( !$rev->userCan( Revision::DELETED_TEXT, $user ) ) { $out->wrapWikiMsg( "\n", 'rev-deleted-text-permission' ); return; } else { @@ -804,7 +807,7 @@ class SpecialUndelete extends SpecialPage { $previousRev = $archive->getPreviousRevision( $timestamp ); if( $previousRev ) { $this->showDiff( $previousRev, $rev ); - if( $this->getUser()->getOption( 'diffonly' ) ) { + if( $user->getOption( 'diffonly' ) ) { return; } else { $out->addHTML( '
' ); @@ -824,7 +827,7 @@ class SpecialUndelete extends SpecialPage { $time = $this->getLang()->timeAndDate( $timestamp, true ); $d = $this->getLang()->date( $timestamp, true ); $t = $this->getLang()->time( $timestamp, true ); - $user = Linker::revUserTools( $rev ); + $userLink = Linker::revUserTools( $rev ); if( $this->mPreview ) { $openDiv = '
'; @@ -835,14 +838,14 @@ class SpecialUndelete extends SpecialPage { // Revision delete links if ( !$this->mDiff ) { - $revdel = Linker::getRevDeleteLink( $this->getUser(), $rev, $this->mTargetObj ); + $revdel = Linker::getRevDeleteLink( $user, $rev, $this->mTargetObj ); if ( $revdel ) { $out->addHTML( "$revdel " ); } } $out->addHTML( wfMessage( 'undelete-revision' )->rawParams( $link )->params( - $time )->rawParams( $user )->params( $d, $t )->parse() . '
' ); + $time )->rawParams( $userLink )->params( $d, $t )->parse() . '' ); wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) ); if( $this->mPreview ) { @@ -850,15 +853,15 @@ class SpecialUndelete extends SpecialPage { $popts = $out->parserOptions(); $popts->setEditSection( false ); $out->parserOptions( $popts ); - $out->addWikiTextTitleTidy( $rev->getText( Revision::FOR_THIS_USER ), $this->mTargetObj, true ); + $out->addWikiTextTitleTidy( $rev->getText( Revision::FOR_THIS_USER, $user ), $this->mTargetObj, true ); } $out->addHTML( Xml::element( 'textarea', array( 'readonly' => 'readonly', - 'cols' => intval( $this->getUser()->getOption( 'cols' ) ), - 'rows' => intval( $this->getUser()->getOption( 'rows' ) ) ), - $rev->getText( Revision::FOR_THIS_USER ) . "\n" ) . + 'cols' => intval( $user->getOption( 'cols' ) ), + 'rows' => intval( $user->getOption( 'rows' ) ) ), + $rev->getText( Revision::FOR_THIS_USER, $user ) . "\n" ) . Xml::openElement( 'div' ) . Xml::openElement( 'form', array( 'method' => 'post', @@ -874,7 +877,7 @@ class SpecialUndelete extends SpecialPage { Xml::element( 'input', array( 'type' => 'hidden', 'name' => 'wpEditToken', - 'value' => $this->getUser()->editToken() ) ) . + 'value' => $user->editToken() ) ) . Xml::element( 'input', array( 'type' => 'submit', 'name' => 'preview', @@ -1189,7 +1192,7 @@ class SpecialUndelete extends SpecialPage { if( $this->mCanView ) { $titleObj = $this->getTitle(); # Last link - if( !$rev->userCan( Revision::DELETED_TEXT ) ) { + if( !$rev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) { $pageLink = htmlspecialchars( $this->getLang()->timeanddate( $ts, true ) ); $last = wfMsgHtml( 'diff' ); } elseif( $remaining > 0 || ( $earliestLiveTime && $ts > $earliestLiveTime ) ) { @@ -1250,9 +1253,10 @@ class SpecialUndelete extends SpecialPage { $comment = $this->getFileComment( $file ); // Add show/hide deletion links if available - $canHide = $this->getUser()->isAllowed( 'deleterevision' ); - if( $canHide || ( $file->getVisibility() && $this->getUser()->isAllowed( 'deletedhistory' ) ) ) { - if( !$file->userCan( File::DELETED_RESTRICTED ) ) { + $user = $this->getUser(); + $canHide = $user->isAllowed( 'deleterevision' ); + if( $canHide || ( $file->getVisibility() && $user->isAllowed( 'deletedhistory' ) ) ) { + if( !$file->userCan( File::DELETED_RESTRICTED, $user ) ) { $revdlink = Linker::revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops } else { $query = array( @@ -1279,7 +1283,7 @@ class SpecialUndelete extends SpecialPage { function getPageLink( $rev, $titleObj, $ts ) { $time = htmlspecialchars( $this->getLang()->timeanddate( $ts, true ) ); - if( !$rev->userCan( Revision::DELETED_TEXT ) ) { + if( !$rev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) { return '' . $time . ''; } else { $link = Linker::linkKnown( @@ -1305,7 +1309,7 @@ class SpecialUndelete extends SpecialPage { * @return String: HTML fragment */ function getFileLink( $file, $titleObj, $ts, $key ) { - if( !$file->userCan( File::DELETED_FILE ) ) { + if( !$file->userCan( File::DELETED_FILE, $this->getUser() ) ) { return '' . $this->getLang()->timeanddate( $ts, true ) . ''; } else { $link = Linker::linkKnown( @@ -1332,7 +1336,7 @@ class SpecialUndelete extends SpecialPage { * @return String: HTML fragment */ function getFileUser( $file ) { - if( !$file->userCan( File::DELETED_USER ) ) { + if( !$file->userCan( File::DELETED_USER, $this->getUser() ) ) { return '' . wfMsgHtml( 'rev-deleted-user' ) . ''; } else { $link = Linker::userLink( $file->getRawUser(), $file->getRawUserText() ) . @@ -1351,7 +1355,7 @@ class SpecialUndelete extends SpecialPage { * @return String: HTML fragment */ function getFileComment( $file ) { - if( !$file->userCan( File::DELETED_COMMENT ) ) { + if( !$file->userCan( File::DELETED_COMMENT, $this->getUser() ) ) { return '' . wfMsgHtml( 'rev-deleted-comment' ) . ''; } else {