* Use Linker::getRevDeleteLink() where possible to remove code duplication
authorAlexandre Emsenhuber <ialex@users.mediawiki.org>
Wed, 28 Dec 2011 18:41:36 +0000 (18:41 +0000)
committerAlexandre Emsenhuber <ialex@users.mediawiki.org>
Wed, 28 Dec 2011 18:41:36 +0000 (18:41 +0000)
* 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
includes/Linker.php
includes/diff/DifferenceEngine.php
includes/specials/SpecialContributions.php

index aaef36e..2fdcd1a 100644 (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 .= ' ';
                }
 
index 35cf756..e789113 100644 (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
+               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 '';
        }
 
        /**
index 3236e61..f645d3b 100644 (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 = '&#160;&#160;&#160;' . $link . ' ';
                }
                return $link;
index 315e640..865295b 100644 (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 . ')';