# 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(
* 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 );
}
}
}
# Don't show unusable diff links
- if ( !ChangesList::userCan($rc,Revision::DELETED_TEXT) ) {
+ if ( !ChangesList::userCan( $rc, Revision::DELETED_TEXT, $this->getUser() ) ) {
$showdifflinks = false;
}
$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];
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 = '<span class="history-deleted">'.$rcObj->timestamp.'</span> ';
} else {
if ( $rcObj->unpatrolled && $type == RC_NEW) {
*
* @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 );
}
/**
*
* @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;
}
* 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;
* 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;
* 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;
* 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();
* @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 );
}
/**
* @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 ) {
$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;
}
}
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() {
* 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 );
}
}
* 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;
}
* 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 );
}
/**
}
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() {
}
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() {
* @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 {
* @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' );
}
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() {
$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'],
$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),
}
// 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(
$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(
}
# 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(
$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 {
function execute( $par ) {
$this->setHeaders();
- if ( !$this->userCanExecute( $this->getUser() ) ) {
+
+ $user = $this->getUser();
+ if ( !$this->userCanExecute( $user ) ) {
$this->displayRestrictionError();
return;
}
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
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 {
}
private function showRevision( $timestamp ) {
- $out = $this->getOutput();
-
if( !preg_match( '/[0-9]{14}/', $timestamp ) ) {
return 0;
}
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( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-permission' );
return;
} else {
$previousRev = $archive->getPreviousRevision( $timestamp );
if( $previousRev ) {
$this->showDiff( $previousRev, $rev );
- if( $this->getUser()->getOption( 'diffonly' ) ) {
+ if( $user->getOption( 'diffonly' ) ) {
return;
} else {
$out->addHTML( '<hr />' );
$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 = '<div id="mw-undelete-revision" class="mw-warning">';
// 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() . '</div>' );
+ $time )->rawParams( $userLink )->params( $d, $t )->parse() . '</div>' );
wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) );
if( $this->mPreview ) {
$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',
Xml::element( 'input', array(
'type' => 'hidden',
'name' => 'wpEditToken',
- 'value' => $this->getUser()->editToken() ) ) .
+ 'value' => $user->editToken() ) ) .
Xml::element( 'input', array(
'type' => 'submit',
'name' => 'preview',
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 ) ) {
$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(
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 '<span class="history-deleted">' . $time . '</span>';
} else {
$link = Linker::linkKnown(
* @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 '<span class="history-deleted">' . $this->getLang()->timeanddate( $ts, true ) . '</span>';
} else {
$link = Linker::linkKnown(
* @return String: HTML fragment
*/
function getFileUser( $file ) {
- if( !$file->userCan( File::DELETED_USER ) ) {
+ if( !$file->userCan( File::DELETED_USER, $this->getUser() ) ) {
return '<span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
} else {
$link = Linker::userLink( $file->getRawUser(), $file->getRawUserText() ) .
* @return String: HTML fragment
*/
function getFileComment( $file ) {
- if( !$file->userCan( File::DELETED_COMMENT ) ) {
+ if( !$file->userCan( File::DELETED_COMMENT, $this->getUser() ) ) {
return '<span class="history-deleted"><span class="comment">' .
wfMsgHtml( 'rev-deleted-comment' ) . '</span></span>';
} else {