diff options
Diffstat (limited to 'includes/PageHistory.php')
-rw-r--r-- | includes/PageHistory.php | 59 |
1 files changed, 43 insertions, 16 deletions
diff --git a/includes/PageHistory.php b/includes/PageHistory.php index aea0f0ed..b1cf41f0 100644 --- a/includes/PageHistory.php +++ b/includes/PageHistory.php @@ -3,7 +3,6 @@ * Page history * * Split off from Article.php and Skin.php, 2003-12-22 - * @package MediaWiki */ /** @@ -14,9 +13,7 @@ * Construct it by passing in an Article, and call $h->history() to print the * history. * - * @package MediaWiki */ - class PageHistory { const DIR_PREV = 0; const DIR_NEXT = 1; @@ -33,7 +30,7 @@ class PageHistory { * @param Article $article * @returns nothing */ - function PageHistory($article) { + function __construct($article) { global $wgUser; $this->mArticle =& $article; @@ -101,6 +98,8 @@ class PageHistory { $wgOut->redirect( $wgTitle->getLocalURL( "action=history&limit={$limit}&dir=prev" ) ); return; } + + wfRunHooks( 'PageHistoryBeforeList', array( &$this->mArticle ) ); /** * Do the list @@ -159,7 +158,7 @@ class PageHistory { 'class' => 'historysubmit', 'type' => 'submit', 'accesskey' => wfMsg( 'accesskey-compareselectedversions' ), - 'title' => wfMsg( 'tooltip-compareselectedversions' ), + 'title' => wfMsg( 'tooltip-compareselectedversions' ).' ['.wfMsg( 'accesskey-compareselectedversions' ).']', 'value' => wfMsg( 'compareselectedversions' ), ) ) ) : ''; @@ -179,7 +178,7 @@ class PageHistory { * @return string HTML output for the row */ function historyLine( $row, $next, $counter = '', $notificationtimestamp = false, $latest = false, $firstInList = false ) { - global $wgUser; + global $wgUser, $wgLang; $rev = new Revision( $row ); $rev->setTitle( $this->mTitle ); @@ -199,31 +198,58 @@ class PageHistory { if( $firstInList ) { // 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 = wfMsgHtml( 'rev-delundel' ); } else { $del = $this->mSkin->makeKnownLinkObj( $revdel, wfMsg( 'rev-delundel' ), 'target=' . urlencode( $this->mTitle->getPrefixedDbkey() ) . '&oldid=' . urlencode( $rev->getId() ) ); } - $s .= "(<small>$del</small>) "; + $s .= " (<small>$del</small>) "; } - $s .= " $link <span class='history-user'>$user</span>"; + $s .= " $link"; + #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') ); } - $s .= $this->mSkin->revComment( $rev ); + if (!is_null($size = $rev->getSize())) { + if ($size == 0) + $stxt = wfMsgHtml('historyempty'); + else + $stxt = wfMsgHtml('historysize', $wgLang->formatNum( $size ) ); + $s .= " <span class=\"history-size\">$stxt</span>"; + } + + #getComment is safe, but this is better formatted + if( $rev->isDeleted( Revision::DELETED_COMMENT ) ) { + $s .= " <span class=\"history-deleted\"><span class=\"comment\">" . + wfMsgHtml( 'rev-deleted-comment' ) . "</span></span>"; + } else { + $s .= $this->mSkin->revComment( $rev ); + } + if ($notificationtimestamp && ($row->rev_timestamp >= $notificationtimestamp)) { $s .= ' <span class="updatedmarker">' . wfMsgHtml( 'updatedmarker' ) . '</span>'; } + #add blurb about text having been deleted if( $row->rev_deleted & Revision::DELETED_TEXT ) { $s .= ' ' . wfMsgHtml( 'deletedrev' ); } if( $wgUser->isAllowed( 'rollback' ) && $latest ) { $s .= ' '.$this->mSkin->generateRollback( $rev ); } + + wfRunHooks( 'PageHistoryLineEnding', array( &$row , &$s ) ); + $s .= "</li>\n"; return $s; @@ -332,7 +358,7 @@ class PageHistory { function getLatestId() { if( is_null( $this->mLatestId ) ) { $id = $this->mTitle->getArticleID(); - $db =& wfGetDB(DB_SLAVE); + $db = wfGetDB(DB_SLAVE); $this->mLatestId = $db->selectField( 'page', "page_latest", array( 'page_id' => $id ), @@ -349,7 +375,7 @@ class PageHistory { function fetchRevisions($limit, $offset, $direction) { $fname = 'PageHistory::fetchRevisions'; - $dbr =& wfGetDB( DB_SLAVE ); + $dbr = wfGetDB( DB_SLAVE ); if ($direction == PageHistory::DIR_PREV) list($dirs, $oper) = array("ASC", ">="); @@ -365,8 +391,7 @@ class PageHistory { $res = $dbr->select( 'revision', - array('rev_id', 'rev_page', 'rev_text_id', 'rev_user', 'rev_comment', 'rev_user_text', - 'rev_timestamp', 'rev_minor_edit', 'rev_deleted'), + Revision::selectFields(), array_merge(array("rev_page=$page_id"), $offsets), $fname, array('ORDER BY' => "rev_timestamp $dirs", @@ -391,7 +416,7 @@ class PageHistory { if ($wgUser->isAnon() || !$wgShowUpdatedMarker) return $this->mNotificationTimestamp = false; - $dbr =& wfGetDB(DB_SLAVE); + $dbr = wfGetDB(DB_SLAVE); $this->mNotificationTimestamp = $dbr->selectField( 'watchlist', @@ -497,6 +522,9 @@ class PageHistory { } +/** + * @addtogroup Pager + */ class PageHistoryPager extends ReverseChronologicalPager { public $mLastRow = false, $mPageHistory; @@ -508,8 +536,7 @@ class PageHistoryPager extends ReverseChronologicalPager { function getQueryInfo() { return array( 'tables' => 'revision', - 'fields' => array('rev_id', 'rev_page', 'rev_text_id', 'rev_user', 'rev_comment', 'rev_user_text', - 'rev_timestamp', 'rev_minor_edit', 'rev_deleted'), + 'fields' => Revision::selectFields(), 'conds' => array('rev_page' => $this->mPageHistory->mTitle->getArticleID() ), 'options' => array( 'USE INDEX' => 'page_timestamp' ) ); |