check 'undelete' for undelete page links
[lhc/web/wiklou.git] / includes / specials / SpecialDeletedContributions.php
index 3ac6b79..3e1f7bc 100644 (file)
@@ -11,7 +11,7 @@ class DeletedContribsPager extends IndexPager {
 
        function __construct( $target, $namespace = false ) {
                parent::__construct();
-               foreach( explode( ' ', 'deletionlog undeletebtn minoreditletter diff' ) as $msg ) {
+               foreach( explode( ' ', 'deletionlog undeleteviewlink diff' ) as $msg ) {
                        $this->messages[$msg] = wfMsgExt( $msg, array( 'escape') );
                }
                $this->target = $target;
@@ -30,8 +30,11 @@ class DeletedContribsPager extends IndexPager {
                list( $index, $userCond ) = $this->getUserCond();
                $conds = array_merge( $userCond, $this->getNamespaceCond() );
                // Paranoia: avoid brute force searches (bug 17792)
-               if( !$wgUser->isAllowed( 'suppressrevision' ) ) {
-                       $conds[] = $this->mDb->bitAnd('ar_deleted', Revision::DELETED_USER) . ' = 0';
+               if( !$wgUser->isAllowed( 'deleterevision' ) ) {
+                       $conds[] = $this->mDb->bitAnd('ar_deleted',Revision::DELETED_USER) . ' = 0';
+               } else if( !$wgUser->isAllowed( 'suppressrevision' ) ) {
+                       $conds[] = $this->mDb->bitAnd('ar_deleted',Revision::SUPPRESSED_USER) .
+                               ' != ' . Revision::SUPPRESSED_USER;
                }
                return array(
                        'tables' => array( 'archive' ),
@@ -139,39 +142,33 @@ class DeletedContribsPager extends IndexPager {
 
                $reviewlink = $sk->linkKnown(
                        SpecialPage::getTitleFor( 'Undelete', $page->getPrefixedDBkey() ),
-                       $this->messages['undeletebtn']
+                       $this->messages['undeleteviewlink']
                );
 
-               $link = $sk->linkKnown(
-                       $undelete,
-                       htmlspecialchars( $page->getPrefixedText() ),
-                       array(),
-                       array(
-                               'target' => $page->getPrefixedText(),
-                               'timestamp' => $rev->getTimestamp()
-                       )
-               );
-
-               $last = $sk->linkKnown(
-                       $undelete,
-                       $this->messages['diff'],
-                       array(),
-                       array(
-                               'target' => $page->getPrefixedText(),
-                               'timestamp' => $rev->getTimestamp(),
-                               'diff' => 'prev'
-                       )
-               );
+               if( $wgUser->isAllowed('undelete') ) {
+                       $last = $sk->linkKnown(
+                               $undelete,
+                               $this->messages['diff'],
+                               array(),
+                               array(
+                                       'target' => $page->getPrefixedText(),
+                                       'timestamp' => $rev->getTimestamp(),
+                                       'diff' => 'prev'
+                               )
+                       );
+               } else {
+                       $last = $this->messages['diff'];
+               }
 
                $comment = $sk->revComment( $rev );
-               $d = htmlspecialchars( $wgLang->timeanddate( $rev->getTimestamp(), true ) );
+               $date = htmlspecialchars( $wgLang->timeanddate( $rev->getTimestamp(), true ) );
 
-               if( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
-                       $d = '<span class="history-deleted">' . $d . '</span>';
+               if( !$wgUser->isAllowed('undelete') || !$rev->userCan(Revision::DELETED_TEXT) ) {
+                       $link = $date; // unusable link
                } else {
                        $link = $sk->linkKnown(
                                $undelete,
-                               $d,
+                               $date,
                                array(),
                                array(
                                        'target' => $page->getPrefixedText(),
@@ -179,11 +176,15 @@ class DeletedContribsPager extends IndexPager {
                                )
                        );
                }
+               // Style deleted items
+               if( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
+                       $link = '<span class="history-deleted">' . $link . '</span>';
+               }
 
                $pagelink = $sk->link( $page );
 
                if( $rev->isMinor() ) {
-                       $mflag = '<abbr class="minor">' . $this->messages['minoreditletter'] . '</abbr> ';
+                       $mflag = ChangesList::flag( 'minor' );
                } else {
                        $mflag = '';
                }