* 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
This commit is contained in:
Alexandre Emsenhuber 2011-12-28 18:41:36 +00:00
parent 2c83ec33e4
commit 585141ece9
4 changed files with 32 additions and 74 deletions

View file

@ -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 .= ' ';
}

View file

@ -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
} 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 );
}
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 {
// 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 '';
}
/**

View file

@ -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;

View file

@ -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 . ')';