For now revert the rev_deleted branch merge; don't want trunk to get too far gone...
authorBrion Vibber <brion@users.mediawiki.org>
Fri, 16 Mar 2007 16:01:07 +0000 (16:01 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Fri, 16 Mar 2007 16:01:07 +0000 (16:01 +0000)
Reverted: 20511, 20510, 20507, 20474, 20461, 20460, 20457, 20448, 20446

16 files changed:
RELEASE-NOTES
includes/Article.php
includes/ChangesList.php
includes/DefaultSettings.php
includes/DifferenceEngine.php
includes/Export.php
includes/ImagePage.php
includes/Linker.php
includes/LogPage.php
includes/PageHistory.php
includes/RecentChange.php
includes/SpecialBlockip.php
includes/SpecialLog.php
includes/SpecialRecentchanges.php
includes/SpecialRevisiondelete.php
includes/SpecialUndelete.php

index 6207714..9e1575b 100644 (file)
@@ -270,10 +270,6 @@ lighter making things easier to read.
 * (bug 3984) Searching in logs by title%
 * (bug 9244) When calling edit page for nonexistent section, generate error inside of just discarding edits, since edit links sometimes go to the wrong place.
 * Private logs can now be created using $wgLogRestrictions
-* (bug 3576) Revisiondelete completed (RSS feeds checked, carries over delete/undelete)
-* Log events, file revisions, archived revisions can be deleted with revisiondelete
-* Usernames can be hidden from block log, block list, and user list via blockip. These
-  blocks are instead logged privately
 * Show thumbnail of existing image if image exists already under this filename
 * (bug 5546) Watchlist reflects logged actions like move, protection, undelete
 * (bug 9019) No warning during upload if image description page exists, but no
index 3debb17..3c8d10e 100644 (file)
@@ -1652,7 +1652,7 @@ class Article {
         * @return bool true on success
         */
        function updateRestrictions( $limit = array(), $reason = '', $cascade = 0, $expiry = null ) {
-               global $wgUser, $wgRestrictionTypes, $wgContLang, $wgGroupPermissions;
+               global $wgUser, $wgRestrictionTypes, $wgContLang;
 
                $id = $this->mTitle->getArticleID();
                if( !$wgUser->isAllowed( 'protect' ) || wfReadOnly() || $id == 0 ) {
@@ -1707,11 +1707,6 @@ class Article {
                                $nullRevision = Revision::newNullRevision( $dbw, $id, $comment, true );
                                $nullRevId = $nullRevision->insertOn( $dbw );
 
-                               foreach( $limit as $action => $restrictions ) {
-                                       # Check if the group level required to edit also can protect pages
-                                       # Otherwise, people who cannot normally protect can "protect" pages via transclusion
-                                       $cascade = ( $cascade && isset($wgGroupPermissions[$restrictions]['protect']) && $wgGroupPermissions[$restrictions]['protect'] );       
-                               }
                                # Update restrictions table
                                foreach( $limit as $action => $restrictions ) {
                                        if ($restrictions != '' ) {
@@ -1787,8 +1782,6 @@ class Article {
                $confirm = $wgRequest->wasPosted() &&
                        $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) );
                $reason = $wgRequest->getText( 'wpReason' );
-               # Flag to hide all contents of the archived revisions
-               $suppress = $wgRequest->getVal( 'wpSuppress' ) && $wgUser->isAllowed('deleterevision');
 
                # This code desperately needs to be totally rewritten
 
@@ -1820,7 +1813,7 @@ class Article {
                }
 
                if( $confirm ) {
-                       $this->doDelete( $reason, $suppress );
+                       $this->doDelete( $reason );
                        if( $wgRequest->getCheck( 'wpWatch' ) ) {
                                $this->doWatch();
                        } elseif( $this->mTitle->userIsWatching() ) {
@@ -1966,14 +1959,7 @@ class Article {
                $delcom = htmlspecialchars( wfMsg( 'deletecomment' ) );
                $token = htmlspecialchars( $wgUser->editToken() );
                $watch = Xml::checkLabel( wfMsg( 'watchthis' ), 'wpWatch', 'wpWatch', $wgUser->getBoolOption( 'watchdeletion' ) || $this->mTitle->userIsWatching(), array( 'tabindex' => '2' ) );
-               if ( $wgUser->isAllowed( 'deleterevision' ) ) {
-                       $supress = "<tr><td>&nbsp;</td><td>";
-                       $supress .= Xml::checkLabel( wfMsg( 'revdelete-suppress' ), 'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '2' ) );
-                       $supress .= "</td></tr>";
-               } else {
-                       $supress = '';
-               }
-               
+
                $wgOut->addHTML( "
 <form id='deleteconfirm' method='post' action=\"{$formaction}\">
        <table border='0'>
@@ -1985,7 +1971,6 @@ class Article {
                                <input type='text' size='60' name='wpReason' id='wpReason' value=\"" . htmlspecialchars( $reason ) . "\" tabindex=\"1\" />
                        </td>
                </tr>
-               $supress
                <tr>
                        <td>&nbsp;</td>
                        <td>$watch</td>
@@ -2024,12 +2009,12 @@ class Article {
        /**
         * Perform a deletion and output success or failure messages
         */
-       function doDelete( $reason, $suppress = false ) {
+       function doDelete( $reason ) {
                global $wgOut, $wgUser;
                wfDebug( __METHOD__."\n" );
 
                if (wfRunHooks('ArticleDelete', array(&$this, &$wgUser, &$reason))) {
-                       if ( $this->doDeleteArticle( $reason, $suppress ) ) {
+                       if ( $this->doDeleteArticle( $reason ) ) {
                                $deleted = wfEscapeWikiText( $this->mTitle->getPrefixedText() );
 
                                $wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
@@ -2052,7 +2037,7 @@ class Article {
         * Deletes the article with database consistency, writes logs, purges caches
         * Returns success
         */
-       function doDeleteArticle( $reason, $suppress = false ) {
+       function doDeleteArticle( $reason ) {
                global $wgUseSquid, $wgDeferredUpdateList;
                global $wgUseTrackbacks;
 
@@ -2070,17 +2055,6 @@ class Article {
                $u = new SiteStatsUpdate( 0, 1, -(int)$this->isCountable( $this->getContent() ), -1 );
                array_push( $wgDeferredUpdateList, $u );
 
-               // Bitfields to further supress the content
-               if ( $suppress ) {
-                       $bitfield = 0;
-                       $bitfield |= Revision::DELETED_TEXT;
-                       $bitfield |= Revision::DELETED_COMMENT;
-                       $bitfield |= Revision::DELETED_USER;
-                       $bitfield |= Revision::DELETED_RESTRICTED;
-               } else {
-                       $bitfield = 'rev_deleted';
-               }
-               
                // For now, shunt the revision data into the archive table.
                // Text is *not* removed from the text table; bulk storage
                // is left intact to avoid breaking block-compression or
@@ -2104,7 +2078,7 @@ class Article {
                                'ar_text_id'    => 'rev_text_id',
                                'ar_text'       => '\'\'', // Be explicit to appease
                                'ar_flags'      => '\'\'', // MySQL's "strict mode"...
-                               'ar_deleted'    => $bitfield
+                               'ar_len'                => 'rev_len'
                        ), array(
                                'page_id' => $id,
                                'page_id = rev_page'
@@ -2145,9 +2119,8 @@ class Article {
                # Clear caches
                Article::onArticleDelete( $this->mTitle );
 
-               # Log the deletion, if the page was suppressed, log it at Oversight instead
-               $logtype = ($suppress) ? 'oversight' : 'delete';
-               $log = new LogPage( $logtype );
+               # Log the deletion
+               $log = new LogPage( 'delete' );
                $log->addEntry( 'delete', $this->mTitle, $reason );
 
                # Clear the cached article id so the interface doesn't act like we exist
@@ -2253,13 +2226,8 @@ class Article {
                        );
                }
 
-               $target = Revision::newFromId( $s->rev_id );
-               # Revision *must* be public and we don't well handle deleted edits on top
-               if ( $target->isDeleted(REVISION::DELETED_TEXT) ) {
-                       $wgOut->setPageTitle( wfMsg('rollbackfailed') );
-                       $wgOut->addHTML( wfMsg( 'missingarticle' ) );
-               }
                # Get the edit summary
+               $target = Revision::newFromId( $s->rev_id );
                $newComment = wfMsgForContent( 'revertpage', $target->getUserText(), $from );
                $newComment = $wgRequest->getText( 'summary', $newComment );
 
@@ -2437,30 +2405,10 @@ class Article {
                        ? wfMsg( 'diff' )
                        : $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'diff' ), 'diff=next&oldid='.$oldid );
 
-               $cdel='';
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {          
-                       $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-                       if( $revision->isCurrent() ) {
-                       // We don't handle top deleted edits too well
-                               $cdel = wfMsgHtml('rev-delundel');      
-                       } else if( !$revision->userCan( Revision::DELETED_RESTRICTED ) ) {
-                       // If revision was hidden from sysops
-                               $cdel = wfMsgHtml('rev-delundel');      
-                       } else {
-                               $cdel = $sk->makeKnownLinkObj( $revdel,
-                                       wfMsgHtml('rev-delundel'),
-                                       'target=' . urlencode( $this->mTitle->getPrefixedDbkey() ) .
-                                       '&oldid=' . urlencode( $oldid ) );
-                               // Bolden oversighted content
-                               if( $revision->isDeleted( Revision::DELETED_RESTRICTED ) )
-                                       $cdel = "<strong>$cdel</strong>";
-                       }
-                       $cdel = "(<small>$cdel</small>)";
-               }
-
-               $userlinks = $sk->revUserTools( $revision, true );
+               $userlinks = $sk->userLink( $revision->getUser(), $revision->getUserText() )
+                                               . $sk->userToolLinks( $revision->getUser(), $revision->getUserText() );
 
-               $r = "\n\t\t\t\t<div id=\"mw-revision-info\">" . "<tt>$cdel</tt>" . wfMsg( 'revision-info', $td, $userlinks ) . "</div>\n" .
+               $r = "\n\t\t\t\t<div id=\"mw-revision-info\">" . wfMsg( 'revision-info', $td, $userlinks ) . "</div>\n" .
                     "\n\t\t\t\t<div id=\"mw-revision-nav\">" . wfMsg( 'revision-nav', $prevdiff, $prevlink, $lnk, $curdiff, $nextlink, $nextdiff ) . "</div>\n\t\t\t";
                $wgOut->setSubtitle( $r );
        }
index 3e51146..43fd543 100644 (file)
 class RCCacheEntry extends RecentChange
 {
        var $secureName, $link;
-       var $curlinks, $difflink, $lastlink , $usertalklink , $versionlink ;
+       var $curlink , $difflink, $lastlink , $usertalklink , $versionlink ;
        var $userlink, $timestamp, $watched;
 
-       function newFromParent( $rc )
-       {
+       function newFromParent( $rc ) {
                $rc2 = new RCCacheEntry;
                $rc2->mAttribs = $rc->mAttribs;
                $rc2->mExtra = $rc->mExtra;
@@ -25,7 +24,6 @@ class RCCacheEntry extends RecentChange
 } ;
 
 /**
- * @package MediaWiki
  */
 class ChangesList {
        # Called by history lists and recent changes
@@ -79,7 +77,7 @@ class ChangesList {
                                : $nothing;
                $f .= $bot ? '<span class="bot">' . $this->message['boteditletter'] . '</span>' : $nothing;
                $f .= $patrolled ? '<span class="unpatrolled">!</span>' : $nothing;
-               return "<tt>$f</tt>";
+               return $f;
        }
 
        /**
@@ -105,32 +103,6 @@ class ChangesList {
                }
        }
 
-       /**
-        * int $field one of DELETED_* bitfield constants
-        * @return bool
-        */
-       function isDeleted( $rc, $field ) {
-               return ($rc->mAttribs['rc_deleted'] & $field) == $field;
-       }
-       
-       /**
-        * Determine if the current user is allowed to view a particular
-        * field of this revision, if it's marked as deleted.
-        * @param int $field
-        * @return bool
-        */
-       function userCan( $rc, $field ) {
-               if( ( $rc->mAttribs['rc_deleted'] & $field ) == $field ) {
-                       global $wgUser;
-                       $permission = ( $rc->mAttribs['rc_deleted'] & Revision::DELETED_RESTRICTED ) == Revision::DELETED_RESTRICTED
-                               ? 'hiderevision'
-                               : 'deleterevision';
-                       wfDebug( "Checking for $permission due to $field match on $rc->mAttribs['rc_deleted']\n" );
-                       return $wgUser->isAllowed( $permission );
-               } else {
-                       return true;
-               }
-       }
 
        function insertMove( &$s, $rc ) {
                # Diff
@@ -166,11 +138,10 @@ class ChangesList {
                $s .= '(' . $this->skin->makeKnownLinkObj($title, $logname ) . ')';
        }
 
+
        function insertDiffHist(&$s, &$rc, $unpatrolled) {
                # Diff link
-               if( !$this->userCan($rc,Revision::DELETED_TEXT) ) {
-                       $diffLink = $this->message['diff'];
-               } else if( $rc->mAttribs['rc_type'] == RC_NEW || $rc->mAttribs['rc_type'] == RC_LOG) {
+               if( $rc->mAttribs['rc_type'] == RC_NEW || $rc->mAttribs['rc_type'] == RC_LOG ) {
                        $diffLink = $this->message['diff'];
                } else {
                        $rcidparam = $unpatrolled
@@ -201,12 +172,7 @@ class ChangesList {
                $params = ( $unpatrolled && $rc->mAttribs['rc_type'] == RC_NEW )
                        ? 'rcid='.$rc->mAttribs['rc_id']
                        : '';
-               if( $this->isDeleted($rc,Revision::DELETED_TEXT) ) {
-                       $articlelink = $this->skin->makeKnownLinkObj( $rc->getTitle(), '', $params );
-                       $articlelink = '<span class="history-deleted">'.$articlelink.'</span>';
-               } else {
-                   $articlelink = ' '. $this->skin->makeKnownLinkObj( $rc->getTitle(), '', $params );
-               }
+               $articlelink = ' '. $this->skin->makeKnownLinkObj( $rc->getTitle(), '', $params );
                if($watched) $articlelink = '<strong>'.$articlelink.'</strong>';
                global $wgContLang;
                $articlelink .= $wgContLang->getDirMark();
@@ -222,37 +188,15 @@ class ChangesList {
 
        /** Insert links to user page, user talk page and eventually a blocking link */
        function insertUserRelatedLinks(&$s, &$rc) {
-               if ( $this->isDeleted($rc,Revision::DELETED_USER) ) {
-                  $s .= ' <span class="history-deleted">' . wfMsgHtml('rev-deleted-user') . '</span>';   
-               } else {
-                 $s .= $this->skin->userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
-                 $s .= $this->skin->userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
-               }
-       }
-
-       /** insert a formatted action */
-       function insertAction(&$s, &$rc) {
-               # Add comment
-               if( $rc->mAttribs['rc_type'] == RC_LOG ) {
-                       // log action
-                       if ( $this->isDeleted($rc,LogViewer::DELETED_ACTION) ) {
-                               $s .= ' <span class="history-deleted">' . wfMsgHtml('rev-deleted-event') . '</span>';
-                       } else {
-                               $s .= ' ' . LogPage::actionText( $rc->mAttribs['rc_log_type'], $rc->mAttribs['rc_log_action'], $rc->getTitle(), $this->skin, LogPage::extractParams($rc->mAttribs['rc_params']), true, true );
-                       }
-               }
+               $s .= $this->skin->userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
+               $s .= $this->skin->userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
        }
 
        /** insert a formatted comment */
        function insertComment(&$s, &$rc) {
                # Add comment
                if( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) {
-                       // log comment
-                       if ( $this->isDeleted($rc,Revision::DELETED_COMMENT) ) {
-                               $s .= ' <span class="history-deleted">' . wfMsgHtml('rev-deleted-comment') . '</span>';
-                       } else {
-                               $s .= $this->skin->commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
-                       }
+                       $s .= $this->skin->commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
                }
        }
 
@@ -308,23 +252,19 @@ class OldChangesList extends ChangesList {
 
                $s .= '<li>';
 
-               // Moved pages
+               // moved pages
                if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
                        $this->insertMove( $s, $rc );
-               // Log entries (old format) or log targets, and special pages
-               } elseif( $rc_namespace == NS_SPECIAL ) {
+               // log entries
+               } elseif ( $rc_namespace == NS_SPECIAL ) {
                        list( $specialName, $specialSubpage ) = SpecialPage::resolveAliasWithSubpage( $rc_title );
                        if ( $specialName == 'Log' ) {
                                $this->insertLog( $s, $rc->getTitle(), $specialSubpage );
                        } else {
                                wfDebug( "Unexpected special page in recentchanges\n" );
                        }
-               // Log entries
-               } elseif( $rc_log_type !='' ) {
-                       $logtitle = Title::newFromText( "Log/$rc_log_type", NS_SPECIAL );
-                       $this->insertLog( $s, $logtitle, $rc_log_type );
-               // All other stuff
-               }  else {
+               // all other stuff
+               } else {
                        wfProfileIn($fname.'-page');
 
                        $this->insertDiffHist($s, $rc, $unpatrolled);
@@ -345,15 +285,9 @@ class OldChangesList extends ChangesList {
                }
 
                $this->insertUserRelatedLinks($s,$rc);
-               $this->insertAction($s, $rc);
                $this->insertComment($s, $rc);
-               
-               # Mark revision as deleted
-               if ( !$rc_log_type && $this->isDeleted($rc,Revision::DELETED_TEXT) )
-                  $s .= ' <tt>' . wfMsgHtml( 'deletedrev' ) . '</tt>';
-               if($rc->numberofWatchingusers > 0) {
-                       $s .= ' ' . wfMsg('number_of_watching_users_RCview',  $wgContLang->formatNum($rc->numberofWatchingusers));
-               }
+
+               $s .=  rtrim(' ' . $this->numberofWatchingusers($rc->numberofWatchingusers));
 
                $s .= "</li>\n";
 
@@ -401,14 +335,12 @@ class EnhancedChangesList extends ChangesList {
                        $rc->unpatrolled = false;
                }
 
-               $showrev=true;
                # Make article link
                if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
                        $msg = ( $rc_type == RC_MOVE ) ? "1movedto2" : "1movedto2_redir";
                        $clink = wfMsg( $msg, $this->skin->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
                          $this->skin->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
-               } else if( $rc_namespace == NS_SPECIAL ) {
-               // Log entries (old format) and special pages
+               } elseif( $rc_namespace == NS_SPECIAL ) {
                        list( $specialName, $logtype ) = SpecialPage::resolveAliasWithSubpage( $rc_title );
                        if ( $specialName == 'Log' ) {
                                # Log updates, etc
@@ -418,16 +350,7 @@ class EnhancedChangesList extends ChangesList {
                                wfDebug( "Unexpected special page in recentchanges\n" );
                                $clink = '';
                        }
-               } elseif ( $rc_log_type !='' ) {
-               // Log entries
-                       $logtitle = Title::newFromText( "Log/$rc_log_type", NS_SPECIAL );
-                       $logname = LogPage::logName( $rc_log_type );
-                       $clink = '(' . $this->skin->makeKnownLinkObj($logtitle, $logname ) . ')';
-               } if ( $this->isDeleted($rc,Revision::DELETED_TEXT) ) {
-                   $clink = '<span class="history-deleted">' . $this->skin->makeKnownLinkObj( $rc->getTitle(), '' ) . '</span>';
-                   if ( !ChangesList::userCan($rc,Revision::DELETED_TEXT) )
-                      $showrev=false;
-               } else if( $rc->unpatrolled && $rc_type == RC_NEW ) {
+               } elseif( $rc->unpatrolled && $rc_type == RC_NEW ) {
                        # Unpatrolled new page, give rc_id in query
                        $clink = $this->skin->makeKnownLinkObj( $rc->getTitle(), '', "rcid={$rc_id}" );
                } else {
@@ -450,10 +373,7 @@ class EnhancedChangesList extends ChangesList {
                $querydiff = $curIdEq."&diff=$rc_this_oldid&oldid=$rc_last_oldid$rcIdQuery";
                $aprops = ' tabindex="'.$baseRC->counter.'"';
                $curLink = $this->skin->makeKnownLinkObj( $rc->getTitle(), $this->message['cur'], $querycur, '' ,'', $aprops );
-               if ( !$showrev ) {
-                  $curLink = $this->message['cur'];
-                  $diffLink = $this->message['diff'];
-               } else if( $rc_type == RC_NEW || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+               if( $rc_type == RC_NEW || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
                        if( $rc_type != RC_NEW ) {
                                $curLink = $this->message['cur'];
                        }
@@ -463,27 +383,21 @@ class EnhancedChangesList extends ChangesList {
                }
 
                # Make "last" link
-               if ( !$showrev ) {
-                   $lastLink = $this->message['last'];
-               } else if( $rc_last_oldid == 0 || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+               if( $rc_last_oldid == 0 || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
                        $lastLink = $this->message['last'];
                } else {
                        $lastLink = $this->skin->makeKnownLinkObj( $rc->getTitle(), $this->message['last'],
-                       $curIdEq.'&diff='.$rc_this_oldid.'&oldid='.$rc_last_oldid . $rcIdQuery );
-               }
-               
-               # Make user links
-               if ( $this->isDeleted($rc,Revision::DELETED_USER) ) {
-                       $rc->userlink = ' <span class="history-deleted">' . wfMsgHtml('rev-deleted-user') . '</span>';
-               } else {
-                       $rc->userlink = $this->skin->userLink( $rc_user, $rc_user_text );
-                       $rc->usertalklink = $this->skin->userToolLinks( $rc_user, $rc_user_text );
+                         $curIdEq.'&diff='.$rc_this_oldid.'&oldid='.$rc_last_oldid . $rcIdQuery );
                }
 
+               $rc->userlink = $this->skin->userLink( $rc_user, $rc_user_text );
+
                $rc->lastlink = $lastLink;
                $rc->curlink  = $curLink;
                $rc->difflink = $diffLink;
 
+               $rc->usertalklink = $this->skin->userToolLinks( $rc_user, $rc_user_text );
+
                # Put accumulated information into the cache, for later display
                # Page moves go on their own line
                $title = $rc->getTitle();
@@ -505,11 +419,10 @@ class EnhancedChangesList extends ChangesList {
         */
        function recentChangesBlockGroup( $block ) {
                global $wgLang, $wgContLang, $wgRCShowChangedSize;
-               $r = '<table cellpadding="0" cellspacing="0"><tr>';
+               $r = '';
 
                # Collate list of users
                $isnew = false;
-               $namehidden = true;
                $unpatrolled = false;
                $userlinks = array();
                foreach( $block as $rcObj ) {
@@ -517,11 +430,6 @@ class EnhancedChangesList extends ChangesList {
                        if( $rcObj->mAttribs['rc_new'] ) {
                                $isnew = true;
                        }
-                       // if all log actions to this page were hidden, then don't
-                       // give the name of the affected page for this block
-                       if( !($rcObj->mAttribs['rc_deleted'] & LogViewer::DELETED_ACTION) ) {
-                               $namehidden = false;
-                       }
                        $u = $rcObj->userlink;
                        if( !isset( $userlinks[$u] ) ) {
                                $userlinks[$u] = 0;
@@ -555,25 +463,24 @@ class EnhancedChangesList extends ChangesList {
                $toggleLink = "javascript:toggleVisibility('$rci','$rcm','$rcl')";
                $tl  = '<span id="'.$rcm.'"><a href="'.$toggleLink.'">' . $this->sideArrow() . '</a></span>';
                $tl .= '<span id="'.$rcl.'" style="display:none"><a href="'.$toggleLink.'">' . $this->downArrow() . '</a></span>';
-               $r .= '<td valign="top">'.$tl;
+               $r .= $tl;
 
                # Main line
-               $r .= ' '.$this->recentChangesFlags( $isnew, false, $unpatrolled, '&nbsp;', $bot );
+               $r .= '<tt>';
+               $r .= $this->recentChangesFlags( $isnew, false, $unpatrolled, '&nbsp;', $bot );
 
                # Timestamp
-               $r .= ' '.$block[0]->timestamp.'&nbsp;&nbsp;</td><td>';
+               $r .= ' '.$block[0]->timestamp.' </tt>';
 
                # Article link
-               if ( $namehidden )
-                       $r .= ' <span class="history-deleted">' . wfMsgHtml('rev-deleted-event') . '</span>';
-               else
-                       $r .= $this->maybeWatchedLink( $block[0]->link, $block[0]->watched );
+               $r .= $this->maybeWatchedLink( $block[0]->link, $block[0]->watched );
                $r .= $wgContLang->getDirMark();
 
                $curIdEq = 'curid=' . $block[0]->mAttribs['rc_cur_id'];
                $currentRevision = $block[0]->mAttribs['rc_this_oldid'];
                if( $block[0]->mAttribs['rc_type'] != RC_LOG ) {
                        # Changes
+
                        $n = count($block);
                        static $nchanges = array();
                        if ( !isset( $nchanges[$n] ) ) {
@@ -583,95 +490,77 @@ class EnhancedChangesList extends ChangesList {
 
                        $r .= ' (';
 
-                       if( !ChangesList::userCan($rcObj,Revision::DELETED_TEXT) ) {
-                           $r .= $nchanges[$n];
-                       } else if( $isnew ) {
+                       if( $isnew ) {
                                $r .= $nchanges[$n];
                        } else {
                                $r .= $this->skin->makeKnownLinkObj( $block[0]->getTitle(),
                                        $nchanges[$n], $curIdEq."&diff=$currentRevision&oldid=$oldid" );
                        }
 
+                       $r .= ') . . ';
+
                        # Character difference
                        $chardiff = $rcObj->getCharacterDifference( $block[ count( $block ) - 1 ]->mAttribs['rc_old_len'],
                                        $block[0]->mAttribs['rc_new_len'] );
                        if( $chardiff == '' ) {
-                               $r .= '';
+                               $r .= ' (';
                        } else {
-                               $r .= '; ' . $chardiff . ' ';
+                               $r .= ' ' . $chardiff. ' . . (';
                        }
+                       
 
                        # History
-                       $r .= $this->skin->makeKnownLinkObj( $block[0]->getTitle(), $this->message['history'], $curIdEq.'&action=history' );
-
+                       $r .= $this->skin->makeKnownLinkObj( $block[0]->getTitle(),
+                               $this->message['history'], $curIdEq.'&action=history' );
                        $r .= ')';
                }
 
                $r .= $users;
-               $r .=$this->numberofWatchingusers($block[0]->numberofWatchingusers);
-               
-               $r .= "</td></tr></table>\n";
+
+               $r .= $this->numberofWatchingusers($block[0]->numberofWatchingusers);
+               $r .= "<br />\n";
 
                # Sub-entries
-               $r .= '<div id="'.$rci.'" style="display:none; font-size:95%;"><table cellpadding="0" cellspacing="0">';
+               $r .= '<div id="'.$rci.'" style="display:none">';
                foreach( $block as $rcObj ) {
                        # Get rc_xxxx variables
                        // FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
                        extract( $rcObj->mAttribs );
 
-                       #$r .= '<tr><td valign="top">'.$this->spacerArrow();
-                       $r .= '<tr><td valign="top">'.$this->spacerIndent();
-                       $r .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
+                       $r .= $this->spacerArrow();
+                       $r .= '<tt>&nbsp; &nbsp; &nbsp; &nbsp;';
                        $r .= $this->recentChangesFlags( $rc_new, $rc_minor, $rcObj->unpatrolled, '&nbsp;', $rc_bot );
-                       $r .= '&nbsp;&nbsp;</td><td valign="top">';
+                       $r .= '&nbsp;</tt>';
 
                        $o = '';
                        if( $rc_this_oldid != 0 ) {
                                $o = 'oldid='.$rc_this_oldid;
                        }
-                       # Revision link
                        if( $rc_type == RC_LOG ) {
-                               $link = $rcObj->timestamp.' ';
-                       } else if( !ChangesList::userCan($rcObj,Revision::DELETED_TEXT) ) {
-                               $link = '<span class="history-deleted">'.$rcObj->timestamp.'</span> ';
+                               $link = $rcObj->timestamp;
                        } else {
                                $link = $this->skin->makeKnownLinkObj( $rcObj->getTitle(), $rcObj->timestamp, $curIdEq.'&'.$o );
-                               if( $this->isDeleted($rcObj,Revision::DELETED_TEXT) )
-                                       $link = '<span class="history-deleted">'.$link.'</span> ';
                        }
+                       $link = '<tt>'.$link.'</tt>';
+
                        $r .= $link;
-                       
-                       if ( !$rc_log_type ) {
-                               $r .= ' (';
-                               $r .= $rcObj->curlink;
-                               $r .= '; ';
-                               $r .= $rcObj->lastlink;
-                               $r .= ')';
-                       } else {
-                               $logname = LogPage::logName( $rc_log_type );
-                               $logtitle = Title::newFromText( "Log/$rc_log_type", NS_SPECIAL );
-                               $r .= '(' . $this->skin->makeKnownLinkObj($logtitle, $logname ) . ')';
-                       }
-                       $r .= ' . . ';
+                       $r .= ' (';
+                       $r .= $rcObj->curlink;
+                       $r .= '; ';
+                       $r .= $rcObj->lastlink;
+                       $r .= ') . . ';
 
                        # Character diff
                        if( $wgRCShowChangedSize ) {
                                $r .= ( $rcObj->getCharacterDifference() == '' ? '' : $rcObj->getCharacterDifference() . ' . . ' ) ;
                        }
-                       # User links
+
                        $r .= $rcObj->userlink;
                        $r .= $rcObj->usertalklink;
-                       // log action
-                       parent::insertAction($r, $rcObj);
-                       // log comment
-                       parent::insertComment($r, $rcObj);
-                       # Mark revision as deleted
-                       if ( !$rc_log_type && $this->isDeleted($rcObj,Revision::DELETED_TEXT) )
-                               $s .= ' <tt>' . wfMsgHtml( 'deletedrev' ) . '</tt>';
-
-                       $r .= "</td></tr>\n";
+                       $r .= $this->skin->commentBlock( $rc_comment, $rcObj->getTitle() );
+                       $r .= "<br />\n";
                }
-               $r .= "</table></div>\n";
+               $r .= "</div>\n";
 
                $this->rcCacheIndex++;
                return $r;
@@ -728,23 +617,8 @@ class EnhancedChangesList extends ChangesList {
         * @access private
         */
        function spacerArrow() {
-       //FIXME: problems with FF 1.5x
                return $this->arrow( '', ' ' );
        }
-       
-       /**
-        * Generate HTML for the equivilant of a spacer image for tables
-        * @return string HTML <td> tag
-        * @access private
-        */     
-       function spacerColumn() {
-               return '<td width="12"></td>';
-       }       
-       
-       // Adds a few spaces
-       function spacerIndent() {
-               return '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
-       }       
 
        /**
         * Enhanced RC ungrouped line.
@@ -758,64 +632,46 @@ class EnhancedChangesList extends ChangesList {
                extract( $rcObj->mAttribs );
                $curIdEq = 'curid='.$rc_cur_id;
 
-               $r = '<table cellspacing="0" cellpadding="0"><tr><td>';
+               $r = '';
+
+               # Spacer image
+               $r .= $this->spacerArrow();
 
-               # spacerArrow() causes issues in FF
-               $r .= $this->spacerColumn();
-               $r .= '<td valign="top">';
-               
                # Flag and Timestamp
+               $r .= '<tt>';
+
                if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
-                       $r .= '&nbsp;&nbsp;&nbsp;&nbsp;';
+                       $r .= '&nbsp;&nbsp;&nbsp;';
                } else {
-                       $r .= '&nbsp;'.$this->recentChangesFlags( $rc_type == RC_NEW, $rc_minor, $rcObj->unpatrolled, '&nbsp;', $rc_bot );
+                       $r .= $this->recentChangesFlags( $rc_type == RC_NEW, $rc_minor, $rcObj->unpatrolled, '&nbsp;', $rc_bot );
                }
-               $r .= '&nbsp;'.$rcObj->timestamp.'&nbsp;&nbsp;</td><td>';
-               
+               $r .= ' '.$rcObj->timestamp.' </tt>';
+
                # Article link
-               if ( $rc_log_type !='' ) {
-                       $logtitle = Title::newFromText( "Log/$rc_log_type", NS_SPECIAL );
-                       $logname = LogPage::logName( $rc_log_type );
-                       $r .= '(' . $this->skin->makeKnownLinkObj($logtitle, $logname ) . ')';
-               // All other stuff
-               } else {
-                       $r .= $this->maybeWatchedLink( $rcObj->link, $rcObj->watched );
-               }
-               if ( $rc_type != RC_LOG ) {
-                  # Diff
-                  $r .= ' ('. $rcObj->difflink .'; ';
-                  # Hist
-                  $r .= $this->skin->makeKnownLinkObj( $rcObj->getTitle(), wfMsg( 'hist' ), $curIdEq.'&action=history' ) . ')';
-               }
-               $r .= ' . . ';
-               
+               $r .= $this->maybeWatchedLink( $rcObj->link, $rcObj->watched );
+
+               # Diff
+               $r .= ' ('. $rcObj->difflink .'; ';
+
+               # Hist
+               $r .= $this->skin->makeKnownLinkObj( $rcObj->getTitle(), wfMsg( 'hist' ), $curIdEq.'&action=history' ) . ') . . ';
+
                # Character diff
                if( $wgRCShowChangedSize ) {
                        $r .= ( $rcObj->getCharacterDifference() == '' ? '' : '&nbsp;' . $rcObj->getCharacterDifference() . ' . . ' ) ;
                }
 
                # User/talk
-               $r .= ' '.$rcObj->userlink . $rcObj->usertalklink;
+               $r .= $rcObj->userlink . $rcObj->usertalklink;
 
                # Comment
                if( $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT ) {
-                       // log action
-                       if ( $this->isDeleted($rcObj,LogViewer::DELETED_ACTION) ) {
-                          $r .= ' <span class="history-deleted">' . wfMsgHtml('rev-deleted-event') . '</span>';
-                       } else {
-                               $r .= ' ' . LogPage::actionText( $rc_log_type, $rc_log_action, $rcObj->getTitle(), $this->skin, LogPage::extractParams($rc_params), true, true );
-                       } 
-                       // log comment
-                       if ( $this->isDeleted($rcObj,LogViewer::DELETED_COMMENT) ) {
-                          $r .= ' <span class="history-deleted">' . wfMsg('rev-deleted-comment') . '</span>';
-                       } else {
-                         $r .= $this->skin->commentBlock( $rc_comment, $rcObj->getTitle() );
-                       }
+                       $r .= $this->skin->commentBlock( $rc_comment, $rcObj->getTitle() );
                }
 
                $r .= $this->numberofWatchingusers($rcObj->numberofWatchingusers);
 
-               $r .= "</td></tr></table>\n";
+               $r .= "<br />\n";
                return $r;
        }
 
index 65a4d02..7b8df3f 100644 (file)
@@ -169,7 +169,7 @@ $wgUploadBaseUrl    = "";
  * is writable to the web server but is not exposed to the internet.
  *
  * Set $wgSaveDeletedFiles to true and set up the save path in
- * $wgFileStore['deleted']['directory']
+ * $wgFileStore['deleted']['directory'].
  */
 $wgSaveDeletedFiles = false;
 
@@ -983,7 +983,6 @@ $wgGroupPermissions['bot'  ]['nominornewtalk']  = true;
 $wgGroupPermissions['sysop']['block']           = true;
 $wgGroupPermissions['sysop']['createaccount']   = true;
 $wgGroupPermissions['sysop']['delete']          = true;
-$wgGroupPermissions['sysop']['browsearchive']  = true; // can see the deleted page list
 $wgGroupPermissions['sysop']['deletedhistory']         = true; // can view deleted history entries, but not see or restore the text
 $wgGroupPermissions['sysop']['editinterface']   = true;
 $wgGroupPermissions['sysop']['import']          = true;
@@ -1006,17 +1005,9 @@ $wgGroupPermissions['sysop']['ipblock-exempt']   = true;
 // Permission to change users' group assignments
 $wgGroupPermissions['bureaucrat']['userrights'] = true;
 
-// Experimental permissions to enable revisiondelete:
-
+// Experimental permissions, not ready for production use
 //$wgGroupPermissions['sysop']['deleterevision'] = true;
-//$wgGroupPermissions['sysop']['hideuser'] = true;
-// To see hidden revs
 //$wgGroupPermissions['bureaucrat']['hiderevision'] = true;
-// For private log access
-//$wgGroupPermissions['bureaucrat']['oversight'] = true;
-// Also, we may want titles to be effectively hidden
-//$wgGroupPermissions['sysop']['browsearchive'] = false;
-//$wgGroupPermissions['bureaucrat']['browsearchive'] = true;
 
 /**
  * The developer group is deprecated, but can be activated if need be
@@ -2032,17 +2023,6 @@ $wgLogTypes = array( '',
        'move',
        'import',
        'patrol',
-       'oversight',
-);
-
-/**
- * This restricts log access to those who have a certain right
- * Users without this will not see it in the option menu and can not view it
- * Restricted logs are not added to recent changes
- * Logs should remain non-transcludable
- */
-$wgLogRestrictions = array(
-'oversight' => 'oversight'
 );
 
 /**
@@ -2061,7 +2041,6 @@ $wgLogNames = array(
        'move'    => 'movelogpage',
        'import'  => 'importlogpage',
        'patrol'  => 'patrol-log-page',
-       'oversight'  => 'oversightlog',
 );
 
 /**
@@ -2080,7 +2059,6 @@ $wgLogHeaders = array(
        'move'    => 'movelogpagetext',
        'import'  => 'importlogpagetext',
        'patrol'  => 'patrol-log-header',
-       'oversight'  => 'overlogpagetext',
 );
 
 /**
@@ -2098,18 +2076,12 @@ $wgLogActions = array(
        'delete/delete'     => 'deletedarticle',
        'delete/restore'    => 'undeletedarticle',
        'delete/revision'   => 'revdelete-logentry',
-       'delete/event'          => 'logdelete-logentry',
        'upload/upload'     => 'uploadedimage',
        'upload/revert'     => 'uploadedimage',
        'move/move'         => '1movedto2',
        'move/move_redir'   => '1movedto2_redir',
        'import/upload'     => 'import-logentry-upload',
        'import/interwiki'  => 'import-logentry-interwiki',
-       'oversight/revision' => 'revdelete-logentry',
-       'oversight/file' => 'revdelete-logentry',
-       'oversight/event'   => 'logdelete-logentry',
-       'oversight/delete'  => 'deletedarticle',
-       'oversight/block'       => 'blocklogentry',
 );
 
 /**
index 31fab65..884e82a 100644 (file)
@@ -174,49 +174,14 @@ CONTROL;
                        $newminor = wfElement( 'span', array( 'class' => 'minor' ),
                        wfMsg( 'minoreditletter') ) . ' ';
                }
-               
-               $rdel = ''; $ldel = '';
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
-                       $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-                       if( !$this->mOldRev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                       // If revision was hidden from sysops
-                               $ldel = wfMsgHtml('rev-delundel');      
-                       } else {
-                               $ldel = $sk->makeKnownLinkObj( $revdel,
-                                       wfMsgHtml('rev-delundel'),
-                                       'target=' . urlencode( $this->mOldRev->mTitle->getPrefixedDbkey() ) .
-                                       '&oldid=' . urlencode( $this->mOldRev->getId() ) );
-                               // Bolden oversighted content
-                               if( $this->mOldRev->isDeleted( Revision::DELETED_RESTRICTED ) )
-                                       $ldel = "<strong>$ldel</strong>";
-                       }
-                       $ldel = "&nbsp;&nbsp;&nbsp;<tt>(<small>$ldel</small>)</tt> ";
-                       // We don't currently handle well changing the top revision's settings
-                       if( $this->mNewRev->isCurrent() ) {
-                       // If revision was hidden from sysops
-                               $rdel = wfMsgHtml('rev-delundel');      
-                       } else if( !$this->mNewRev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                       // If revision was hidden from sysops
-                               $rdel = wfMsgHtml('rev-delundel');      
-                       } else {
-                               $rdel = $sk->makeKnownLinkObj( $revdel,
-                                       wfMsgHtml('rev-delundel'),
-                                       'target=' . urlencode( $this->mNewRev->mTitle->getPrefixedDbkey() ) .
-                                       '&oldid=' . urlencode( $this->mNewRev->getId() ) );
-                               // Bolden oversighted content
-                               if( $this->mNewRev->isDeleted( Revision::DELETED_RESTRICTED ) )
-                                       $rdel = "<strong>$rdel</strong>";
-                       }
-                       $rdel = "&nbsp;&nbsp;&nbsp;<tt>(<small>$rdel</small>)</tt> ";
-               }
 
                $oldHeader = "<strong>{$this->mOldtitle}</strong><br />" .
-                       $sk->revUserTools( $this->mOldRev, true ) . "<br />" .
-                       $oldminor . $sk->revComment( $this->mOldRev, !$diffOnly, true ) . "$ldel<br />" .
+                       $sk->revUserTools( $this->mOldRev ) . "<br />" .
+                       $oldminor . $sk->revComment( $this->mOldRev, !$diffOnly ) . "<br />" .
                        $prevlink;
                $newHeader = "<strong>{$this->mNewtitle}</strong><br />" .
-                       $sk->revUserTools( $this->mNewRev, true ) . " $rollback<br />" .
-                       $newminor . $sk->revComment( $this->mNewRev, !$diffOnly, true ) . "$rdel<br />" .
+                       $sk->revUserTools( $this->mNewRev ) . " $rollback<br />" .
+                       $newminor . $sk->revComment( $this->mNewRev, !$diffOnly ) . "<br />" .
                        $nextlink . $patrol;
 
                $this->showDiff( $oldHeader, $newHeader );
@@ -237,10 +202,8 @@ CONTROL;
 
                $wgOut->addHTML( "<hr /><h2>{$this->mPagetitle}</h2>\n" );
                #add deleted rev tag if needed
-               if( !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) {
+               if ( !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) {
                        $wgOut->addWikiText( wfMsg( 'rev-deleted-text-permission' ) );
-               } else if( $this->mNewRev->isDeleted(Revision::DELETED_TEXT) ) {
-                       $wgOut->addWikiText( wfMsg( 'rev-deleted-text-view' ) );
                }
 
                if( !$this->mNewRev->isCurrent() ) {
@@ -369,25 +332,20 @@ CONTROL;
                        }
                }
 
-               // Loadtext is permission safe, this just clears out the diff
+               #loadtext is permission safe, this just clears out the diff
                if ( !$this->loadText() ) {
                        wfProfileOut( $fname );
                        return false;
                } else if ( $this->mOldRev && !$this->mOldRev->userCan(Revision::DELETED_TEXT) ) {
-                       return '';
+                 return '';
                } else if ( $this->mNewRev && !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) {
-                       return '';
+                 return '';
                }
 
                $difftext = $this->generateDiffBody( $this->mOldtext, $this->mNewtext );
                
                // Save to cache for 7 days
-               // Only do this for public revs, otherwise an admin can view the diff and a non-admin can nab it!
-               if ( $this->mOldRev && $this->mOldRev->isDeleted(Revision::DELETED_TEXT) ) {
-                       wfIncrStats( 'diff_uncacheable' );
-               } else if ( $this->mNewRev && $this->mNewRev->isDeleted(Revision::DELETED_TEXT) ) {
-                       wfIncrStats( 'diff_uncacheable' );
-               } else if ( $key !== false && $difftext !== false ) {
+               if ( $key !== false && $difftext !== false ) {
                        wfIncrStats( 'diff_cache_miss' );
                        $wgMemc->set( $key, $difftext, 7*86400 );
                } else {
@@ -521,7 +479,13 @@ CONTROL;
         */
        function addHeader( $diff, $otitle, $ntitle, $multi = '' ) {
                global $wgOut;
-
+       
+               if ( $this->mOldRev && $this->mOldRev->isDeleted(Revision::DELETED_TEXT) ) {
+                  $otitle = '<span class="history-deleted">'.$otitle.'</span>';
+               }
+               if ( $this->mNewRev && $this->mNewRev->isDeleted(Revision::DELETED_TEXT) ) {
+                  $ntitle = '<span class="history-deleted">'.$ntitle.'</span>';
+               }
                $header = "
                        <table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>
                        <tr>
@@ -594,11 +558,6 @@ CONTROL;
                        $this->mNewtitle = "<a href='$newLink'>{$this->mPagetitle}</a>"
                                . " (<a href='$newEdit'>" . htmlspecialchars( wfMsg( 'editold' ) ) . "</a>)";
                }
-               if ( !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) {
-                       $this->mNewtitle = "<span class='history-deleted'>{$this->mPagetitle}</span>";
-               } else if ( $this->mNewRev->isDeleted(Revision::DELETED_TEXT) ) {
-                       $this->mNewtitle = '<span class="history-deleted">'.$this->mNewtitle.'</span>';
-               }
 
                // Load the old revision object
                $this->mOldRev = false;
@@ -626,20 +585,11 @@ CONTROL;
                        $t = $wgLang->timeanddate( $this->mOldRev->getTimestamp(), true );
                        $oldLink = $this->mOldPage->escapeLocalUrl( 'oldid=' . $this->mOldid );
                        $oldEdit = $this->mOldPage->escapeLocalUrl( 'action=edit&oldid=' . $this->mOldid );
-                       $this->mOldPagetitle = htmlspecialchars( wfMsg( 'revisionasof', $t ) );
-                       
-                       $this->mOldtitle = "<a href='$oldLink'>{$this->mOldPagetitle}</a>"
-                               . "(<a href='$oldEdit'>" . htmlspecialchars( wfMsg( 'editold' ) ) . "</a>)";
-                       // Now that we considered old rev, we can make undo link (bug 8133, multi-edit undo)
+                       $this->mOldtitle = "<a href='$oldLink'>" . htmlspecialchars( wfMsg( 'revisionasof', $t ) )
+                               . "</a> (<a href='$oldEdit'>" . htmlspecialchars( wfMsg( 'editold' ) ) . "</a>)";
+                       //now that we considered old rev, we can make undo link (bug 8133, multi-edit undo)
                        $newUndo = $this->mNewPage->escapeLocalUrl( 'action=edit&undoafter=' . $this->mOldid . '&undoto=' . $this->mNewid);
-                       if ( $this->mNewRev->userCan(Revision::DELETED_TEXT) )
-                               $this->mNewtitle .= " (<a href='$newUndo'>" . htmlspecialchars( wfMsg( 'editundo' ) ) . "</a>)";
-                       
-                       if ( !$this->mOldRev->userCan(Revision::DELETED_TEXT) ) {
-                               $this->mOldtitle = "<span class='history-deleted'>{$this->mOldPagetitle}</span>";
-                       } else if ( $this->mOldRev->isDeleted(Revision::DELETED_TEXT) ) {
-                               $this->mOldtitle = '<span class="history-deleted">'.$this->mOldtitle.'</span>';
-                       }
+                       $this->mNewtitle .= " (<a href='$newUndo'>" . htmlspecialchars( wfMsg( 'editundo' ) ) . "</a>)";
                }
 
                return true;
@@ -660,6 +610,7 @@ CONTROL;
                        return false;
                }
                if ( $this->mOldRev ) {
+                       // FIXME: permission tests
                        $this->mOldtext = $this->mOldRev->revText();
                        if ( $this->mOldtext === false ) {
                                return false;
index 3c24554..f15c778 100644 (file)
@@ -139,10 +139,7 @@ class WikiExporter {
                $fname = "do_list_authors" ;
                wfProfileIn( $fname );
                $this->author_list = "<contributors>";
-               //rev_deleted
-               $deleted = '(rev_deleted & '.Revision::DELETED_USER.') !=1 ';
-               
-               $sql = "SELECT DISTINCT rev_user_text,rev_user FROM {$page},{$revision} WHERE page_id=rev_page AND $deleted AND " . $cond ;
+               $sql = "SELECT DISTINCT rev_user_text,rev_user FROM {$page},{$revision} WHERE page_id=rev_page AND " . $cond ;
                $result = $this->db->query( $sql, $fname );
                $resultset = $this->db->resultObject( $result );
                while( $row = $resultset->fetchObject() ) {
index fb5bf8e..3ddf192 100644 (file)
@@ -508,9 +508,7 @@ END
                $reason = $wgRequest->getVal( 'wpReason' );
                $image = $wgRequest->getVal( 'image' );
                $oldimage = $wgRequest->getVal( 'oldimage' );
-               # Flag to hide all contents of the archived revisions
-               $suppress = $wgRequest->getVal( 'wpSuppress' ) && $wgUser->isAllowed('deleterevision');
-               
+
                # Only sysops can delete images. Previously ordinary users could delete
                # old revisions, but this is no longer the case.
                if ( !$wgUser->isAllowed('delete') ) {
@@ -538,7 +536,7 @@ END
                # Deleting old images doesn't require confirmation
                if ( !is_null( $oldimage ) || $confirm ) {
                        if( $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ), $oldimage ) ) {
-                               $this->doDelete( $reason, $suppress );
+                               $this->doDelete( $reason );
                        } else {
                                $wgOut->showFatalError( wfMsg( 'sessionfailure' ) );
                        }
@@ -559,7 +557,7 @@ END
         * Delete an image.
         * @param $reason User provided reason for deletion.
         */
-       function doDelete( $reason, $suppress=false ) {
+       function doDelete( $reason ) {
                global $wgOut, $wgRequest;
 
                $oldimage = $wgRequest->getVal( 'oldimage' );
@@ -573,12 +571,12 @@ END
                                $wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) );
                                return;
                        }
-                       if ( !$this->doDeleteOldImage( $oldimage, $suppress ) ) {
+                       if ( !$this->doDeleteOldImage( $oldimage ) ) {
                                return;
                        }
                        $deleted = $oldimage;
                } else {
-                       $ok = $this->img->delete( $reason, $suppress );
+                       $ok = $this->img->delete( $reason );
                        if( !$ok ) {
                                # If the deletion operation actually failed, bug out:
                                $wgOut->showFileDeleteError( $this->img->getName() );
@@ -589,7 +587,7 @@ END
                        # Now we remove the image description page.
        
                        $article = new Article( $this->mTitle );
-                       $article->doDeleteArticle( $reason, $suppress ); # ignore errors
+                       $article->doDeleteArticle( $reason ); # ignore errors
 
                        $deleted = $this->img->getName();
                }
@@ -608,11 +606,11 @@ END
        /**
         * @return success
         */
-       function doDeleteOldImage( $oldimage, $suppress=false )
+       function doDeleteOldImage( $oldimage )
        {
                global $wgOut;
 
-               $ok = $this->img->deleteOld( $oldimage, '', $suppress );
+               $ok = $this->img->deleteOld( $oldimage, '' );
                if( !$ok ) {
                        # If we actually have a file and can't delete it, throw an error.
                        # Something went awry...
index 5bd8123..5662252 100644 (file)
@@ -830,13 +830,10 @@ class Linker {
        /**
         * Generate a user link if the current user is allowed to view it
         * @param $rev Revision object.
-        * @param $isPublic, bool, show only if all users can see it
         * @return string HTML
         */
-       function revUserLink( $rev, $isPublic = false ) {
-               if( $rev->isDeleted( Revision::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               } else if( $rev->userCan( Revision::DELETED_USER ) ) {
+       function revUserLink( $rev ) {
+               if( $rev->userCan( Revision::DELETED_USER ) ) {
                        $link = $this->userLink( $rev->getRawUser(), $rev->getRawUserText() );
                } else {
                        $link = wfMsgHtml( 'rev-deleted-user' );
@@ -846,121 +843,26 @@ class Linker {
                }
                return $link;
        }
-       
-       /**
-        * Generate a user link if the current user is allowed to view it
-        * @param $event, log item.
-        * @param $isPublic, bool, show only if all users can see it
-        * @return string HTML
-        */
-       function logUserLink( $event, $isPublic = false ) {
-               if( LogViewer::isDeleted( $event, LogViewer::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               } else if( LogViewer::userCan( $event, LogViewer::DELETED_USER ) ) {
-                       if ( isset($event->user_name) ) {
-                               $link = $this->userLink( $event->log_user, $event->user_name );
-                       } else {
-                               $user = $event->log_user;
-                               $link = $this->userLink( $event->log_user, User::whoIs( $user ) );
-                       }
-               } else {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               }
-               if( LogViewer::isDeleted( $event, LogViewer::DELETED_USER ) ) {
-                       return '<span class="history-deleted">' . $link . '</span>';
-               }
-               return $link;
-       }
-
-       /**
-        * Generate a user link if the current user is allowed to view it
-        * @param $file, filestore file
-        * @param $isPublic, bool, show only if all users can see it
-        * @return string HTML
-        */
-       function fileUserLink( $file, $isPublic = false ) {
-               if( $file->isDeleted( Revision::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               } else if( $file->userCan( Revision::DELETED_USER ) ) {
-                       $link = $this->userLink( $file->mUser, $file->mUserText );
-               } else {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               }
-               if( $file->isDeleted( Revision::DELETED_USER ) ) {
-                       return '<span class="history-deleted">' . $link . '</span>';
-               }
-               return $link;
-       }
 
        /**
         * Generate a user tool link cluster if the current user is allowed to view it
         * @param $rev Revision object.
-        * @param $isPublic, bool, show only if all users can see it
         * @return string HTML
         */
-       function revUserTools( $rev, $isPublic = false ) {
-               if( $rev->isDeleted( Revision::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               } else if( $rev->userCan( Revision::DELETED_USER ) ) {
+       function revUserTools( $rev ) {
+               if( $rev->userCan( Revision::DELETED_USER ) ) {
                        $link = $this->userLink( $rev->getRawUser(), $rev->getRawUserText() ) .
-                       ' ' . $this->userToolLinks( $rev->getRawUser(), $rev->getRawUserText() );
+                               ' ' .
+                               $this->userToolLinks( $rev->getRawUser(), $rev->getRawUserText() );
                } else {
                        $link = wfMsgHtml( 'rev-deleted-user' );
                }
                if( $rev->isDeleted( Revision::DELETED_USER ) ) {
-                       return ' <span class="history-deleted">' . $link . '</span>';
-               }
-               return " $link";
-       }
-
-       /**
-        * Generate a user tool link cluster if the current user is allowed to view it
-        * @param $event, log item.
-        * @param $isPublic, bool, show only if all users can see it
-        * @return string HTML
-        */
-       function logUserTools( $event, $isPublic = false ) {
-               if( LogViewer::isDeleted( $event, LogViewer::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               } else if( LogViewer::userCan( $event, LogViewer::DELETED_USER ) ) {
-                       if ( isset($event->user_name) ) {
-                               $link = $this->userLink( $event->log_user, $event->user_name ) . 
-                               ' ' . $this->userToolLinks( $event->log_user, $event->user_name );
-                       } else {
-                               $usertext = User::whoIs( $event->log_user );
-                               $link = $this->userLink( $event->log_user, $usertext ) . 
-                               ' ' . $this->userToolLinks( $event->log_user, $usertext );
-                       }
-               } else {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               }
-               if( LogViewer::isDeleted( $event, LogViewer::DELETED_USER ) ) {
-                       return '<span class="history-deleted">' . $link . '</span>';
-               }
-               return $link;
-       }
-
-       /**
-        * Generate a user tool link cluster if the current user is allowed to view it
-        * @param $file, filestore file
-        * @param $isPublic, bool, show only if all users can see it
-        * @return string HTML
-        */
-       function fileUserTools( $file, $isPublic = false ) {
-               if( $file->isDeleted( Revision::DELETED_USER ) && $isPublic ) {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               } else if( $file->userCan( Revision::DELETED_USER ) ) {
-                       $link = $this->userLink( $file->mUser, $file->mUserText ) .
-                       $this->userToolLinks( $file->mUser, $file->mUserText );
-               } else {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
-               }
-               if( $file->isDeleted( Revision::DELETED_USER ) ) {
                        return '<span class="history-deleted">' . $link . '</span>';
                }
                return $link;
        }
-               
+       
        /**
         * This function is called by all recent changes variants, by the page history,
         * and by the user contributions list. It is responsible for formatting edit
@@ -1083,64 +985,20 @@ class Linker {
         *
         * @param Revision $rev
         * @param bool $local Whether section links should refer to local page
-        * @param $isPublic, show only if all users can see it
         * @return string HTML
         */
-       function revComment( Revision $rev, $local = false, $isPublic = false ) {
-               if( $rev->isDeleted( Revision::DELETED_COMMENT ) && $isPublic ) {
-                       $block = " <span class=\"comment\">" . wfMsgHtml( 'rev-deleted-comment' ) . "</span>";
-               } else if( $rev->userCan( Revision::DELETED_COMMENT ) ) {
+       function revComment( Revision $rev, $local = false ) {
+               if( $rev->userCan( Revision::DELETED_COMMENT ) ) {
                        $block = $this->commentBlock( $rev->getRawComment(), $rev->getTitle(), $local );
                } else {
-                       $block = " <span class=\"comment\">" . wfMsgHtml( 'rev-deleted-comment' ) . "</span>";
+                       $block = " <span class=\"comment\">" .
+                               wfMsgHtml( 'rev-deleted-comment' ) . "</span>";
                }
                if( $rev->isDeleted( Revision::DELETED_COMMENT ) ) {
                        return " <span class=\"history-deleted\">$block</span>";
                }
                return $block;
        }
-               
-       /**
-        * Wrap and format the given event's comment block, if the current
-        * user is allowed to view it.
-        *
-        * @param Revision $rev
-        * @return string HTML
-        */
-       function logComment( $event, $isPublic = false ) {
-               if( LogViewer::isDeleted( $event, LogViewer::DELETED_COMMENT ) && $isPublic ) {
-                       $block = ' ' . wfMsgHtml( 'rev-deleted-comment' );
-               } else if( LogViewer::userCan( $event, LogViewer::DELETED_COMMENT ) ) {
-                       $block = $this->commentBlock( LogViewer::getRawComment( $event ) );
-               } else {
-                       $block = ' ' . wfMsgHtml( 'rev-deleted-comment' );
-               }
-               if( LogViewer::isDeleted( $event, LogViewer::DELETED_COMMENT ) ) {
-                       return "<span class=\"history-deleted\">$block</span>";
-               }
-               return $block;
-       }
-
-       /**
-        * Wrap and format the given file's comment block, if the current
-        * user is allowed to view it.
-        *
-        * @param FileStore file object $file
-        * @return string HTML
-        */
-       function fileComment( $file, $isPublic = false ) {
-               if( $file->isDeleted( Revision::DELETED_COMMENT ) && $isPublic ) {
-                       $block = ' ' . wfMsgHtml( 'rev-deleted-comment' );
-               } else if( $file->userCan( Revision::DELETED_COMMENT ) ) {
-                       $block = $this->commentBlock( $file->mDescription );
-               } else {
-                       $block = ' ' . wfMsgHtml( 'rev-deleted-comment' );
-               }
-               if( $file->isDeleted( Revision::DELETED_COMMENT ) ) {
-                       return "<span class=\"history-deleted\">$block</span>";
-               }
-               return $block;
-       }
 
        /** @todo document */
        function tocIndent() {
index a1e4638..65dbbe4 100644 (file)
@@ -50,15 +50,13 @@ class LogPage {
        function saveContent() {
                if( wfReadOnly() ) return false;
 
-               global $wgUser, $wgLogRestrictions;
+               global $wgUser;
                $fname = 'LogPage::saveContent';
 
                $dbw = wfGetDB( DB_MASTER );
                $uid = $wgUser->getID();
 
                $this->timestamp = $now = wfTimestampNow();
-               
-               $log_id = $dbw->nextSequenceValue( 'log_log_id_seq' );
                $dbw->insert( 'logging',
                        array(
                                'log_type' => $this->type,
@@ -71,15 +69,20 @@ class LogPage {
                                'log_params' => $this->params
                        ), $fname
                );
-               $newId = $dbw->insertId();
 
                # And update recentchanges
                if ( $this->updateRecentChanges ) {
-                       # Don't add private logs to RC!!!
-                       if ( !isset($wgLogRestrictions[$this->type]) || $wgLogRestrictions[$this->type]=='*' ) {
-                               RecentChange::notifyLog( $now, $this->target, $wgUser, $this->actionText, '',
-                               $this->type, $this->action, $this->target, $this->comment, $this->params, $newId );
+                       $titleObj = SpecialPage::getTitleFor( 'Log', $this->type );
+                       $rcComment = $this->actionText;
+                       if( '' != $this->comment ) {
+                               if ($rcComment == '')
+                                       $rcComment = $this->comment;
+                               else
+                                       $rcComment .= ': ' . $this->comment;
                        }
+
+                       RecentChange::notifyLog( $now, $titleObj, $wgUser, $rcComment, '',
+                               $this->type, $this->action, $this->target, $this->comment, $this->params );
                }
                return true;
        }
@@ -119,13 +122,13 @@ class LogPage {
         */
        function logHeader( $type ) {
                global $wgLogHeaders;
-               return wfMsgHtml( $wgLogHeaders[$type] );
+               return wfMsg( $wgLogHeaders[$type] );
        }
 
        /**
         * @static
         */
-       function actionText( $type, $action, $title=NULL, $skin=NULL, $params = array(), $filterWikilinks=false, $translate=false, $forRC=false ) {
+       function actionText( $type, $action, $title = NULL, $skin = NULL, $params = array(), $filterWikilinks=false, $translate=false ) {
                global $wgLang, $wgContLang, $wgLogActions;
 
                $key = "$type/$action";
@@ -182,17 +185,12 @@ class LogPage {
                                        }
                                } else {
                                        array_unshift( $params, $titleLink );
-                                       // Oversighted blocks show as normal
-                                       if ( $translate && ($key == 'block/block' || $key == 'oversight/block') ) {
+                                       if ( $translate && $key == 'block/block' ) {
                                                $params[1] = $wgLang->translateBlockExpiry( $params[1] );
                                                $params[2] = isset( $params[2] )
                                                                                ? self::formatBlockFlags( $params[2] )
                                                                                : '';
                                        }
-                                       if ( $forRC ) {
-                                               $params[1] = $wgLang->translateBlockExpiry( $params[1], true );
-                                               $params[2] = isset( $params[2] ) ? str_replace( ",", ", ", self::formatBlockFlags( $params[2] ) ) : '';
-                                       }
                                        $rv = wfMsgReal( $wgLogActions[$key], $params, true, !$skin );
                                }
                        }
@@ -224,7 +222,7 @@ class LogPage {
                $this->comment = $comment;
                $this->params = LogPage::makeParamBlob( $params );
 
-               $this->actionText = LogPage::actionText( $this->type, $action, $target, NULL, $params, false, false, true );
+               $this->actionText = LogPage::actionText( $this->type, $action, $target, NULL, $params );
 
                return $this->saveContent();
        }
index 1622a6e..94b55ea 100644 (file)
@@ -38,20 +38,6 @@ class PageHistory {
                $this->mTitle =& $article->mTitle;
                $this->mNotificationTimestamp = NULL;
                $this->mSkin = $wgUser->getSkin();
-               $this->preCacheMessages();
-       }
-       
-       /**
-        * As we use the same small set of messages in various methods and that
-        * they are called often, we call them once and save them in $this->message
-        */
-       function preCacheMessages() {
-               // Precache various messages
-               if( !isset( $this->message ) ) {
-                       foreach( explode(' ', 'cur last rev-delundel' ) as $msg ) {
-                               $this->message[$msg] = wfMsgExt( $msg, array( 'escape') );
-                       }
-               }
        }
 
        /**
@@ -201,31 +187,35 @@ class PageHistory {
                $arbitrary = $this->diffButtons( $rev, $firstInList, $counter );
                $link = $this->revLink( $rev );
                
+               $user = $this->mSkin->userLink( $rev->getUser(), $rev->getUserText() )
+                               . $this->mSkin->userToolLinks( $rev->getUser(), $rev->getUserText() );
+               
                $s .= "($curlink) ($lastlink) $arbitrary";
                
                if( $wgUser->isAllowed( 'deleterevision' ) ) {
                        $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
                        if( $firstInList ) {
-                       // We don't currently handle well changing the top revision's settings
-                               $del = $this->message['rev-delundel'];
+                               // We don't currently handle well changing the top revision's settings
+                               $del = wfMsgHtml( 'rev-delundel' );
                        } else if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
                        // If revision was hidden from sysops
-                               $del = $this->message['rev-delundel'];  
+                               $del = wfMsgHtml( 'rev-delundel' );                     
                        } else {
                                $del = $this->mSkin->makeKnownLinkObj( $revdel,
-                                       $this->message['rev-delundel'],
+                                       wfMsg( 'rev-delundel' ),
                                        'target=' . urlencode( $this->mTitle->getPrefixedDbkey() ) .
                                        '&oldid=' . urlencode( $rev->getId() ) );
-                               // Bolden oversighted content
-                               if( $rev->isDeleted( Revision::DELETED_RESTRICTED ) )
-                                       $del = "<strong>$del</strong>";
                        }
-                       $s .= " <tt>(<small>$del</small>)</tt> ";
+                       $s .= " (<small>$del</small>) ";
                }
                
                $s .= " $link";
-               $s .= $this->mSkin->revUserTools( $rev, true);
-               
+               #getUser is safe, but this avoids making the invalid untargeted contribs links
+               if( $row->rev_deleted & Revision::DELETED_USER ) {
+                       $user = '<span class="history-deleted">' . wfMsg('rev-deleted-user') . '</span>';
+               }
+               $s .= " <span class='history-user'>$user</span>";
+
                if( $row->rev_minor_edit ) {
                        $s .= ' ' . wfElement( 'span', array( 'class' => 'minor' ), wfMsg( 'minoreditletter') );
                }
@@ -251,7 +241,7 @@ class PageHistory {
                }
                #add blurb about text having been deleted
                if( $row->rev_deleted & Revision::DELETED_TEXT ) {
-                       $s .= ' <tt>' . wfMsgHtml( 'deletedrev' ) . '</tt>';
+                       $s .= ' ' . wfMsgHtml( 'deletedrev' );
                }
                if( $wgUser->isAllowed( 'rollback' ) && $latest ) {
                        $s .= ' '.$this->mSkin->generateRollback( $rev );
@@ -279,7 +269,7 @@ class PageHistory {
 
        /** @todo document */
        function curLink( $rev, $latest ) {
-               $cur = $this->message['cur'];
+               $cur = wfMsgExt( 'cur', array( 'escape') );
                if( $latest || !$rev->userCan( Revision::DELETED_TEXT ) ) {
                        return $cur;
                } else {
@@ -292,7 +282,7 @@ class PageHistory {
 
        /** @todo document */
        function lastLink( $rev, $next, $counter ) {
-               $last = $this->message['last'];
+               $last = wfMsgExt( 'last', array( 'escape' ) );
                if ( is_null( $next ) ) {
                        # Probably no next row
                        return $last;
index ceb0717..fced434 100644 (file)
  *     rc_patrolled    boolean whether or not someone has marked this edit as patrolled
  *     rc_old_len      integer byte length of the text before the edit
  *     rc_new_len      the same after the edit
- *     rc_deleted              partial deletion
- *     rc_logid                the log_id value for this log entry (or zero)
- *  rc_log_type                the log type (or null)
- *     rc_log_action   the log action (or null)
- *  rc_params          log params
  *
  * mExtra:
  *     prefixedDBkey   prefixed db key, used by external app via msg queue
@@ -232,7 +227,8 @@ class RecentChange
 
        # Makes an entry in the database corresponding to an edit
        /*static*/ function notifyEdit( $timestamp, &$title, $minor, &$user, $comment,
-               $oldId, $lastTimestamp, $bot="default", $ip='', $oldSize=0, $newSize=0, $newId=0)
+               $oldId, $lastTimestamp, $bot = "default", $ip = '', $oldSize = 0, $newSize = 0,
+               $newId = 0)
        {
 
                if ( $bot === 'default' ) {
@@ -267,12 +263,7 @@ class RecentChange
                        'rc_patrolled'  => 0,
                        'rc_new'        => 0,  # obsolete
                        'rc_old_len'    => $oldSize,
-                       'rc_new_len'    => $newSize,
-                       'rc_deleted'    => 0,
-                       'rc_logid'              => 0,
-                       'rc_log_type'   => null,
-                       'rc_log_action' => '',
-                       'rc_params'             => ''
+                       'rc_new_len'    => $newSize
                );
 
                $rc->mExtra =  array(
@@ -293,7 +284,7 @@ class RecentChange
         * @static
         */
        public static function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot = "default",
-         $ip='', $size=0, $newId=0 )
+         $ip='', $size = 0, $newId = 0 )
        {
                if ( !$ip ) {
                        $ip = wfGetIP();
@@ -301,7 +292,6 @@ class RecentChange
                                $ip = '';
                        }
                }
-                               
                if ( $bot == 'default' ) {
                        $bot = $user->isAllowed( 'bot' );
                }
@@ -325,14 +315,9 @@ class RecentChange
                        'rc_moved_to_title' => '',
                        'rc_ip'             => $ip,
                        'rc_patrolled'      => 0,
-                       'rc_new'                => 1, # obsolete
+                       'rc_new'            => 1, # obsolete
                        'rc_old_len'        => 0,
-                       'rc_new_len'        => $size,
-                       'rc_deleted'            => 0,
-                       'rc_logid'                      => 0,
-                       'rc_log_type'           => null,
-                       'rc_log_action'         => '',
-                       'rc_params'                     => ''
+                       'rc_new_len'        => $size
                );
 
                $rc->mExtra =  array(
@@ -354,7 +339,7 @@ class RecentChange
                                $ip = '';
                        }
                }
-               
+
                $rc = new RecentChange;
                $rc->mAttribs = array(
                        'rc_timestamp'  => $timestamp,
@@ -377,11 +362,6 @@ class RecentChange
                        'rc_patrolled'  => 1,
                        'rc_old_len'    => NULL,
                        'rc_new_len'    => NULL,
-                       'rc_deleted'    => 0,
-                       'rc_logid'              => 0, # notifyMove not used anymore
-                       'rc_log_type'   => null,
-                       'rc_log_action' => '',
-                       'rc_params'             => ''
                );
 
                $rc->mExtra = array(
@@ -400,14 +380,18 @@ class RecentChange
                RecentChange::notifyMove( $timestamp, $oldTitle, $newTitle, $user, $comment, $ip, true );
        }
 
-       # A log entry is different to an edit in that previous revisions are not kept
-       /*static*/ function notifyLog( $timestamp, &$title, &$user, $actionText = null, $ip='',
-          $type, $action, $target, $logComment, $params, $newId=0 )
+       # A log entry is different to an edit in that previous revisions are
+       # not kept
+       /*static*/ function notifyLog( $timestamp, &$title, &$user, $comment, $ip='',
+          $type, $action, $target, $logComment, $params )
        {
                if ( !$ip ) {
                        $ip = wfGetIP();
-                       if ( !$ip ) $ip = '';
+                       if ( !$ip ) {
+                               $ip = '';
+                       }
                }
+
                $rc = new RecentChange;
                $rc->mAttribs = array(
                        'rc_timestamp'  => $timestamp,
@@ -419,7 +403,7 @@ class RecentChange
                        'rc_cur_id'     => $title->getArticleID(),
                        'rc_user'       => $user->getID(),
                        'rc_user_text'  => $user->getName(),
-                       'rc_comment'    => $logComment,
+                       'rc_comment'    => $comment,
                        'rc_this_oldid' => 0,
                        'rc_last_oldid' => 0,
                        'rc_bot'        => $user->isAllowed( 'bot' ) ? 1 : 0,
@@ -430,11 +414,6 @@ class RecentChange
                        'rc_new'        => 0, # obsolete
                        'rc_old_len'    => NULL,
                        'rc_new_len'    => NULL,
-                       'rc_deleted'    => 0,
-                       'rc_logid'              => $newId,
-                       'rc_log_type'   => $type,
-                       'rc_log_action' => $action,
-                       'rc_params'             => $params
                );
                $rc->mExtra =  array(
                        'prefixedDBkey' => $title->getPrefixedDBkey(),
@@ -481,11 +460,6 @@ class RecentChange
                        'rc_new' => $row->page_is_new, # obsolete
                        'rc_old_len' => $row->rc_old_len,
                        'rc_new_len' => $row->rc_new_len,
-                       'rc_deleted'  => $row->rc_deleted,
-                       'rc_logid'      => $row->rc_logid,
-                       'rc_log_type'   => $row->rc_log_type,
-                       'rc_log_action' => $row->rc_log_action,
-                       'rc_params'     => $row->rc_params
                );
 
                $this->mExtra = array();
index f427519..27729f2 100644 (file)
@@ -45,7 +45,7 @@ class IPBlockForm {
        var $BlockAddress, $BlockExpiry, $BlockReason;
 
        function IPBlockForm( $par ) {
-               global $wgRequest, $wgUser;
+               global $wgRequest;
 
                $this->BlockAddress = $wgRequest->getVal( 'wpBlockAddress', $wgRequest->getVal( 'ip', $par ) );
                $this->BlockAddress = strtr( $this->BlockAddress, '_', ' ' );
@@ -59,8 +59,6 @@ class IPBlockForm {
                $this->BlockAnonOnly = $wgRequest->getBool( 'wpAnonOnly', $byDefault );
                $this->BlockCreateAccount = $wgRequest->getBool( 'wpCreateAccount', $byDefault );
                $this->BlockEnableAutoblock = $wgRequest->getBool( 'wpEnableAutoblock', $byDefault );
-               # Re-check user's rights to hide names, very serious, defaults to 0
-               $this->BlockHideName = $wgRequest->getBool( 'wpHideName', 0 ) && $wgUser->isAllowed( 'hideuser' );
        }
 
        function showForm( $err ) {
@@ -133,7 +131,6 @@ class IPBlockForm {
                        </td>
                        ");
                }
-               
                $wgOut->addHTML("
                </tr>
                <tr id='wpBlockOther'>
@@ -153,46 +150,31 @@ class IPBlockForm {
                <tr id='wpAnonOnlyRow'>
                        <td>&nbsp;</td>
                        <td align=\"left\">
-                               " . wfCheckLabel( wfMsgHtml( 'ipbanononly' ),
+                               " . wfCheckLabel( wfMsg( 'ipbanononly' ),
                                        'wpAnonOnly', 'wpAnonOnly', $this->BlockAnonOnly,
-                                       array( 'tabindex' => '4' ) ) . "
+                                       array( 'tabindex' => 4 ) ) . "
                        </td>
                </tr>
                <tr id='wpCreateAccountRow'>
                        <td>&nbsp;</td>
                        <td align=\"left\">
-                               " . wfCheckLabel( wfMsgHtml( 'ipbcreateaccount' ),
+                               " . wfCheckLabel( wfMsg( 'ipbcreateaccount' ),
                                        'wpCreateAccount', 'wpCreateAccount', $this->BlockCreateAccount,
-                                       array( 'tabindex' => '5' ) ) . "
+                                       array( 'tabindex' => 5 ) ) . "
                        </td>
                </tr>
                <tr id='wpEnableAutoblockRow'>
                        <td>&nbsp;</td>
                        <td align=\"left\">
-                               " . wfCheckLabel( wfMsgHtml( 'ipbenableautoblock' ),
+                               " . wfCheckLabel( wfMsg( 'ipbenableautoblock' ),
                                                'wpEnableAutoblock', 'wpEnableAutoblock', $this->BlockEnableAutoblock,
-                                                       array( 'tabindex' => '6' ) ) . "
+                                                       array( 'tabindex' => 6 ) ) . "
                        </td>
                </tr>
-               ");
-               // Allow some users to hide name from block log, blocklist and listusers
-               if ( $wgUser->isAllowed( 'hideuser' ) ) {
-                       $wgOut->addHTML("
-                       <tr>
-                       <td>&nbsp;</td>
-                               <td align=\"left\">
-                                       " . wfCheckLabel( wfMsgHtml( 'ipbhidename' ),
-                                                       'wpHideName', 'wpHideName', $this->BlockHideName,
-                                                               array( 'tabindex' => '6' ) ) . "
-                               </td>
-                       </tr>
-                       ");
-               }
-               $wgOut->addHTML("
                <tr>
                        <td style='padding-top: 1em'>&nbsp;</td>
                        <td style='padding-top: 1em' align=\"left\">
-                               " . Xml::submitButton( wfMsgHtml( 'ipbsubmit' ),
+                               " . Xml::submitButton( wfMsg( 'ipbsubmit' ),
                                                        array( 'name' => 'wpBlock', 'tabindex' => '7' ) ) . "
                        </td>
                </tr>
@@ -301,7 +283,7 @@ class IPBlockForm {
 
                $block = new Block( $this->BlockAddress, $userId, $wgUser->getID(),
                        $this->BlockReason, wfTimestampNow(), 0, $expiry, $this->BlockAnonOnly,
-                       $this->BlockCreateAccount, $this->BlockEnableAutoblock, $this->BlockHideName);
+                       $this->BlockCreateAccount, $this->BlockEnableAutoblock );
 
                if (wfRunHooks('BlockIp', array(&$block, &$wgUser))) {
 
@@ -318,9 +300,8 @@ class IPBlockForm {
                        $logParams[] = $expirestr;
                        $logParams[] = $this->blockLogFlags();
 
-                       # Make log entry, if the name is hidden, put it in the oversight log
-                       $log_type = ($this->BlockHideName) ? 'oversight' : 'block';
-                       $log = new LogPage( $log_type );
+                       # Make log entry
+                       $log = new LogPage( 'block' );
                        $log->addEntry( 'block', Title::makeTitle( NS_USER, $this->BlockAddress ),
                          $this->BlockReason, $logParams );
 
index 3e3f007..302b196 100644 (file)
@@ -72,70 +72,16 @@ class LogReader {
 
                list( $this->limit, $this->offset ) = $request->getLimitOffset();
        }
-       
-       function newFromTitle( $title, $logid=0 ) {
-               $fname = 'LogReader::newFromTitle';
-
-               $matchId = intval( $logid );
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'logging', array('*'),
-               array('log_id' => $matchId, 'log_namespace' => $title->getNamespace(), 'log_title' => $title->getDBkey() ), 
-               $fname );
-
-               if ( $res ) {
-                  $ret = $dbr->fetchObject( $res );
-                  if ( $ret ) {
-                         return $ret;
-                       }
-               } 
-               return null;
-       }
-       
-       function newFromId( $logid ) {
-               $fname = 'LogReader::newFromId';
-
-               $matchId = intval( $logid );
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'logging', array('*'), array('log_id' => $matchId ), $fname );
-
-               if ( $res ) {
-                  $ret = $dbr->fetchObject( $res );
-                  if ( $ret ) {
-                         return $ret;
-                       }
-               } 
-               return null;
-       }
 
        /**
         * Set the log reader to return only entries of the given type.
-        * Type restrictions enforced here
         * @param string $type A log type ('upload', 'delete', etc)
         * @private
         */
        function limitType( $type ) {
-               global $wgLogRestrictions, $wgUser;
-               
-               // Restriction system
-               if ( isset($wgLogRestrictions) ) {
-                       foreach ( $wgLogRestrictions as $logtype => $right ) {
-                               if ( !$wgUser->isAllowed( $right ) ) {
-                                       $safetype = $this->db->strencode( $logtype );
-                                       $this->whereClauses[] = "log_type <> '$safetype'";
-                               }
-                       }
-               }
-               
                if( empty( $type ) ) {
                        return false;
                }
-               // Can user see this log?
-               if ( isset($wgLogRestrictions[$type]) ) {
-                       if ( !$wgUser->isAllowed( $wgLogRestrictions[$type] ) ) {
-                       return false;
-                       }
-               }
-               
                $this->type = $type;
                $safetype = $this->db->strencode( $type );
                $this->whereClauses[] = "log_type='$safetype'";
@@ -171,7 +117,7 @@ class LogReader {
         * @private
         */
        function limitTitle( $page , $pattern ) {
-               $title = Title::newFromURL( $page, false );
+               $title = Title::newFromText( $page );
                if( empty( $page ) || is_null( $title )  ) {
                        return false;
                }
@@ -211,7 +157,6 @@ class LogReader {
                $logging = $this->db->tableName( "logging" );
                $sql = "SELECT /*! STRAIGHT_JOIN */ log_type, log_action, log_timestamp,
                        log_user, user_name,
-                       log_id, log_deleted,
                        log_namespace, log_title, page_id,
                        log_comment, log_params FROM $logging ";
                if( !empty( $this->joinClauses ) ) {
@@ -272,11 +217,6 @@ class LogReader {
  * @addtogroup SpecialPage
  */
 class LogViewer {
-       const DELETED_ACTION = 1;
-       const DELETED_COMMENT = 2;
-       const DELETED_USER = 4;
-    const DELETED_RESTRICTED = 8;
-    
        /**
         * @var LogReader $reader
         */
@@ -290,20 +230,6 @@ class LogViewer {
                global $wgUser;
                $this->skin = $wgUser->getSkin();
                $this->reader =& $reader;
-               $this->preCacheMessages();
-       }
-       
-       /**
-        * As we use the same small set of messages in various methods and that
-        * they are called often, we call them once and save them in $this->message
-        */
-       function preCacheMessages() {
-               // Precache various messages
-               if( !isset( $this->message ) ) {
-                       foreach( explode(' ', 'viewpagelogs revhistory imghistory rev-delundel' ) as $msg ) {
-                               $this->message[$msg] = wfMsgExt( $msg, array( 'escape') );
-                       }
-               }
        }
 
        /**
@@ -322,123 +248,6 @@ class LogViewer {
                        $this->showError( $wgOut );
                }
        }
-       
-       /**
-        * Determine if the current user is allowed to view a particular
-        * field of this event, if it's marked as deleted.
-        * @param int $field
-        * @return bool
-        */
-       function userCan( $event, $field ) {
-               if( ( $event->log_deleted & $field ) == $field ) {
-                       global $wgUser;
-                       $permission = ( $event->log_deleted & Revision::DELETED_RESTRICTED ) == Revision::DELETED_RESTRICTED
-                               ? 'hiderevision'
-                               : 'deleterevision';
-                       wfDebug( "Checking for $permission due to $field match on $event->log_deleted\n" );
-                       return $wgUser->isAllowed( $permission );
-               } else {
-                       return true;
-               }
-       }
-       
-       /**
-        * int $field one of DELETED_* bitfield constants
-        * @return bool
-        */
-       function isDeleted( $event, $field ) {
-               return ($event->log_deleted & $field) == $field;
-       }
-       
-               /**
-        * Fetch event's user id if it's available to all users
-        * @return int
-        */
-       function getUser( $event ) {
-               if( $this->isDeleted( $event, Revision::DELETED_USER ) ) {
-                       return 0;
-               } else {
-                       return $event->log_user;
-               }
-       }
-
-       /**
-        * Fetch event's user id without regard for the current user's permissions
-        * @return string
-        */
-       function getRawUser( $event ) {
-               return $event->log_user;
-       }
-
-       /**
-        * Fetch event's username if it's available to all users
-        * @return string
-        */
-       function getUserText( $event ) {
-               if( $this->isDeleted( $event, Revision::DELETED_USER ) ) {
-                       return "";
-               } else {
-                       if ( isset($event->user_name) ) {
-                          return $event->user_name;
-                       } else {
-                         return User::whoIs( $event->log_user );
-                       }
-               }
-       }
-
-       /**
-        * Fetch event's username without regard for view restrictions
-        * @return string
-        */
-       function getRawUserText( $event ) {
-               if ( isset($event->user_name) ) {
-                       return $event->user_name;
-               } else {
-                       return User::whoIs( $event->log_user );
-               }
-       }
-       
-       /**
-        * Fetch event comment if it's available to all users
-        * @return string
-        */
-       function getComment( $event ) {
-               if( $this->isDeleted( $event, Revision::DELETED_COMMENT ) ) {
-                       return "";
-               } else {
-                       return $event->log_comment;
-               }
-       }
-
-       /**
-        * Fetch event comment without regard for the current user's permissions
-        * @return string
-        */
-       function getRawComment( $event ) {
-               return $event->log_comment;
-       }
-       
-       /**
-        * Returns the title of the page associated with this entry.
-        * @return Title
-        */
-       function getTitle( $event ) {
-               return Title::makeTitle( $event->log_namespace, $event->log_title );
-       }
-
-       /**
-        * Return the log action if it's available to all users
-        * default is deleted if not specified for security
-        * @return Title
-        */
-       function logActionText( $log_type, $log_action, $title, $skin, $paramArray, $log_deleted = LogViewer::DELETED_ACTION ) {
-               if( $log_deleted & LogViewer::DELETED_ACTION ) {
-                       return '<span class="history-deleted">' . wfMsgHtml('rev-deleted-event') . '</span>';
-               } else {
-                       $action = LogPage::actionText( $log_type, $log_action, $title, $this->skin, $paramArray, true, true );
-                       return $action;
-               }
-       }
 
        /**
         * Load the data from the linked LogReader
@@ -510,8 +319,7 @@ class LogViewer {
         * @private
         */
        function logLine( $s ) {
-               global $wgLang, $wgUser;
-               
+               global $wgLang, $wgUser;;
                $skin = $wgUser->getSkin();
                $title = Title::makeTitle( $s->log_namespace, $s->log_title );
                $time = $wgLang->timeanddate( wfTimestamp(TS_MW, $s->log_timestamp), true );
@@ -524,64 +332,12 @@ class LogViewer {
                } else {
                        $linkCache->addBadLinkObj( $title );
                }
-               // User links
-               $userLink = $this->skin->logUserTools( $s, true );
-               // Comment
-               $comment = $this->skin->logComment( $s, true );
 
+               $userLink = $this->skin->userLink( $s->log_user, $s->user_name ) . $this->skin->userToolLinksRedContribs( $s->log_user, $s->user_name );
+               $comment = $this->skin->commentBlock( $s->log_comment );
                $paramArray = LogPage::extractParams( $s->log_params );
-               $revert = ''; $del = '';
-               
-               // Some user can hide log items and have review links
-               if( $wgUser->isAllowed( 'deleterevision' ) ) {
-                       $del = $this->showhideLinks( $s, $title );
-               }
-               
-               // Show restore/unprotect/unblock
-               $revert = $this->showReviewLinks( $s, $title, $paramArray );
-               
-               // Event description
-               $action = $this->logActionText( $s->log_type, $s->log_action, $title, $this->skin, $paramArray, $s->log_deleted );
-               
-               $out = "<li><tt>$del</tt> $time $userLink $action $comment <small>$revert</small></li>\n";
-               return $out;
-       }
-
-       /**
-        * @param $s, row object
-        * @param $s, title object
-        * @private
-        */
-       function showhideLinks( $s, $title ) {
-               $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-               if( !LogViewer::userCan( $s, Revision::DELETED_RESTRICTED ) ) {
-               // If event was hidden from sysops
-                       $del = $this->message['rev-delundel'];
-               } else if( $s->log_type == 'oversight' ) {
-               // No one should be hiding from the oversight log
-                       $del = $this->message['rev-delundel'];
-               } else {
-                       $del = $this->skin->makeKnownLinkObj( $revdel,
-                       $this->message['rev-delundel'],
-                       'target=' . urlencode( $title->getPrefixedDbkey() ) . '&logid=' . $s->log_id );
-                       // Bolden oversighted content
-                       if( LogViewer::isDeleted( $s, Revision::DELETED_RESTRICTED ) )
-                       $del = "<strong>$del</strong>";
-               }
-               return "(<small>$del</small>)";
-       }
-
-       /**
-        * @param $s, row object
-        * @param $title, title object
-        * @param $s, param array
-        * @private
-        */
-       function showReviewLinks( $s, $title, $paramArray ) {
-               global $wgUser;
-               
-               $reviewlink='';
-               // Show revertmove link
+               $revert = '';
+               // show revertmove link
                if ( $s->log_type == 'move' && isset( $paramArray[0] ) ) {
                        $destTitle = Title::newFromText( $paramArray[0] );
                        if ( $destTitle ) {
@@ -593,47 +349,26 @@ class LogViewer {
                                        '&wpMovetalk=0' );
                        }
                // show undelete link
-               } else if ( $s->log_action == 'delete' && $wgUser->isAllowed( 'delete' ) ) {
-                       $reviewlink = $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Undelete' ),
+               } elseif ( $s->log_action == 'delete' && $wgUser->isAllowed( 'delete' ) ) {
+                       $revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Undelete' ),
                                wfMsg( 'undeletebtn' ) ,
-                               'target='. urlencode( $title->getPrefixedDBkey() ) );
+                               'target='. urlencode( $title->getPrefixedDBkey() ) ) . ')';
+               
                // show unblock link
                } elseif ( $s->log_action == 'block' && $wgUser->isAllowed( 'block' ) ) {
-                       $reviewlink = $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Ipblocklist' ),
+                       $revert = '(' .  $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Ipblocklist' ),
                                wfMsg( 'unblocklink' ),
-                               'action=unblock&ip=' . urlencode( $s->log_title ) );
+                               'action=unblock&ip=' . urlencode( $s->log_title ) ) . ')';
                // show change protection link
                } elseif ( $s->log_action == 'protect' && $wgUser->isAllowed( 'protect' ) ) {
-                       $reviewlink = $this->skin->makeKnownLink( $title->getPrefixedDBkey() ,
+                       $revert = '(' .  $skin->makeKnownLink( $title->getPrefixedDBkey() ,
                                wfMsg( 'protect_change' ),
-                               'action=unprotect' );
-               }
-               // If an edit was hidden from a page give a review link to the history
-               if ( $wgUser->isAllowed( 'deleterevision' ) && isset($paramArray[2]) ) {
-                       $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-                       if ( $s->log_action == 'revision' ) {
-                               $reviewlink = $this->skin->makeKnownLinkObj( $title, $this->message['revhistory'],
-                               wfArrayToCGI( array('action' => 'history' ) ) ) . ':';
-                       } else if ( $s->log_action == 'file' ) {
-                       // Currently, only deleted file versions can be hidden
-                               $undelete = SpecialPage::getTitleFor( 'Undelete' );
-                               $reviewlink = $this->skin->makeKnownLinkObj( $undelete, $this->message['imghistory'],
-                               wfArrayToCGI( array('target' => $title->getPrefixedText() ) ) ) . ':';
-                       } else if ( $s->log_action == 'event' && isset($paramArray[0]) ) {
-                       // If this event was to a log, give a review link to logs for that page only
-                               $reviewlink = $this->skin->makeKnownLinkObj( $title, $this->message['viewpagelogs'],
-                               wfArrayToCGI( array('page' => $paramArray[0] ) ) ) . ':';
-                       }
-                       // Link to each hidden object ID
-                       $IdType = $paramArray[1].'id';
-                       $Ids = explode( ',', $paramArray[2] );
-                       foreach ( $Ids as $id ) {
-                               $reviewlink .= ' '.$this->skin->makeKnownLinkObj( $revdel, "#$id",
-                               wfArrayToCGI( array('target' => $paramArray[0], $IdType => $id ) ) );
-                       }
+                               'action=unprotect' ) . ')';
                }
-               $reviewlink = ( $reviewlink=='' ) ? "" : "&nbsp;&nbsp;&nbsp;($reviewlink) ";
-               return $reviewlink;
+
+               $action = LogPage::actionText( $s->log_type, $s->log_action, $title, $this->skin, $paramArray, true, true );
+               $out = "<li>$time $userLink $action $comment $revert</li>\n";
+               return $out;
        }
 
        /**
@@ -674,8 +409,6 @@ class LogViewer {
         * @private
         */
        function getTypeMenu() {
-               global $wgLogRestrictions, $wgUser;
-       
                $out = "<select name='type'>\n";
 
                $validTypes = LogPage::validTypes();
@@ -693,14 +426,7 @@ class LogViewer {
                // Third pass generates sorted XHTML content
                foreach( $m as $text => $type ) {
                        $selected = ($type == $this->reader->queryType());
-                       // Restricted types
-                       if ( isset($wgLogRestrictions[$type]) ) {
-                               if ( $wgUser->isAllowed( $wgLogRestrictions[$type] ) ) {
-                               $out .= Xml::option( $text, $type, $selected ) . "\n";
-                               }
-                       } else {
                        $out .= Xml::option( $text, $type, $selected ) . "\n";
-                       }
                }
 
                $out .= '</select>';
@@ -758,12 +484,5 @@ class LogViewer {
        }
 }
 
-/**
- * Aliases for backwards compatibility with 1.6
- */
-define( 'MW_LOG_DELETED_ACTION', LogViewer::DELETED_ACTION );
-define( 'MW_LOG_DELETED_USER', LogViewer::DELETED_USER );
-define( 'MW_LOG_DELETED_COMMENT', LogViewer::DELETED_COMMENT );
-define( 'MW_LOG_DELETED_RESTRICTED', LogViewer::DELETED_RESTRICTED );
 
 ?>
index 5d68b92..13d5ebf 100644 (file)
@@ -404,7 +404,7 @@ function rcDoOutputFeed( $rows, &$feed ) {
                        rcFormatDiff( $obj ),
                        $title->getFullURL(),
                        $obj->rc_timestamp,
-                       ($obj->rc_deleted & Revision::DELETED_USER) ? wfMsgHtml('rev-deleted-user') : $obj->rc_user_text,
+                       $obj->rc_user_text,
                        $talkpage->getFullURL()
                        );
                $feed->outItem( $item );
@@ -613,18 +613,15 @@ function rcFormatDiff( $row ) {
        return rcFormatDiffRow( $titleObj,
                $row->rc_last_oldid, $row->rc_this_oldid,
                $timestamp,
-               ($row->rc_deleted & Revision::DELETED_COMMENT) ? wfMsgHtml('rev-deleted-comment') : $row->rc_comment,
-               ($row->rc_deleted & Revision::DELETED_NAME) ? wfMsgHtml('rev-deleted-event') : $row->rc_actiontext );
+               $row->rc_comment );
 }
 
-function rcFormatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiontext='' ) {
+function rcFormatDiffRow( $title, $oldid, $newid, $timestamp, $comment ) {
        global $wgFeedDiffCutoff, $wgContLang, $wgUser;
        $fname = 'rcFormatDiff';
        wfProfileIn( $fname );
 
        $skin = $wgUser->getSkin();
-       # log enties
-       if( $actiontext ) $comment = "$actiontext $comment";
        $completeText = '<p>' . $skin->formatComment( $comment ) . "</p>\n";
 
        if( $title->getNamespace() >= 0 && $title->userCan( 'read' ) ) {
index 7ea1c67..2f459d0 100644 (file)
@@ -2,41 +2,36 @@
 
 /**
  * Not quite ready for production use yet; need to fix up the restricted mode,
- * and provide for preservation across delete/undelete of images.
+ * and provide for preservation across delete/undelete of the page.
+ *
+ * To try this out, set up extra permissions something like:
+ * $wgGroupPermissions['sysop']['deleterevision'] = true;
+ * $wgGroupPermissions['bureaucrat']['hiderevision'] = true;
  */
 
 function wfSpecialRevisiondelete( $par = null ) {
        global $wgOut, $wgRequest;
        
-       $target = $wgRequest->getText( 'target' );
-       // handle our many different possible input types
+       $target = $wgRequest->getVal( 'target' );
        $oldid = $wgRequest->getIntArray( 'oldid' );
-       $logid = $wgRequest->getIntArray( 'logid' );
-       $arid = $wgRequest->getIntArray( 'arid' );
-       $fileid = $wgRequest->getIntArray( 'fileid' );
-
-       $page = Title::newFromUrl( $target, false );
+       
+       $page = Title::newFromUrl( $target );
+       
        if( is_null( $page ) ) {
                $wgOut->showErrorPage( 'notargettitle', 'notargettext' );
                return;
        }
-
-       $input_types = !is_null( $oldid ) + !is_null( $logid ) + !is_null( $arid ) + !is_null( $fileid );
-       if( $input_types > 1 || $input_types==0 ) {
-       //one target set at a time please!
+       
+       if( is_null( $oldid ) ) {
                $wgOut->showErrorPage( 'revdelete-nooldid-title', 'revdelete-nooldid-text' );
                return;
        }
        
-       $form = new RevisionDeleteForm( $wgRequest, $oldid, $logid, $arid, $fileid );
+       $form = new RevisionDeleteForm( $wgRequest );
        if( $wgRequest->wasPosted() ) {
                $form->submit( $wgRequest );
-       } else if( $oldid || $arid ) {
-               $form->showRevs( $wgRequest );
-       } else if( $logid ) {
-               $form->showEvents( $wgRequest );
-       } else if( $fileid ) {
-               $form->showImages( $wgRequest );
+       } else {
+               $form->show( $wgRequest );
        }
 }
 
@@ -199,7 +194,7 @@ class RevisionDeleteForm {
                $bitfields = 0;
                $wgOut->addHtml( "<ul>" );
                        foreach( $this->files as $fileid ) {
-                               $file = new ArchivedFile( $this->page, $fileid );
+                               $file = new FSarchivedFile( $this->page, $fileid );
                                if( !isset( $file->mId ) ) {
                                        $wgOut->showErrorPage( 'revdelete-nooldid-title', 'revdelete-nooldid-text' );
                                        return;
@@ -307,11 +302,10 @@ class RevisionDeleteForm {
                        null ) );
                
                $wgOut->addHtml( '<fieldset><legend>' . wfMsgHtml( 'revdelete-legend' ) . '</legend>' );
-               // FIXME: all items checked for just on event are checked, even if not set for the others
                foreach( $this->checks as $item ) {
                        list( $message, $name, $field ) = $item;
                        $wgOut->addHtml( '<div>' .
-                               wfCheckLabel( wfMsgHtml( $message), $name, $name, $bitfields & $field ) .
+                               wfCheckLabel( wfMsg( $message), $name, $name, $rev->isDeleted( $field ) ) .
                                '</div>' );
                }
                $wgOut->addHtml( '</fieldset>' );
@@ -332,83 +326,14 @@ class RevisionDeleteForm {
        function historyLine( $rev ) {
                global $wgContLang;
                $date = $wgContLang->timeanddate( $rev->getTimestamp() );
-               
-               $difflink=''; $del = '';
-               if( $this->deletetype=='old' ) {
-                       $difflink = '(' . $this->skin->makeKnownLinkObj( $this->page, wfMsgHtml('diff'), 
-               '&diff=' . $rev->getId() . '&oldid=prev' ) . ')';
-                       $revlink = $this->skin->makeLinkObj( $this->page, $date, 'oldid=' . $rev->getId() );
-               } else if( $this->deletetype=='ar' ) {
-                       $undelete = SpecialPage::getTitleFor( 'Undelete' );
-                       $target = $this->page->getPrefixedText();
-                       $revlink = $this->skin->makeLinkObj( $undelete, $date, "target=$target&timestamp=" . $rev->getTimestamp() );
-               }
-       
-               if ( $rev->isDeleted(Revision::DELETED_TEXT) ) {
-                       $revlink = '<span class="history-deleted">'.$revlink.'</span>';
-                       $del = ' <tt>' . wfMsgHtml( 'deletedrev' ) . '</tt>';
-                       if ( !$rev->userCan(Revision::DELETED_TEXT) ) {
-                               $revlink = '<span class="history-deleted">'.$date.'</span>';
-                       }
-               }
-               
-               return
-                       "<li> $difflink $revlink " . $this->skin->revUserLink( $rev ) . " " . $this->skin->revComment( $rev ) . "$del</li>";
-       }
-       
-       /**
-        * @param Image $file
-        * @returns string
-        */     
-       function uploadLine( $file ) {
-               global $wgContLang;
-               
-               $target = $this->page->getPrefixedText();
-               $date = $wgContLang->timeanddate( $file->mTimestamp, true  );
-
-               $del = '';
-               if ( $file->mGroup == 'deleted' ) {
-                       $undelete = SpecialPage::getTitleFor( 'Undelete' );
-                       $pageLink = $this->skin->makeKnownLinkObj( $undelete, $date, "target=$target&file=$file->mKey" );
-               } else {
-                       $pageLink = $this->skin->makeKnownLinkObj( $this->page, $date, "file=$file->mKey" );
-               }
-               if ( $file->isDeleted(Image::DELETED_FILE) ) {
-                       $pageLink = '<span class="history-deleted">' . $pageLink . '</span>';
-                       $del = ' <tt>' . wfMsgHtml( 'deletedrev' ) . '</tt>';
-                       if ( !$file->userCan(Image::DELETED_FILE) ) {
-                               $pageLink = '<span class="history-deleted">'.$date.'</span>';
-                       }
-               }
-               
-               $data = wfMsgHtml( 'widthheight',
-                                               $wgContLang->formatNum( $file->mWidth ),
-                                               $wgContLang->formatNum( $file->mHeight ) ) .
-                               ' (' . wfMsgHtml( 'nbytes', $wgContLang->formatNum( $file->mSize ) ) . ')';     
-       
                return
-                       "<li> $pageLink " . $this->skin->fileUserLink( $file ) . " $data " . $this->skin->fileComment( $file ) . "$del</li>";
-       }
-       
-       /**
-        * @param Revision $rev
-        * @returns string
-        */
-       function logLine( $log, $event ) {
-               global $wgContLang;
-
-               $date = $wgContLang->timeanddate( $event->log_timestamp );
-               $paramArray = LogPage::extractParams( $event->log_params );
-
-               if ( !LogViewer::userCan($event,LogViewer::DELETED_ACTION) ) {
-                       $action = '<span class="history-deleted">' . wfMsgHtml('rev-deleted-event') . '</span>';        
-               } else {        
-                       $action = LogPage::actionText( $event->log_type, $event->log_action, $this->page, $this->skin, $paramArray, true, true );
-                       if( $event->log_deleted & LogViewer::DELETED_ACTION )
-                               $action = '<span class="history-deleted">' . $action . '</span>';
-               }
-               return
-                       "<li>$date" . " " . $this->skin->logUserLink( $event ) . " $action " . $this->skin->logComment( $event ) . "</li>";
+                       "<li>" .
+                       $this->skin->makeLinkObj( $this->page, $date, 'oldid=' . $rev->getId() ) .
+                       " " .
+                       $this->skin->revUserLink( $rev ) .
+                       " " .
+                       $this->skin->revComment( $rev ) .
+                       "</li>";
        }
        
        /**
@@ -417,51 +342,16 @@ class RevisionDeleteForm {
        function submit( $request ) {
                $bitfield = $this->extractBitfield( $request );
                $comment = $request->getText( 'wpReason' );
-               
-               $target = $request->getText( 'target' );
-               $title = Title::newFromURL( $target, false );
-               
-               if( $this->save( $bitfield, $comment, $title ) ) {
-                       $this->success( $request );
-               } else if( $request->getCheck( 'oldid' ) || $request->getCheck( 'arid' ) ) {
-                       return $this->showRevs( $request );
-               } else if( $request->getCheck( 'logid' ) ) {
-                       return $this->showLogs( $request );
-               } else if( $request->getCheck( 'fileid' ) ) {
-                       return $this->showImages( $request );
-               } 
+               if( $this->save( $bitfield, $comment ) ) {
+                       return $this->success( $request );
+               } else {
+                       return $this->show( $request );
+               }
        }
        
        function success( $request ) {
                global $wgOut;
-               
-               $wgOut->setPagetitle( wfMsgHtml( 'actioncomplete' ) );
-               
-               $target = $request->getText( 'target' );
-               $type = $request->getText( 'type' );
-
-               $title = Title::newFromURL( $target, false );
-               $name = $title->makeName( $title->getNamespace(), $title->getText() );
-               
-               $logtitle = SpecialPage::getTitleFor( 'Log' );
-        $loglink = $this->skin->makeKnownLinkObj( $logtitle, wfMsgHtml( 'viewpagelogs' ),
-               wfArrayToCGI( array('page' => $name ) ) );
-               $histlink = $this->skin->makeKnownLinkObj( $title, wfMsgHtml( 'revhistory' ),
-               wfArrayToCGI( array('action' => 'history' ) ) );
-               
-               if ( $title->getNamespace() > -1)
-                       $wgOut->setSubtitle( '<p>'.$histlink.' / '.$loglink.'</p>' );
-               
-               if( $type=='log' ) {
-                       $wgOut->addWikiText( wfMsgHtml('logdelete-success', $target), false );
-                       $this->showEvents( $request );
-               } else if( $type=='old' || $type=='ar' ) {
-                       $wgOut->addWikiText( wfMsgHtml('revdelete-success', $target), false );
-                       $this->showRevs( $request );
-               } else if ( $type=='file' ) {
-                       $wgOut->addWikiText( wfMsgHtml('revdelete-success', $target), false );
-                       $this->showImages( $request );
-               }
+               $wgOut->addWikiText( 'woo' );
        }
        
        /**
@@ -480,19 +370,10 @@ class RevisionDeleteForm {
                return $bitfield;
        }
        
-       function save( $bitfield, $reason, $title ) {
+       function save( $bitfield, $reason ) {
                $dbw = wfGetDB( DB_MASTER );
                $deleter = new RevisionDeleter( $dbw );
-
-               if( $this->revisions ) {
-                       return $deleter->setRevVisibility( $title, $this->revisions, $bitfield, $reason );
-               } else if( $this->events ) {
-                       return $deleter->setEventVisibility( $title, $this->events, $bitfield, $reason );
-               } else if( $this->archrevs ) {
-                       return $deleter->setArchiveVisibility( $title, $this->archrevs, $bitfield, $reason );
-               } else if( $this->files ) {
-                       return $deleter->setFileVisibility( $title, $this->files, $bitfield, $reason );
-               }
+               $deleter->setVisibility( $this->revisions, $bitfield, $reason );
        }
 }
 
@@ -503,191 +384,41 @@ class RevisionDeleter {
        }
        
        /**
-        * @param $title, the page these events apply to
         * @param array $items list of revision ID numbers
         * @param int $bitfield new rev_deleted value
         * @param string $comment Comment for log records
         */
-       function setRevVisibility( $title, $items, $bitfield, $comment ) {
-               global $wgOut;
+       function setVisibility( $items, $bitfield, $comment ) {
+               $pages = array();
                
-               $UserAllowedAll = true;
-               $pages_count = array(); $pages_revIds = array();
                // To work!
                foreach( $items as $revid ) {
-                       $rev = Revision::newFromTitle( $title, $revid );
-                       if( !isset( $rev ) || $rev->isCurrent() ) {
+                       $rev = Revision::newFromId( $revid );
+                       if( !isset( $rev ) ) {
                                return false;
-                       } else if( !$rev->userCan(Revision::DELETED_RESTRICTED) ) {
-                       $UserAllowedAll=false; 
-                               continue;
                        }
-                       $pageid = $rev->getPage();
+                       $this->updateRevision( $rev, $bitfield );
+                       $this->updateRecentChanges( $rev, $bitfield );
+                       
                        // For logging, maintain a count of revisions per page
-                       if ( !isset($pages_count[$pageid]) ) {
-                               $pages_count[$pageid]=0;
-                               $pages_revIds[$pageid]=array();
-                       }
-                       // Which pages did we change anything about?
-                       if ( $rev->mDeleted != $bitfield ) {
-                               $pages_count[$pageid]++;
-                               $pages_revIds[$pageid][]=$revid;
-                               
-                               $this->updateRevision( $rev, $bitfield );
-                               $this->updateRecentChangesEdits( $rev, $bitfield, false );
+                       $pageid = $rev->getPage();
+                       if( isset( $pages[$pageid] ) ) {
+                               $pages[$pageid]++;
+                       } else {
+                               $pages[$pageid] = 1;
                        }
                }
                
                // Clear caches...
-               foreach( $pages_count as $pageid => $count ) {
-                       //Don't log or touch if nothing changed
-                       if ( $count > 0 ) {
-                          $title = Title::newFromId( $pageid );
-                          $this->updatePage( $title );
-                          $this->updateLog( $title, $count, $bitfield, $comment, $title, 'old', $pages_revIds[$pageid] );
-                       }
-               }
-               // Where all revs allowed to be set?
-               if ( !$UserAllowedAll ) {
-               //FIXME: still might be confusing???
-                       $wgOut->permissionRequired( 'hiderevision' ); return false;
+               foreach( $pages as $pageid => $count ) {
+                       $title = Title::newFromId( $pageid );
+                       $this->updatePage( $title );
+                       $this->updateLog( $title, $count, $bitfield, $comment );
                }
                
                return true;
        }
        
-        /**
-        * @param $title, the page these events apply to
-        * @param array $items list of revision ID numbers
-        * @param int $bitfield new rev_deleted value
-        * @param string $comment Comment for log records
-        */
-       function setArchiveVisibility( $title, $items, $bitfield, $comment ) {
-               global $wgOut;
-               
-               $UserAllowedAll = true;
-               $count = 0; $Id_set = array();
-               // To work!
-               $archive = new PageArchive( $title );
-               foreach( $items as $revid ) {
-                       $rev = $archive->getRevision( '', $revid );
-                       if( !isset( $rev ) ) {
-                               return false;
-                       } else if( !$rev->userCan(Revision::DELETED_RESTRICTED) ) {
-                       $UserAllowedAll=false;
-                               continue;
-                       }
-                       // For logging, maintain a count of revisions
-                       if ( $rev->mDeleted != $bitfield ) {
-                          $Id_set[]=$revid;
-                          $count++;
-                       }               
-                       $this->updateArchive( $rev, $bitfield );
-               }
-               
-               // Log if something was changed
-               if ( $count > 0 ) {
-                       $this->updateLog( $title, $count, $bitfield, $comment, $title, 'ar', $Id_set );
-               }
-               // Where all revs allowed to be set?
-               if ( !$UserAllowedAll ) {
-                       $wgOut->permissionRequired( 'hiderevision' ); return false;
-               }
-               
-               return true;
-       }
-       
-        /**
-        * @param $title, the page these events apply to
-        * @param array $items list of revision ID numbers
-        * @param int $bitfield new rev_deleted value
-        * @param string $comment Comment for log records
-        */
-       function setFileVisibility( $title, $items, $bitfield, $comment ) {
-               global $wgOut;
-               
-               $UserAllowedAll = true;
-               $count = 0; $Id_set = array();
-               // To work!
-               foreach( $items as $fileid ) {
-                       $file = new ArchivedFile( $title, $fileid );
-                       if( !isset( $file ) ) {
-                               return false;
-                       } else if( !$file->userCan(Revision::DELETED_RESTRICTED) ) {
-                       $UserAllowedAll=false;
-                               continue;
-                       }
-                       // For logging, maintain a count of revisions
-                       if ( $file->mDeleted != $bitfield ) {
-                          $Id_set[]=$fileid;
-                          $count++;
-                       }               
-                       $this->updateFiles( $file, $bitfield );
-               }
-               
-               // Log if something was changed
-               if ( $count > 0 ) {
-                       $this->updateLog( $title, $count, $bitfield, $comment, $title, 'file', $Id_set );
-               }
-               // Where all revs allowed to be set?
-               if ( !$UserAllowedAll ) {
-                       $wgOut->permissionRequired( 'hiderevision' ); return false;
-               }
-               
-               return true;
-       }
-
-       /**
-        * @param $title, the page these events apply to
-        * @param array $items list of log ID numbers
-        * @param int $bitfield new log_deleted value
-        * @param string $comment Comment for log records
-        */
-       function setEventVisibility( $title, $items, $bitfield, $comment ) {
-               global $wgOut;
-               
-               $UserAllowedAll = true;
-               $logs_count = array(); $logs_Ids = array();
-               // To work!
-               foreach( $items as $logid ) {
-                       $event = LogReader::newFromTitle( $title, $logid );
-                       if( !isset( $event ) ) {
-                               return false;
-                       } else if( !LogViewer::userCan($event, Revision::DELETED_RESTRICTED) || $event->log_type == 'oversight' ) {
-                       // Don't hide from oversight log!!!
-                       $UserAllowedAll=false;
-                       continue;
-                       }
-                       $logtype = $event->log_type;
-                       // For logging, maintain a count of events per log type
-                       if( !isset( $logs_count[$logtype] ) ) {
-                               $logs_count[$logtype]=0;
-                               $logs_Ids[$logtype]=array();
-                       }
-                       // Which logs did we change anything about?
-                       if ( $event->log_deleted != $bitfield ) {
-                               $logs_Ids[$logtype][]=$logid;
-                               $logs_count[$logtype]++;
-                          
-                               $this->updateLogs( $event, $bitfield );
-                               $this->updateRecentChangesLog( $event, $bitfield, true );
-                       }
-               }
-               foreach( $logs_count as $logtype => $count ) {
-                       //Don't log or touch if nothing changed
-                       if ( $count > 0 ) {
-                          $target = SpecialPage::getTitleFor( 'Log', $logtype );
-                          $this->updateLog( $target, $count, $bitfield, $comment, $title, 'log', $logs_Ids[$logtype] );
-                       }
-               }
-               // Where all revs allowed to be set?
-               if ( !$UserAllowedAll ) {
-                       $wgOut->permissionRequired( 'hiderevision' ); return false;
-               }
-               
-               return true;
-       }       
-       
        /**
         * Update the revision's rev_deleted field
         * @param Revision $rev
@@ -700,66 +431,20 @@ class RevisionDeleter {
                        'RevisionDeleter::updateRevision' );
        }
        
-       /**
-        * Update the revision's rev_deleted field
-        * @param Revision $rev
-        * @param int $bitfield new rev_deleted bitfield value
-        */
-       function updateArchive( $rev, $bitfield ) {
-               $this->db->update( 'archive',
-                       array( 'ar_deleted' => $bitfield ),
-                       array( 'ar_rev_id' => $rev->getId() ),
-                       'RevisionDeleter::updateArchive' );
-       }
-
-       /**
-        * Update the images's fa_deleted field
-        * @param Revision $file
-        * @param int $bitfield new rev_deleted bitfield value
-        */
-       function updateFiles( $file, $bitfield ) {
-               $this->db->update( 'filearchive',
-                       array( 'fa_deleted' => $bitfield ),
-                       array( 'fa_id' => $file->mId ),
-                       'RevisionDeleter::updateFiles' );
-       }       
-       
-       /**
-        * Update the logging log_deleted field
-        * @param Revision $rev
-        * @param int $bitfield new rev_deleted bitfield value
-        */
-       function updateLogs( $event, $bitfield ) {
-               $this->db->update( 'logging',
-                       array( 'log_deleted' => $bitfield ),
-                       array( 'log_id' => $event->log_id ),
-                       'RevisionDeleter::updateLogs' );
-       }
-       
-       /**
-        * Update the revision's recentchanges record if fields have been hidden
-        * @param Revision $event
-        * @param int $bitfield new rev_deleted bitfield value
-        */
-       function updateRecentChangesLog( $event, $bitfield ) {
-               $this->db->update( 'recentchanges',
-                       array( 'rc_deleted' => $bitfield,
-                                  'rc_patrolled' => 1),
-                       array( 'rc_logid' => $event->log_id ),
-                       'RevisionDeleter::updateRecentChangesLog' );
-       }
-       
        /**
         * Update the revision's recentchanges record if fields have been hidden
         * @param Revision $rev
         * @param int $bitfield new rev_deleted bitfield value
         */
-       function updateRecentChangesEdits( $rev, $bitfield ) {
+       function updateRecentChanges( $rev, $bitfield ) {
                $this->db->update( 'recentchanges',
-                       array( 'rc_deleted' => $bitfield,
-                                  'rc_patrolled' => 1),
-                       array( 'rc_this_oldid' => $rev->getId() ),
-                       'RevisionDeleter::updateRecentChangesEdits' );
+                       array(
+                               'rc_user' => ($bitfield & Revision::DELETED_USER) ? 0 : $rev->getUser(),
+                               'rc_user_text' => ($bitfield & Revision::DELETED_USER) ? wfMsg( 'rev-deleted-user' ) : $rev->getUserText(),
+                               'rc_comment' => ($bitfield & Revision::DELETED_COMMENT) ? wfMsg( 'rev-deleted-comment' ) : $rev->getComment() ),
+                       array(
+                               'rc_this_oldid' => $rev->getId() ),
+                       'RevisionDeleter::updateRecentChanges' );
        }
        
        /**
@@ -779,25 +464,11 @@ class RevisionDeleter {
         * @param int $bitfield the new rev_deleted value
         * @param string $comment
         */
-       function updateLog( $title, $count, $bitfield, $comment, $target, $prefix, $items = array() ) {
-               // Put things hidden from sysops in the oversight log
-               $logtype = ( $bitfield & Revision::DELETED_RESTRICTED ) ? 'oversight' : 'delete';
-               // Add params for effected page and ids
-               $params = array( $target->getPrefixedText(), $prefix, implode( ',', $items) );
-               $log = new LogPage( $logtype ); 
-               if ( $prefix=='log' ) {
-               $reason = wfMsgExt('logdelete-logaction', array('parsemag'), $count, $bitfield, $target->getPrefixedText() );
-                       if ($comment) $reason .= ": $comment";
-                       $log->addEntry( 'event', $title, $reason, $params );
-               } else if ( $prefix=='old' ) {
-               $reason = wfMsgExt('revdelete-logaction', array('parsemag'), $count, $bitfield );
-                       if ($comment) $reason .= ": $comment";
-                       $log->addEntry( 'revision', $title, $reason, $params );
-               } else if ( $prefix=='file' ) {
-               $reason = wfMsgExt('revdelete-logaction', array('parsemag'), $count, $bitfield );
-                       if ($comment) $reason .= ": $comment";
-                       $log->addEntry( 'file', $title, $reason, $params );
-               }
+       function updateLog( $title, $count, $bitfield, $comment ) {
+               $log = new LogPage( 'delete' );
+               $reason = "changed $count revisions to $bitfield";
+               $reason .= ": $comment";
+               $log->addEntry( 'revision', $title, $reason );
        }
 }
 
index afe49c9..8aaf785 100644 (file)
@@ -99,7 +99,7 @@ class PageArchive {
        function listRevisions() {
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'archive',
-                       array( 'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text', 'ar_comment', 'ar_rev_id', 'ar_deleted', 'ar_len' ),
+                       array( 'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text', 'ar_comment', 'ar_len' ),
                        array( 'ar_namespace' => $this->title->getNamespace(),
                               'ar_title' => $this->title->getDBkey() ),
                        'PageArchive::listRevisions',
@@ -116,7 +116,7 @@ class PageArchive {
         * @return ResultWrapper
         * @fixme Does this belong in Image for fuller encapsulation?
         */
-       function listFiles() {          
+       function listFiles() {
                if( $this->title->getNamespace() == NS_IMAGE ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $res = $dbr->select( 'filearchive',
@@ -130,8 +130,7 @@ class PageArchive {
                                        'fa_description',
                                        'fa_user',
                                        'fa_user_text',
-                                       'fa_timestamp',
-                                       'fa_deleted' ),
+                                       'fa_timestamp' ),
                                array( 'fa_name' => $this->title->getDbKey() ),
                                __METHOD__,
                                array( 'ORDER BY' => 'fa_timestamp DESC' ) );
@@ -152,25 +151,14 @@ class PageArchive {
                $rev = $this->getRevision( $timestamp );
                return $rev ? $rev->getText() : null;
        }
-       
-       function getRevisionConds( $timestamp, $id ) {
-               if ( $id ) {
-                       $id = intval($id);
-                       return "ar_rev_id=$id";
-               } else if ( $timestamp ) {
-                       return "ar_timestamp=$timestamp";
-               } else {
-                       return 'ar_rev_id=0';
-               }
-       }
 
        /**
         * Return a Revision object containing data for the deleted revision.
-        * Note that the result *may* have a null page ID.
-        * @param string $timestamp or $id
+        * Note that the result *may* or *may not* have a null page ID.
+        * @param string $timestamp
         * @return Revision
         */
-       function getRevision( $timestamp, $id=null ) {
+       function getRevision( $timestamp ) {
                $dbr = wfGetDB( DB_SLAVE );
                $row = $dbr->selectRow( 'archive',
                        array(
@@ -183,11 +171,10 @@ class PageArchive {
                                'ar_minor_edit',
                                'ar_flags',
                                'ar_text_id',
-                               'ar_deleted',
                                'ar_len' ),
                        array( 'ar_namespace' => $this->title->getNamespace(),
                               'ar_title' => $this->title->getDbkey(),
-                              $this->getRevisionConds( $dbr->timestamp($timestamp), $id ) ),
+                              'ar_timestamp' => $dbr->timestamp( $timestamp ) ),
                        __METHOD__ );
                if( $row ) {
                        return new Revision( array(
@@ -201,9 +188,7 @@ class PageArchive {
                                'user_text'  => $row->ar_user_text,
                                'timestamp'  => $row->ar_timestamp,
                                'minor_edit' => $row->ar_minor_edit,
-                               'text_id'    => $row->ar_text_id,
-                               'deleted'    => $row->ar_deleted,
-                               'len'        => $row->ar_len) );
+                               'text_id'    => $row->ar_text_id ) );
                } else {
                        return null;
                }
@@ -275,7 +260,7 @@ class PageArchive {
         *
         * @return true on success.
         */
-       function undelete( $timestamps, $comment = '', $fileVersions = array(), $Unsuppress = false) {
+       function undelete( $timestamps, $comment = '', $fileVersions = array() ) {
                // If both the set of text revisions and file revisions are empty,
                // restore everything. Otherwise, just restore the requested items.
                $restoreAll = empty( $timestamps ) && empty( $fileVersions );
@@ -283,20 +268,17 @@ class PageArchive {
                $restoreText = $restoreAll || !empty( $timestamps );
                $restoreFiles = $restoreAll || !empty( $fileVersions );
                
-               if( $restoreText ) {
-                       $textRestored = $this->undeleteRevisions( $timestamps, $Unsuppress );
+               if( $restoreFiles && $this->title->getNamespace() == NS_IMAGE ) {
+                       $img = new Image( $this->title );
+                       $filesRestored = $img->restore( $fileVersions );
                } else {
-                       $textRestored = 0;
+                       $filesRestored = 0;
                }
                
-               if ( $restoreText && !$textRestored) {
-               // if the image page didn't restore right, don't restore the file either!!!
-                       $filesRestored = 0;
-               } else if( $restoreFiles && $this->title->getNamespace() == NS_IMAGE ) {
-                       $img = new Image( $this->title );
-                       $filesRestored = $img->restore( $fileVersions, $Unsuppress );
+               if( $restoreText ) {
+                       $textRestored = $this->undeleteRevisions( $timestamps );
                } else {
-                       $filesRestored = 0;
+                       $textRestored = 0;
                }
                
                // Touch the log!
@@ -304,14 +286,14 @@ class PageArchive {
                $log = new LogPage( 'delete' );
                
                if( $textRestored && $filesRestored ) {
-                       $reason = wfMsgExt( 'undeletedrevisions-files', array('parsemag'),
+                       $reason = wfMsgForContent( 'undeletedrevisions-files',
                                $wgContLang->formatNum( $textRestored ),
                                $wgContLang->formatNum( $filesRestored ) );
                } elseif( $textRestored ) {
-                       $reason = wfMsgExt( 'undeletedrevisions', array('parsemag'),
+                       $reason = wfMsgForContent( 'undeletedrevisions',
                                $wgContLang->formatNum( $textRestored ) );
                } elseif( $filesRestored ) {
-                       $reason = wfMsgExt( 'undeletedfiles', array('parsemag'),
+                       $reason = wfMsgForContent( 'undeletedfiles',
                                $wgContLang->formatNum( $filesRestored ) );
                } else {
                        wfDebug( "Undelete: nothing undeleted...\n" );
@@ -333,11 +315,10 @@ class PageArchive {
         * @param array $timestamps Pass an empty array to restore all revisions, otherwise list the ones to undelete.
         * @param string $comment
         * @param array $fileVersions
-        * @param bool $Unsuppress, remove all ar_deleted/fa_deleted restrictions of seletected revs
         *
         * @return int number of revisions restored
         */
-       private function undeleteRevisions( $timestamps, $Unsuppress = false ) {
+       private function undeleteRevisions( $timestamps ) {
                global $wgDBtype;
 
                $restoreAll = empty( $timestamps );
@@ -381,7 +362,7 @@ class PageArchive {
                }
 
                /**
-                * Select each archived revision...
+                * Restore each revision...
                 */
                $result = $dbw->select( 'archive',
                        /* fields */ array(
@@ -394,7 +375,6 @@ class PageArchive {
                                'ar_minor_edit',
                                'ar_flags',
                                'ar_text_id',
-                               'ar_deleted',
                                'ar_len' ),
                        /* WHERE */ array(
                                'ar_namespace' => $this->title->getNamespace(),
@@ -404,30 +384,15 @@ class PageArchive {
                        /* options */ array(
                                'ORDER BY' => 'ar_timestamp' )
                        );
-               $rev_count = $dbw->numRows( $result );
-               if( $rev_count < count( $timestamps ) ) {
-                       # Remove page stub per failure
-                       $dbw->delete( 'page', array( 'page_id' => $pageId ), __METHOD__);
+               if( $dbw->numRows( $result ) < count( $timestamps ) ) {
                        wfDebug( __METHOD__.": couldn't find all requested rows\n" );
                        return false;
                }
                
-               $ret = $dbw->resultObject( $result );           
-               // FIXME: We don't currently handle well changing the top revision's settings
-               $ret->seek( $rev_count - 1 );
-               $last_row = $ret->fetchObject();
-               if ( !$Unsuppress && $last_row->ar_deleted && $last_row->ar_rev_id > $previousRevId ) {
-                       # Remove page stub per failure
-                       $dbw->delete( 'page', array( 'page_id' => $pageId ), __METHOD__);
-                       wfDebug( __METHOD__.": couldn't find all requested rows or not all of them could be restored\n" );
-                       return false;
-               }
-
                $revision = null;
                $restored = 0;
-               
-               $ret->seek( 0 );
-               while( $row = $ret->fetchObject() ) {
+
+               while( $row = $dbw->fetchObject( $result ) ) {
                        if( $row->ar_text_id ) {
                                // Revision was deleted in 1.5+; text is in
                                // the regular text table, use the reference.
@@ -450,8 +415,7 @@ class PageArchive {
                                'timestamp'  => $row->ar_timestamp,
                                'minor_edit' => $row->ar_minor_edit,
                                'text_id'    => $row->ar_text_id,
-                               'deleted'        => ($Unsuppress) ? 0 : $row->ar_deleted,
-                               'len'        => $row->ar_len
+                               'len'            => $row->ar_len
                                ) );
                        $revision->insertOn( $dbw );
                        $restored++;
@@ -513,7 +477,6 @@ class UndeleteForm {
                $this->mRestore = $request->getCheck( 'restore' ) && $posted;
                $this->mPreview = $request->getCheck( 'preview' ) && $posted;
                $this->mComment = $request->getText( 'wpComment' );
-               $this->mUnsuppress = $request->getVal( 'wpUnsuppress' ) && $wgUser->isAllowed( 'oversight' );
                
                if( $par != "" ) {
                        $this->mTarget = $par;
@@ -549,25 +512,21 @@ class UndeleteForm {
        }
 
        function execute() {
-               global $wgOut, $wgUser;
+               global $wgOut;
                if ( $this->mAllowed ) {
-                       $wgOut->setPagetitle( wfMsgHtml( "undeletepage" ) );
+                       $wgOut->setPagetitle( wfMsg( "undeletepage" ) );
                } else {
-                       $wgOut->setPagetitle( wfMsgHtml( "viewdeletedpage" ) );
+                       $wgOut->setPagetitle( wfMsg( "viewdeletedpage" ) );
                }
                
                if( is_null( $this->mTargetObj ) ) {
-               # Not all users can just browse every deleted page from the list
-                       if ( $wgUser->isAllowed( 'browsearchive' ) ) {
-                               $this->showSearchForm();
+                       $this->showSearchForm();
 
-                               # List undeletable articles
-                               if( $this->mSearchPrefix ) {
-                                       $result = PageArchive::listPagesByPrefix( $this->mSearchPrefix );
-                                       $this->showList( $result );
-                               }
-                       } else {
-                               $wgOut->addWikiText( wfMsgHtml( 'undelete-header' ) );
+                       # List undeletable articles
+                       if( $this->mSearchPrefix ) {
+                               $result = PageArchive::listPagesByPrefix(
+                                       $this->mSearchPrefix );
+                               $this->showList( $result );
                        }
                        return;
                }
@@ -575,14 +534,7 @@ class UndeleteForm {
                        return $this->showRevision( $this->mTimestamp );
                }
                if( $this->mFile !== null ) {
-                       $file = new ArchivedFile( $this->mTargetObj, '', $this->mFile );
-                       // Check if user is allowed to see this file
-                       if ( !$file->userCan( Image::DELETED_FILE ) ) {
-                               $wgOut->permissionRequired( 'hiderevision' ); 
-                               return false;
-                       } else {
-                               return $this->showFile( $this->mFile );
-                       }
+                       return $this->showFile( $this->mFile );
                }
                if( $this->mRestore && $this->mAction == "submit" ) {
                        return $this->undelete();
@@ -592,7 +544,7 @@ class UndeleteForm {
 
        function showSearchForm() {
                global $wgOut, $wgScript;
-               $wgOut->addWikiText( wfMsgHtml( 'undelete-header' ) );
+               $wgOut->addWikiText( wfMsg( 'undelete-header' ) );
                
                $wgOut->addHtml(
                        Xml::openElement( 'form', array(
@@ -611,7 +563,6 @@ class UndeleteForm {
                        '</form>' );
        }
 
-       // Generic list of deleted pages
        /* private */ function showList( $result ) {
                global $wgLang, $wgContLang, $wgUser, $wgOut;
                
@@ -661,22 +612,11 @@ class UndeleteForm {
                        return;
                }
                
-               if( $rev->isDeleted(Revision::DELETED_TEXT) ) {
-                       if( !$rev->userCan(Revision::DELETED_TEXT) ) {
-                               $wgOut->addWikiText( wfMsg( 'rev-deleted-text-permission' ) );
-                               return;
-                       } else {
-                               $wgOut->addWikiText( wfMsg( 'rev-deleted-text-view' ) );
-                               $wgOut->addHTML( '<br/>' );
-                               // and we are allowed to see...
-                               }
-                       }
-               
                wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) );
                
                if( $this->mPreview ) {
                        $wgOut->addHtml( "<hr />\n" );
-                       $wgOut->addWikiTextTitle( $rev->revText(), $this->mTargetObj, false );
+                       $wgOut->addWikiTextTitle( $rev->getText(), $this->mTargetObj, false );
                }
 
                $wgOut->addHtml(
@@ -684,7 +624,7 @@ class UndeleteForm {
                                        'readonly' => true,
                                        'cols' => intval( $wgUser->getOption( 'cols' ) ),
                                        'rows' => intval( $wgUser->getOption( 'rows' ) ) ),
-                               $rev->revText() . "\n" ) .
+                               $rev->getText() . "\n" ) .
                        wfOpenElement( 'div' ) .
                        wfOpenElement( 'form', array(
                                'method' => 'post',
@@ -734,7 +674,7 @@ class UndeleteForm {
        /* private */ function showHistory() {
                global $wgLang, $wgUser, $wgOut;
 
-               $this->sk = $wgUser->getSkin();
+               $sk = $wgUser->getSkin();
                if ( $this->mAllowed ) {
                        $wgOut->setPagetitle( wfMsg( "undeletepage" ) );
                } else {
@@ -750,10 +690,9 @@ class UndeleteForm {
                }
                */
                if ( $this->mAllowed ) {
-                       $wgOut->addWikiText( '<p>' . wfMsgHtml( "undeletehistory" ) . '</p>' );
-                       $wgOut->addHtml( '<p>' . wfMsgHtml( "undeleterevdel" ) . '</p>' );
+                       $wgOut->addWikiText( wfMsg( "undeletehistory" ) );
                } else {
-                       $wgOut->addWikiText( wfMsgHtml( "undeletehistorynoadmin" ) );
+                       $wgOut->addWikiText( wfMsg( "undeletehistorynoadmin" ) );
                }
 
                # List all stored revisions
@@ -799,16 +738,7 @@ class UndeleteForm {
                                        array( 'page' => $this->mTargetObj->getPrefixedText(),
                                                   'type' => 'delete' ) ) ) );
                $logViewer->showList( $wgOut );
-               # Show relevant lines from the oversight log if user is allowed to see it:
-               if ( $wgUser->isAllowed( 'oversight' ) ) {
-                       $wgOut->addHTML( "<h2>" . htmlspecialchars( LogPage::logName( 'oversight' ) ) . "</h2>\n" );
-                       $logViewer = new LogViewer(
-                               new LogReader(
-                                       new FauxRequest(
-                                               array( 'page' => $this->mTargetObj->getPrefixedText(),
-                                                          'type' => 'oversight' ) ) ) );
-                       $logViewer->showList( $wgOut );
-               }
+               
                if( $this->mAllowed && ( $haveRevisions || $haveFiles ) ) {
                        # Format the user-visible controls (comment field, submission button)
                        # in a nice little table
@@ -816,10 +746,6 @@ class UndeleteForm {
                        $table .= '<td colspan="2">' . wfMsgWikiHtml( 'undeleteextrahelp' ) . '</td></tr><tr>';
                        $table .= '<td align="right"><strong>' . wfMsgHtml( 'undeletecomment' ) . '</strong></td>';
                        $table .= '<td>' . wfInput( 'wpComment', 50, $this->mComment ) . '</td>';
-                       if ( $wgUser->isAllowed( 'oversight' ) ) {
-                               $table .= '</tr><tr><td>&nbsp;</td><td>';
-                               $table .= Xml::checkLabel( wfMsg( 'revdelete-unsuppress' ), 'wpUnsuppress', 'wpUnsuppress', false, array( 'tabindex' => '2' ) );
-                       }
                        $table .= '</tr><tr><td>&nbsp;</td><td>';
                        $table .= wfSubmitButton( wfMsg( 'undeletebtn' ), array( 'name' => 'restore' ) );
                        $table .= wfElement( 'input', array( 'type' => 'reset', 'value' => wfMsg( 'undeletereset' ) ) );
@@ -835,48 +761,26 @@ class UndeleteForm {
                        $target = urlencode( $this->mTarget );
                        while( $row = $revisions->fetchObject() ) {
                                $ts = wfTimestamp( TS_MW, $row->ar_timestamp );
-                               // We don't handle top edits with rev_deleted 
                                if ( $this->mAllowed ) {
-                                       $checkBox = wfCheck( "ts$ts", false );
-                                       $titleObj = SpecialPage::getTitleFor( "Undelete" );
-                                       $pageLink = $this->getPageLink( $row, $titleObj, $ts, $target );
+                                       $checkBox = wfCheck( "ts$ts" );
+                                       $pageLink = $sk->makeKnownLinkObj( $titleObj,
+                                               $wgLang->timeanddate( $ts, true ),
+                                               "target=$target&timestamp=$ts" );
                                } else {
                                        $checkBox = '';
                                        $pageLink = $wgLang->timeanddate( $ts, true );
                                }
-                               $userLink = $this->getUser( $row );
+                               $userLink = $sk->userLink( $row->ar_user, $row->ar_user_text ) . $sk->userToolLinks( $row->ar_user, $row->ar_user_text );
                                $stxt = '';
                                if (!is_null($size = $row->ar_len)) {
                                        if ($size == 0)
                                        $stxt = wfMsgHtml('historyempty');
-                                       else
+                               else
                                        $stxt = wfMsgHtml('historysize', $wgLang->formatNum( $size ) );
                                }
-                               $comment = $this->getComment( $row );
-                               $rd='';
-                               if( $wgUser->isAllowed( 'deleterevision' ) ) {
-                                       $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-                                       if( !$this->userCan( $row, Revision::DELETED_RESTRICTED ) ) {
-                                       // If revision was hidden from sysops
-                                               $del = wfMsgHtml( 'rev-delundel' );                     
-                                       } else {
-                                               $del = $this->sk->makeKnownLinkObj( $revdel,
-                                                       wfMsg( 'rev-delundel' ),
-                                                       'target=' . urlencode( $this->mTarget ) .
-                                                       '&arid=' . urlencode( $row->ar_rev_id ) );
-                                               // Bolden oversighted content
-                                               if( $this->isDeleted( $row, Revision::DELETED_RESTRICTED ) )
-                                                       $del = "<strong>$del</strong>";
-                                       }
-                               $rd = "<tt>(<small>$del</small>)</tt>";
-                               }
-                               
-                               $dflag='';
-                               if( $this->isDeleted( $row, Revision::DELETED_TEXT ) )
-                                       $dflag = ' <tt>' . wfMsgHtml( 'deletedrev' ) . '</tt>';
-                               
-                               // Do we still need checkboxes?
-                               $wgOut->addHTML( "<li>$checkBox $rd $pageLink . . $userLink $stxt $comment$dflag</li>\n" );
+                               $comment = $sk->commentBlock( $row->ar_comment );
+                               $wgOut->addHTML( "<li>$checkBox $pageLink . . $userLink $stxt $comment</li>\n" );
+       
                        }
                        $revisions->free();
                        $wgOut->addHTML("</ul>");
@@ -891,21 +795,17 @@ class UndeleteForm {
                        while( $row = $files->fetchObject() ) {
                                $ts = wfTimestamp( TS_MW, $row->fa_timestamp );
                                if ( $this->mAllowed && $row->fa_storage_key ) {
-                                       if ( !$this->userCan( $row, Revision::DELETED_RESTRICTED ) )
-                                       // Grey out boxes to files restricted beyond this user.
-                                       // In the future, all image storage may use FileStore, allowing
-                                       // for such items to be restored and retain their fa_deleted status
-                                               $checkBox = wfCheck( "", false, array("disabled" => "disabled") );
-                                       else
-                                               $checkBox = wfCheck( "fileid" . $row->fa_id );
+                                       $checkBox = wfCheck( "fileid" . $row->fa_id );
                                        $key = urlencode( $row->fa_storage_key );
                                        $target = urlencode( $this->mTarget );
-                                       $pageLink = $this->getFileLink( $row, $titleObj, $ts, $target, $key );
+                                       $pageLink = $sk->makeKnownLinkObj( $titleObj,
+                                               $wgLang->timeanddate( $ts, true ),
+                                               "target=$target&file=$key" );
                                } else {
                                        $checkBox = '';
                                        $pageLink = $wgLang->timeanddate( $ts, true );
                                }
-                               $userLink = $this->getFileUser( $row );
+                               $userLink = $sk->userLink( $row->fa_user, $row->fa_user_text ) . $sk->userToolLinks( $row->fa_user, $row->fa_user_text );
                                $data =
                                        wfMsgHtml( 'widthheight',
                                                $wgLang->formatNum( $row->fa_width ),
@@ -913,25 +813,8 @@ class UndeleteForm {
                                        ' (' .
                                        wfMsgHtml( 'nbytes', $wgLang->formatNum( $row->fa_size ) ) .
                                        ')';
-                               $comment = $this->getFileComment( $row );
-                               $rd='';
-                               if( $wgUser->isAllowed( 'deleterevision' ) ) {
-                                       $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
-                                       if( !$this->userCan( $row, Image::DELETED_RESTRICTED ) ) {
-                                       // If revision was hidden from sysops
-                                               $del = wfMsgHtml( 'rev-delundel' );                     
-                                       } else {
-                                               $del = $this->sk->makeKnownLinkObj( $revdel,
-                                                       wfMsg( 'rev-delundel' ),
-                                                       'target=' . urlencode( $this->mTarget ) .
-                                                       '&fileid=' . urlencode( $row->fa_id ) );
-                                               // Bolden oversighted content
-                                               if( $this->isDeleted( $row, Image::DELETED_RESTRICTED ) )
-                                                       $del = "<strong>$del</strong>";
-                                       }
-                               $rd = "<tt>(<small>$del</small>)</tt>";
-                               }
-                               $wgOut->addHTML( "<li>$checkBox $rd $pageLink . . $userLink $data $comment</li>\n" );
+                               $comment = $sk->commentBlock( $row->fa_description );
+                               $wgOut->addHTML( "<li>$checkBox $pageLink . . $userLink $data $comment</li>\n" );
                        }
                        $files->free();
                        $wgOut->addHTML( "</ul>" );
@@ -947,143 +830,6 @@ class UndeleteForm {
                return true;
        }
 
-       /**
-        * Fetch revision text link if it's available to all users
-        * @return string
-        */
-       function getPageLink( $row, $titleObj, $ts, $target ) {
-               global $wgLang;
-               
-               if ( !$this->userCan($row, Revision::DELETED_TEXT) ) {
-                       return '<span class="history-deleted">' . $wgLang->timeanddate( $ts, true ) . '</span>';
-               } else {
-                       $link = $this->sk->makeKnownLinkObj( $titleObj, $wgLang->timeanddate( $ts, true ), "target=$target&timestamp=$ts" );
-                       if ( $this->isDeleted($row, Revision::DELETED_TEXT) )
-                               $link = '<span class="history-deleted">' . $link . '</span>';
-                       return $link;
-               }
-       }
-       
-       /**
-        * Fetch image view link if it's available to all users
-        * @return string
-        */
-       function getFileLink( $row, $titleObj, $ts, $target, $key ) {
-               global $wgLang;
-
-               if ( !$this->userCan($row, Image::DELETED_FILE) ) {
-                       return '<span class="history-deleted">' . $wgLang->timeanddate( $ts, true ) . '</span>';
-               } else {
-                       $link = $this->sk->makeKnownLinkObj( $titleObj, $wgLang->timeanddate( $ts, true ), "target=$target&file=$key" );
-                       if ( $this->isDeleted($row, Image::DELETED_FILE) )
-                               $link = '<span class="history-deleted">' . $link . '</span>';
-                       return $link;
-               }
-       }
-
-       /**
-        * Fetch revision's user id if it's available to this user
-        * @return string
-        */
-       function getUser( $row ) {      
-               if ( !$this->userCan($row, Revision::DELETED_USER) ) {
-                       return '<span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
-               } else {
-                       $link = $this->sk->userLink( $row->ar_user, $row->ar_user_text ) . $this->sk->userToolLinks( $row->ar_user, $row->ar_user_text );
-                       if ( $this->isDeleted($row, Revision::DELETED_USER) )
-                               $link = '<span class="history-deleted">' . $link . '</span>';
-                       return $link;
-               }
-       }
-
-       /**
-        * Fetch file's user id if it's available to this user
-        * @return string
-        */
-       function getFileUser( $row ) {  
-               if ( !$this->userCan($row, Image::DELETED_USER) ) {
-                       return '<span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
-               } else {
-                       $link = $this->sk->userLink( $row->fa_user, $row->fa_user_text ) . $this->sk->userToolLinks( $row->fa_user, $row->fa_user_text );
-                       if ( $this->isDeleted($row, Image::DELETED_USER) )
-                               $link = '<span class="history-deleted">' . $link . '</span>';
-                       return $link;
-               }
-       }
-
-       /**
-        * Fetch revision comment if it's available to this user
-        * @return string
-        */
-       function getComment( $row ) {
-               if ( !$this->userCan($row, Revision::DELETED_COMMENT) ) {
-                       return '<span class="history-deleted"><span class="comment">' . wfMsgHtml( 'rev-deleted-comment' ) . '</span></span>';
-               } else {
-                       $link = $this->sk->commentBlock( $row->ar_comment );
-                       if ( $this->isDeleted($row, Revision::DELETED_COMMENT) )
-                               $link = '<span class="history-deleted">' . $link . '</span>';
-                       return $link;
-               }
-       }
-
-       /**
-        * Fetch file upload comment if it's available to this user
-        * @return string
-        */
-       function getFileComment( $row ) {
-               if ( !$this->userCan($row, Image::DELETED_COMMENT) ) {
-                       return '<span class="history-deleted"><span class="comment">' . wfMsgHtml( 'rev-deleted-comment' ) . '</span></span>';
-               } else {
-                       $link = $this->sk->commentBlock( $row->fa_description );
-                       if ( $this->isDeleted($row, Image::DELETED_COMMENT) )
-                               $link = '<span class="history-deleted">' . $link . '</span>';
-                       return $link;
-               }
-       }       
-       
-       /**
-        * int $field one of DELETED_* bitfield constants
-        * for file or revision rows
-        * @return bool
-        */
-       function isDeleted( $row, $field ) {
-               if ( isset($row->ar_deleted) )
-               // page revisions
-                       return ($row->ar_deleted & $field) == $field;
-               else if ( isset($row->fa_deleted) )
-               // files
-                       return ($row->fa_deleted & $field) == $field;
-               return false;
-       }
-               
-       /**
-        * Determine if the current user is allowed to view a particular
-        * field of this revision, if it's marked as deleted.
-        * @param int $field                                    
-        * @return bool
-        */
-       function userCan( $row, $field ) {
-               global $wgUser;
-               
-               if( isset($row->ar_deleted) && ($row->ar_deleted & $field) == $field ) {
-               // page revisions
-                       $permission = ( $row->ar_deleted & Revision::DELETED_RESTRICTED ) == Revision::DELETED_RESTRICTED
-                               ? 'hiderevision'
-                               : 'deleterevision';
-                       wfDebug( "Checking for $permission due to $field match on $row->ar_deleted\n" );
-                       return $wgUser->isAllowed( $permission );
-               } else if( isset($row->fa_deleted) && ($row->fa_deleted & $field) == $field ) {
-               // files
-                       $permission = ( $row->fa_deleted & Image::DELETED_RESTRICTED ) == Image::DELETED_RESTRICTED
-                               ? 'hiderevision'
-                               : 'deleterevision';
-                       wfDebug( "Checking for $permission due to $field match on $row->fa_deleted\n" );
-                       return $wgUser->isAllowed( $permission );
-               } else {
-                       return true;
-               }
-       }
-
        function undelete() {
                global $wgOut, $wgUser;
                if( !is_null( $this->mTargetObj ) ) {
@@ -1092,22 +838,16 @@ class UndeleteForm {
                        $ok = $archive->undelete(
                                $this->mTargetTimestamp,
                                $this->mComment,
-                               $this->mFileVersions,
-                               $this->mUnsuppress );
+                               $this->mFileVersions );
+                       
                        if( $ok ) {
                                $skin = $wgUser->getSkin();
                                $link = $skin->makeKnownLinkObj( $this->mTargetObj );
                                $wgOut->addHtml( wfMsgWikiHtml( 'undeletedpage', $link ) );
                                return true;
                        }
-                       // Give user some idea of what is going on ...
-                       // This can happen if the top revision would end up being deleted
-                       $wgOut->addHtml( '<p>' . wfMsgHtml( "cannotundelete" ) . '</p>' );
-                       $wgOut->addHtml( '<p>' . wfMsgHtml( "undeleterevdel" ) . '</p>' );
-                       $wgOut->returnToMain( false, $this->mTargetObj );
-                       return false;
                }
-               $wgOut->showFatalError( wfMsgHtml( "cannotundelete" ) );
+               $wgOut->showFatalError( wfMsg( "cannotundelete" ) );
                return false;
        }
 }