X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FChangesList.php;h=e0183c4c5a90be5074e017d4d69af13697a21496;hb=8263743db1106db6792e0a8f889db1b5f1432e6f;hp=f25678d3e2cf5564337ce6b0eb3c3b871dc9809d;hpb=bdf84cb20e23f4ce6782109b6b158ba71ec039c5;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/ChangesList.php b/includes/ChangesList.php index f25678d3e2..e0183c4c5a 100644 --- a/includes/ChangesList.php +++ b/includes/ChangesList.php @@ -31,7 +31,7 @@ class RCCacheEntry extends RecentChange { /** * Base class for all changes lists */ -class ChangesList { +class ChangesList extends ContextSource { /** * @var Skin @@ -43,29 +43,48 @@ class ChangesList { protected $message; /** - * Changeslist contructor - * @param $skin Skin - */ - public function __construct( $skin ) { - $this->skin = $skin; + * Changeslist contructor + * + * @param $obj Skin or IContextSource + */ + public function __construct( $obj ) { + if ( $obj instanceof IContextSource ) { + $this->setContext( $obj ); + $this->skin = $obj->getSkin(); + } else { + $this->setContext( $obj->getContext() ); + $this->skin = $obj; + } $this->preCacheMessages(); } /** - * Fetch an appropriate changes list class for the specified user - * Some users might want to use an enhanced list format, for instance + * Fetch an appropriate changes list class for the main context + * This first argument used to be an User object. * - * @param $user User to fetch the list class for + * @deprecated in 1.18; use newFromContext() instead + * @param $unused string|User Unused * @return ChangesList|EnhancedChangesList|OldChangesList derivative */ - public static function newFromUser( $user ) { - global $wgRequest; + public static function newFromUser( $unused ) { + wfDeprecated( __METHOD__, '1.18' ); + return self::newFromContext( RequestContext::getMain() ); + } - $sk = $user->getSkin(); + /** + * Fetch an appropriate changes list class for the specified context + * Some users might want to use an enhanced list format, for instance + * + * @param $context IContextSource to use + * @return ChangesList|EnhancedChangesList|OldChangesList derivative + */ + public static function newFromContext( IContextSource $context ) { + $user = $context->getUser(); + $sk = $context->getSkin(); $list = null; if( wfRunHooks( 'FetchChangesList', array( $user, &$sk, &$list ) ) ) { - $new = $wgRequest->getBool( 'enhanced', $user->getOption( 'usenewrc' ) ); - return $new ? new EnhancedChangesList( $sk ) : new OldChangesList( $sk ); + $new = $context->getRequest()->getBool( 'enhanced', $user->getOption( 'usenewrc' ) ); + return $new ? new EnhancedChangesList( $context ) : new OldChangesList( $context ); } else { return $list; } @@ -175,10 +194,10 @@ class ChangesList { $fastCharDiff[$code] = $wgMiserMode || wfMsgNoTrans( 'rc-change-size' ) === '$1'; } - $formatedSize = $wgLang->formatNum($szdiff); + $formattedSize = $wgLang->formatNum($szdiff); if ( !$fastCharDiff[$code] ) { - $formatedSize = wfMsgExt( 'rc-change-size', array( 'parsemag', 'escape' ), $formatedSize ); + $formattedSize = wfMsgExt( 'rc-change-size', array( 'parsemag' ), $formattedSize ); } if( abs( $szdiff ) > abs( $wgRCChangedSizeThreshold ) ) { @@ -186,13 +205,23 @@ class ChangesList { } else { $tag = 'span'; } - if( $szdiff === 0 ) { - return "<$tag class='mw-plusminus-null'>($formatedSize)"; - } elseif( $szdiff > 0 ) { - return "<$tag class='mw-plusminus-pos'>(+$formatedSize)"; - } else { - return "<$tag class='mw-plusminus-neg'>($formatedSize)"; + + if ( $szdiff === 0 ) { + $formattedSizeClass = 'mw-plusminus-null'; + } + if ( $szdiff > 0 ) { + $formattedSize = '+' . $formattedSize; + $formattedSizeClass = 'mw-plusminus-pos'; } + if ( $szdiff < 0 ) { + $formattedSizeClass = 'mw-plusminus-neg'; + } + + $formattedTotalSize = wfMsgExt( 'rc-change-size-new', 'parsemag', $wgLang->formatNum( $new ) ); + + return Html::element( $tag, + array( 'dir' => 'ltr', 'class' => $formattedSizeClass, 'title' => $formattedTotalSize ), + wfMessage( 'parentheses', $formattedSize )->plain() ) . $wgLang->getDirMark(); } /** @@ -207,47 +236,9 @@ class ChangesList { } } - /** - * @param $s - * @param $rc RecentChange - * @return void - */ - public function insertMove( &$s, $rc ) { - # Diff - $s .= '(' . $this->message['diff'] . ') ('; - # Hist - $s .= $this->skin->link( - $rc->getMovedToTitle(), - $this->message['hist'], - array(), - array( 'action' => 'history' ), - array( 'known', 'noclasses' ) - ) . ') . . '; - # "[[x]] moved to [[y]]" - $msg = ( $rc->mAttribs['rc_type'] == RC_MOVE ) ? '1movedto2' : '1movedto2_redir'; - $s .= wfMsg( - $msg, - $this->skin->link( - $rc->getTitle(), - null, - array(), - array( 'redirect' => 'no' ), - array( 'known', 'noclasses' ) - ), - $this->skin->link( - $rc->getMovedToTitle(), - null, - array(), - array(), - array( 'known', 'noclasses' ) - ) - ); - } - public function insertDateHeader( &$s, $rc_timestamp ) { - global $wgLang; # Make date header if necessary - $date = $wgLang->date( $rc_timestamp, true, true ); + $date = $this->getLanguage()->date( $rc_timestamp, true, true ); if( $date != $this->lastdate ) { if( $this->lastdate != '' ) { $s .= "\n"; @@ -259,27 +250,21 @@ class ChangesList { } public function insertLog( &$s, $title, $logtype ) { - $logname = LogPage::logName( $logtype ); - $s .= '(' . $this->skin->link( - $title, - $logname, - array(), - array(), - array( 'known', 'noclasses' ) - ) . ')'; + $page = new LogPage( $logtype ); + $logname = $page->getName()->escaped(); + $s .= $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $title, $logname ) )->escaped(); } /** * @param $s * @param $rc RecentChange * @param $unpatrolled - * @return void */ public function insertDiffHist( &$s, &$rc, $unpatrolled ) { # Diff link if( $rc->mAttribs['rc_type'] == RC_NEW || $rc->mAttribs['rc_type'] == RC_LOG ) { $diffLink = $this->message['diff']; - } elseif( !self::userCan($rc,Revision::DELETED_TEXT) ) { + } elseif ( !self::userCan( $rc, Revision::DELETED_TEXT, $this->getUser() ) ) { $diffLink = $this->message['diff']; } else { $query = array( @@ -292,27 +277,25 @@ class ChangesList { $query['rcid'] = $rc->mAttribs['rc_id']; }; - $diffLink = $this->skin->link( + $diffLink = Linker::linkKnown( $rc->getTitle(), $this->message['diff'], array( 'tabindex' => $rc->counter ), - $query, - array( 'known', 'noclasses' ) + $query ); } - $s .= '(' . $diffLink . $this->message['pipe-separator']; + $diffhist = $diffLink . $this->message['pipe-separator']; # History link - $s .= $this->skin->link( + $diffhist .= Linker::linkKnown( $rc->getTitle(), $this->message['hist'], array(), array( 'curid' => $rc->mAttribs['rc_cur_id'], 'action' => 'history' - ), - array( 'known', 'noclasses' ) + ) ); - $s .= ') . . '; + $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() . ' . . '; } /** @@ -320,10 +303,8 @@ class ChangesList { * @param $rc RecentChange * @param $unpatrolled * @param $watched - * @return void */ public function insertArticleLink( &$s, &$rc, $unpatrolled, $watched ) { - global $wgContLang; # If it's a new article, there is no diff link, but if it hasn't been # patrolled yet, we need to give users a way to do so $params = array(); @@ -332,30 +313,21 @@ class ChangesList { $params['rcid'] = $rc->mAttribs['rc_id']; } + $articlelink = Linker::linkKnown( + $rc->getTitle(), + null, + array(), + $params + ); if( $this->isDeleted($rc,Revision::DELETED_TEXT) ) { - $articlelink = $this->skin->link( - $rc->getTitle(), - null, - array(), - $params, - array( 'known', 'noclasses' ) - ); $articlelink = '' . $articlelink . ''; - } else { - $articlelink = ' '. $this->skin->link( - $rc->getTitle(), - null, - array(), - $params, - array( 'known', 'noclasses' ) - ); } # Bolden pages watched by this user if( $watched ) { $articlelink = "{$articlelink}"; } # RTL/LTR marker - $articlelink .= $wgContLang->getDirMark(); + $articlelink .= $this->getLanguage()->getDirMark(); wfRunHooks( 'ChangesListInsertArticleLink', array(&$this, &$articlelink, &$s, &$rc, $unpatrolled, $watched) ); @@ -366,52 +338,52 @@ class ChangesList { /** * @param $s * @param $rc RecentChange - * @return void */ public function insertTimestamp( &$s, $rc ) { - global $wgLang; $s .= $this->message['semicolon-separator'] . - $wgLang->time( $rc->mAttribs['rc_timestamp'], true, true ) . ' . . '; + $this->getLanguage()->time( $rc->mAttribs['rc_timestamp'], true, true ) . ' . . '; } - /** Insert links to user page, user talk page and eventually a blocking link + /** + * Insert links to user page, user talk page and eventually a blocking link * - * @param $rc RecentChange + * @param &$s String HTML to update + * @param &$rc RecentChange */ public function insertUserRelatedLinks( &$s, &$rc ) { if( $this->isDeleted( $rc, Revision::DELETED_USER ) ) { $s .= ' ' . wfMsgHtml( 'rev-deleted-user' ) . ''; } 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'] ); + $s .= $this->getLanguage()->getDirMark() . Linker::userLink( $rc->mAttribs['rc_user'], + $rc->mAttribs['rc_user_text'] ); + $s .= Linker::userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] ); } } - /** insert a formatted action + /** + * Insert a formatted action * * @param $rc RecentChange + * @return string */ - public function insertAction( &$s, &$rc ) { - if( $rc->mAttribs['rc_type'] == RC_LOG ) { - if( $this->isDeleted( $rc, LogPage::DELETED_ACTION ) ) { - $s .= ' ' . wfMsgHtml( 'rev-deleted-event' ) . ''; - } 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 ); - } - } + public function insertLogEntry( $rc ) { + $formatter = LogFormatter::newFromRow( $rc->mAttribs ); + $formatter->setShowUserToolLinks( true ); + $mark = $this->getLanguage()->getDirMark(); + return $formatter->getActionText() . " $mark" . $formatter->getComment(); } - /** insert a formatted comment - * + /** + * Insert a formatted comment * @param $rc RecentChange + * @return string */ - public function insertComment( &$s, &$rc ) { + public function insertComment( $rc ) { if( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) { if( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) { - $s .= ' ' . wfMsgHtml( 'rev-deleted-comment' ) . ''; + return ' ' . wfMsgHtml( 'rev-deleted-comment' ) . ''; } else { - $s .= $this->skin->commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() ); + return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() ); } } } @@ -427,14 +399,14 @@ class ChangesList { /** * Returns the string which indicates the number of watching users + * @return string */ protected function numberofWatchingusers( $count ) { - global $wgLang; static $cache = array(); if( $count > 0 ) { if( !isset( $cache[$count] ) ) { $cache[$count] = wfMsgExt( 'number_of_watching_users_RCview', - array('parsemag', 'escape' ), $wgLang->formatNum( $count ) ); + array('parsemag', 'escape' ), $this->getLanguage()->formatNum( $count ) ); } return $cache[$count]; } else { @@ -457,16 +429,22 @@ class ChangesList { * field of this revision, if it's marked as deleted. * @param $rc RCCacheEntry * @param $field Integer + * @param $user User object to check, or null to use $wgUser * @return Boolean */ - public static function userCan( $rc, $field ) { + public static function userCan( $rc, $field, User $user = null ) { if( $rc->mAttribs['rc_type'] == RC_LOG ) { - return LogEventsList::userCanBitfield( $rc->mAttribs['rc_deleted'], $field ); + return LogEventsList::userCanBitfield( $rc->mAttribs['rc_deleted'], $field, $user ); } else { - return Revision::userCanBitfield( $rc->mAttribs['rc_deleted'], $field ); + return Revision::userCanBitfield( $rc->mAttribs['rc_deleted'], $field, $user ); } } + /** + * @param $link string + * @param $watched bool + * @return string + */ protected function maybeWatchedLink( $link, $watched = false ) { if( $watched ) { return '' . $link . ''; @@ -477,16 +455,15 @@ class ChangesList { /** Inserts a rollback link * - * @param $s + * @param $s string * @param $rc RecentChange */ public function insertRollback( &$s, &$rc ) { - global $wgUser; if( !$rc->mAttribs['rc_new'] && $rc->mAttribs['rc_this_oldid'] && $rc->mAttribs['rc_cur_id'] ) { $page = $rc->getTitle(); /** Check for rollback and edit permissions, disallow special pages, and only * show a link on the top-most revision */ - if ($wgUser->isAllowed('rollback') && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid'] ) + if ( $this->getUser()->isAllowed('rollback') && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid'] ) { $rev = new Revision( array( 'id' => $rc->mAttribs['rc_this_oldid'], @@ -495,16 +472,15 @@ class ChangesList { 'deleted' => $rc->mAttribs['rc_deleted'] ) ); $rev->setTitle( $page ); - $s .= ' '.$this->skin->generateRollback( $rev ); + $s .= ' '.Linker::generateRollback( $rev, $this->getContext() ); } } } /** - * @param $s + * @param $s string * @param $rc RecentChange * @param $classes - * @return */ public function insertTags( &$s, &$rc, &$classes ) { if ( empty($rc->mAttribs['ts_tags']) ) @@ -518,6 +494,18 @@ class ChangesList { public function insertExtra( &$s, &$rc, &$classes ) { ## Empty, used for subclassers to add anything special. } + + protected function showAsUnpatrolled( RecentChange $rc ) { + $unpatrolled = false; + if ( !$rc->mAttribs['rc_patrolled'] ) { + if ( $this->getUser()->useRCPatrol() ) { + $unpatrolled = true; + } elseif ( $this->getUser()->useNPPatrol() && $rc->mAttribs['rc_new'] ) { + $unpatrolled = true; + } + } + return $unpatrolled; + } } @@ -529,12 +517,14 @@ class OldChangesList extends ChangesList { * Format a line using the old system (aka without any javascript). * * @param $rc RecentChange + * @return string */ public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) { - global $wgLang, $wgRCShowChangedSize, $wgUser; + global $wgRCShowChangedSize; wfProfileIn( __METHOD__ ); + # Should patrol-related stuff be shown? - $unpatrolled = $wgUser->useRCPatrol() && !$rc->mAttribs['rc_patrolled']; + $unpatrolled = $this->showAsUnpatrolled( $rc ); $dateheader = ''; // $s now contains only
  • ...
  • , for hooks' convenience. $this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] ); @@ -551,12 +541,11 @@ class OldChangesList extends ChangesList { } } - // Moved pages + // Moved pages (very very old, not supported anymore) if( $rc->mAttribs['rc_type'] == RC_MOVE || $rc->mAttribs['rc_type'] == RC_MOVE_OVER_REDIRECT ) { - $this->insertMove( $s, $rc ); // Log entries } elseif( $rc->mAttribs['rc_log_type'] ) { - $logtitle = Title::newFromText( 'Log/'.$rc->mAttribs['rc_log_type'], NS_SPECIAL ); + $logtitle = SpecialPage::getTitleFor( 'Log', $rc->mAttribs['rc_log_type'] ); $this->insertLog( $s, $logtitle, $rc->mAttribs['rc_log_type'] ); // Log entries (old format) or log targets, and special pages } elseif( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) { @@ -588,12 +577,17 @@ class OldChangesList extends ChangesList { $s .= "$cd . . "; } } - # User tool links - $this->insertUserRelatedLinks( $s, $rc ); - # Log action text (if any) - $this->insertAction( $s, $rc ); - # Edit or log comment - $this->insertComment( $s, $rc ); + + if ( $rc->mAttribs['rc_type'] == RC_LOG ) { + $s .= $this->insertLogEntry( $rc ); + } else { + # User tool links + $this->insertUserRelatedLinks( $s, $rc ); + # LTR/RTL direction mark + $s .= $this->getLanguage()->getDirMark(); + $s .= $this->insertComment( $rc ); + } + # Tags $this->insertTags( $s, $rc, $classes ); # Rollback @@ -604,7 +598,7 @@ class OldChangesList extends ChangesList { # How many users watch this page if( $rc->numberofWatchingusers > 0 ) { $s .= ' ' . wfMsgExt( 'number_of_watching_users_RCview', - array( 'parsemag', 'escape' ), $wgLang->formatNum( $rc->numberofWatchingusers ) ); + array( 'parsemag', 'escape' ), $this->getLanguage()->formatNum( $rc->numberofWatchingusers ) ); } if( $this->watchlist ) { @@ -623,18 +617,20 @@ class OldChangesList extends ChangesList { * Generate a list of changes using an Enhanced system (uses javascript). */ class EnhancedChangesList extends ChangesList { + + protected $rc_cache; + /** * Add the JavaScript file for enhanced changeslist * @return String */ public function beginRecentChangesList() { - global $wgOut; $this->rc_cache = array(); $this->rcMoveIndex = 0; $this->rcCacheIndex = 0; $this->lastdate = ''; $this->rclistOpen = false; - $wgOut->addModuleStyles( 'mediawiki.special.changeslist' ); + $this->getOutput()->addModuleStyles( 'mediawiki.special.changeslist' ); return ''; } /** @@ -646,8 +642,6 @@ class EnhancedChangesList extends ChangesList { * @return string */ public function recentChangesLine( &$baseRC, $watched = false ) { - global $wgLang, $wgUser; - wfProfileIn( __METHOD__ ); # Create a specialised object @@ -656,7 +650,7 @@ class EnhancedChangesList extends ChangesList { $curIdEq = array( 'curid' => $rc->mAttribs['rc_cur_id'] ); # If it's a new day, add the headline and flush the cache - $date = $wgLang->date( $rc->mAttribs['rc_timestamp'], true ); + $date = $this->getLanguage()->date( $rc->mAttribs['rc_timestamp'], true ); $ret = ''; if( $date != $this->lastdate ) { # Process current cache @@ -667,58 +661,44 @@ class EnhancedChangesList extends ChangesList { } # Should patrol-related stuff be shown? - if( $wgUser->useRCPatrol() ) { - $rc->unpatrolled = !$rc->mAttribs['rc_patrolled']; - } else { - $rc->unpatrolled = false; - } + $rc->unpatrolled = $this->showAsUnpatrolled( $rc ); $showdifflinks = true; # Make article link $type = $rc->mAttribs['rc_type']; $logType = $rc->mAttribs['rc_log_type']; - // Page moves + // Page moves, very old style, not supported anymore if( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) { - $msg = ( $type == RC_MOVE ) ? "1movedto2" : "1movedto2_redir"; - $clink = wfMsg( $msg, $this->skin->linkKnown( $rc->getTitle(), null, - array(), array( 'redirect' => 'no' ) ), - $this->skin->linkKnown( $rc->getMovedToTitle() ) ); // New unpatrolled pages } elseif( $rc->unpatrolled && $type == RC_NEW ) { - $clink = $this->skin->linkKnown( $rc->getTitle(), null, array(), + $clink = Linker::linkKnown( $rc->getTitle(), null, array(), array( 'rcid' => $rc->mAttribs['rc_id'] ) ); // Log entries } elseif( $type == RC_LOG ) { if( $logType ) { $logtitle = SpecialPage::getTitleFor( 'Log', $logType ); - $clink = '(' . $this->skin->linkKnown( $logtitle, - LogPage::logName( $logType ) ) . ')'; + $logpage = new LogPage( $logType ); + $logname = $logpage->getName()->escaped(); + $clink = $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped(); } else { - $clink = $this->skin->link( $rc->getTitle() ); + $clink = Linker::link( $rc->getTitle() ); } $watched = false; // Log entries (old format) and special pages } elseif( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) { - list( $specialName, $logtype ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] ); - if ( $specialName == 'Log' ) { - # Log updates, etc - $logname = LogPage::logName( $logtype ); - $clink = '(' . $this->skin->linkKnown( $rc->getTitle(), $logname ) . ')'; - } else { - wfDebug( "Unexpected special page in recentchanges\n" ); - $clink = ''; - } + wfDebug( "Unexpected special page in recentchanges\n" ); + $clink = ''; // Edits } else { - $clink = $this->skin->linkKnown( $rc->getTitle() ); + $clink = Linker::linkKnown( $rc->getTitle() ); } # Don't show unusable diff links - if ( !ChangesList::userCan($rc,Revision::DELETED_TEXT) ) { + if ( !ChangesList::userCan( $rc, Revision::DELETED_TEXT, $this->getUser() ) ) { $showdifflinks = false; } - $time = $wgLang->time( $rc->mAttribs['rc_timestamp'], true, true ); + $time = $this->getLanguage()->time( $rc->mAttribs['rc_timestamp'], true, true ); $rc->watched = $watched; $rc->link = $clink; $rc->timestamp = $time; @@ -744,13 +724,13 @@ class EnhancedChangesList extends ChangesList { if ( $type != RC_NEW ) { $curLink = $this->message['cur']; } else { - $curUrl = htmlspecialchars( $rc->getTitle()->getLinkUrl( $querycur ) ); + $curUrl = htmlspecialchars( $rc->getTitle()->getLinkURL( $querycur ) ); $curLink = "counter}\">{$this->message['cur']}"; } $diffLink = $this->message['diff']; } else { - $diffUrl = htmlspecialchars( $rc->getTitle()->getLinkUrl( $querydiff ) ); - $curUrl = htmlspecialchars( $rc->getTitle()->getLinkUrl( $querycur ) ); + $diffUrl = htmlspecialchars( $rc->getTitle()->getLinkURL( $querydiff ) ); + $curUrl = htmlspecialchars( $rc->getTitle()->getLinkURL( $querycur ) ); $diffLink = "counter}\">{$this->message['diff']}"; $curLink = "counter}\">{$this->message['cur']}"; } @@ -761,7 +741,7 @@ class EnhancedChangesList extends ChangesList { } elseif( in_array( $type, array( RC_LOG, RC_MOVE, RC_MOVE_OVER_REDIRECT ) ) ) { $lastLink = $this->message['last']; } else { - $lastLink = $this->skin->linkKnown( $rc->getTitle(), $this->message['last'], + $lastLink = Linker::linkKnown( $rc->getTitle(), $this->message['last'], array(), $curIdEq + array('diff' => $thisOldid, 'oldid' => $lastOldid) + $rcIdQuery ); } @@ -769,8 +749,8 @@ class EnhancedChangesList extends ChangesList { if( $this->isDeleted( $rc, Revision::DELETED_USER ) ) { $rc->userlink = ' ' . wfMsgHtml( 'rev-deleted-user' ) . ''; } else { - $rc->userlink = $this->skin->userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] ); - $rc->usertalklink = $this->skin->userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] ); + $rc->userlink = Linker::userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] ); + $rc->usertalklink = Linker::userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] ); } $rc->lastlink = $lastLink; @@ -803,18 +783,21 @@ class EnhancedChangesList extends ChangesList { /** * Enhanced RC group + * @return string */ protected function recentChangesBlockGroup( $block ) { - global $wgLang, $wgContLang, $wgRCShowChangedSize; + global $wgRCShowChangedSize; wfProfileIn( __METHOD__ ); # Add the namespace and title of the block as part of the class if ( $block[0]->mAttribs['rc_log_type'] ) { # Log entry - $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] ); + $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' + . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] ); } else { - $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] ); + $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' + . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] ); } $r = Html::openElement( 'table', array( 'class' => $classes ) ) . Html::openElement( 'tr' ); @@ -867,9 +850,9 @@ class EnhancedChangesList extends ChangesList { $users = array(); foreach( $userlinks as $userlink => $count) { $text = $userlink; - $text .= $wgContLang->getDirMark(); + $text .= $this->getLanguage()->getDirMark(); if( $count > 1 ) { - $text .= ' (' . $wgLang->formatNum( $count ) . '×)'; + $text .= ' ' . $this->msg( 'parentheses' )->rawParams( $this->getLanguage()->formatNum( $count ) . '×' )->escaped(); } array_push( $users, $text ); } @@ -877,16 +860,7 @@ class EnhancedChangesList extends ChangesList { $users = ' [' . implode( $this->message['semicolon-separator'], $users ) . ']'; - # Title for tags - $expandTitle = htmlspecialchars( wfMsg( 'rc-enhanced-expand' ) ); - $closeTitle = htmlspecialchars( wfMsg( 'rc-enhanced-hide' ) ); - - $tl = "" - . "" - . "{$this->sideArrow()}" - . "" - . "{$this->downArrow()}" - . ""; + $tl = ''; $r .= "$tl"; # Main line @@ -909,29 +883,29 @@ class EnhancedChangesList extends ChangesList { $this->insertArticleLink( $r, $block[0], $block[0]->unpatrolled, $block[0]->watched ); } - $r .= $wgContLang->getDirMark(); + $r .= $this->getLanguage()->getDirMark(); $queryParams['curid'] = $curId; # Changes message $n = count($block); static $nchanges = array(); if ( !isset( $nchanges[$n] ) ) { - $nchanges[$n] = wfMsgExt( 'nchanges', array( 'parsemag', 'escape' ), $wgLang->formatNum( $n ) ); + $nchanges[$n] = wfMsgExt( 'nchanges', array( 'parsemag', 'escape' ), $this->getLanguage()->formatNum( $n ) ); } # Total change link $r .= ' '; + $logtext = ''; if( !$allLogs ) { - $r .= '('; - if( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT ) ) { - $r .= $nchanges[$n]; + if( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) { + $logtext .= $nchanges[$n]; } elseif( $isnew ) { - $r .= $nchanges[$n]; + $logtext .= $nchanges[$n]; } else { $params = $queryParams; $params['diff'] = $currentRevision; $params['oldid'] = $oldid; - $r .= $this->skin->link( + $logtext .= Linker::link( $block[0]->getTitle(), $nchanges[$n], array(), @@ -945,20 +919,24 @@ class EnhancedChangesList extends ChangesList { if( $allLogs ) { // don't show history link for logs } elseif( $namehidden || !$block[0]->getTitle()->exists() ) { - $r .= $this->message['pipe-separator'] . $this->message['hist'] . ')'; + $logtext .= $this->message['pipe-separator'] . $this->message['hist']; } else { $params = $queryParams; $params['action'] = 'history'; - $r .= $this->message['pipe-separator'] . - $this->skin->link( + $logtext .= $this->message['pipe-separator'] . + Linker::linkKnown( $block[0]->getTitle(), $this->message['hist'], array(), - $params, - array( 'known', 'noclasses' ) - ) . ')'; + $params + ); } + + if( $logtext !== '' ) { + $r .= $this->msg( 'parentheses' )->rawParams( $logtext )->escaped(); + } + $r .= ' . . '; # Character difference (does not apply if only log items) @@ -992,7 +970,6 @@ class EnhancedChangesList extends ChangesList { $classes = array(); $type = $rcObj->mAttribs['rc_type']; - #$r .= ''.$this->spacerArrow(); $r .= ''; $r .= $this->recentChangesFlags( array( 'newpage' => $rcObj->mAttribs['rc_new'], @@ -1012,19 +989,18 @@ class EnhancedChangesList extends ChangesList { if( $type == RC_LOG ) { $link = $rcObj->timestamp; # Revision link - } elseif( !ChangesList::userCan($rcObj,Revision::DELETED_TEXT) ) { + } elseif( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) { $link = ''.$rcObj->timestamp.' '; } else { if ( $rcObj->unpatrolled && $type == RC_NEW) { $params['rcid'] = $rcObj->mAttribs['rc_id']; } - $link = $this->skin->link( + $link = Linker::linkKnown( $rcObj->getTitle(), $rcObj->timestamp, array(), - $params, - array( 'known', 'noclasses' ) + $params ); if( $this->isDeleted($rcObj,Revision::DELETED_TEXT) ) $link = ''.$link.' '; @@ -1032,11 +1008,7 @@ class EnhancedChangesList extends ChangesList { $r .= $link . ''; if ( !$type == RC_LOG || $type == RC_NEW ) { - $r .= ' ('; - $r .= $rcObj->curlink; - $r .= $this->message['pipe-separator']; - $r .= $rcObj->lastlink; - $r .= ')'; + $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->curlink . $this->message['pipe-separator'] . $rcObj->lastlink )->escaped(); } $r .= ' . . '; @@ -1045,13 +1017,15 @@ class EnhancedChangesList extends ChangesList { $r .= $rcObj->getCharacterDifference() . ' . . ' ; } - # User links - $r .= $rcObj->userlink; - $r .= $rcObj->usertalklink; - // log action - $this->insertAction( $r, $rcObj ); - // log comment - $this->insertComment( $r, $rcObj ); + if ( $rcObj->mAttribs['rc_type'] == RC_LOG ) { + $r .= $this->insertLogEntry( $rcObj ); + } else { + # User links + $r .= $rcObj->userlink; + $r .= $rcObj->usertalklink; + $r .= $this->insertComment( $rcObj ); + } + # Rollback $this->insertRollback( $r, $rcObj ); # Tags @@ -1089,8 +1063,8 @@ class EnhancedChangesList extends ChangesList { * @return String: HTML tag */ protected function sideArrow() { - global $wgContLang; - $dir = $wgContLang->isRTL() ? 'l' : 'r'; + global $wgLang; + $dir = $wgLang->isRTL() ? 'l' : 'r'; return $this->arrow( $dir, '+', wfMsg( 'rc-enhanced-expand' ) ); } @@ -1115,7 +1089,7 @@ class EnhancedChangesList extends ChangesList { * Enhanced RC ungrouped line. * * @param $rcObj RecentChange - * @return String: a HTML formated line (generated using $r) + * @return String: a HTML formatted line (generated using $r) */ protected function recentChangesBlockLine( $rcObj ) { global $wgRCShowChangedSize; @@ -1127,21 +1101,23 @@ class EnhancedChangesList extends ChangesList { $logType = $rcObj->mAttribs['rc_log_type']; if( $logType ) { # Log entry - $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType . '-' . $rcObj->mAttribs['rc_title'] ); + $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-' + . $logType . '-' . $rcObj->mAttribs['rc_title'] ); } else { - $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] ); + $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' . + $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] ); } $r = Html::openElement( 'table', array( 'class' => $classes ) ) . Html::openElement( 'tr' ); - $r .= '' . $this->spacerArrow(); + $r .= ''; # Flag and Timestamp if( $type == RC_MOVE || $type == RC_MOVE_OVER_REDIRECT ) { $r .= '    '; // 4 flags -> 4 spaces } else { $r .= $this->recentChangesFlags( array( 'newpage' => $type == RC_NEW, - 'mino' => $rcObj->mAttribs['rc_minor'], + 'minor' => $rcObj->mAttribs['rc_minor'], 'unpatrolled' => $rcObj->unpatrolled, 'bot' => $rcObj->mAttribs['rc_bot'], ) ); @@ -1149,48 +1125,36 @@ class EnhancedChangesList extends ChangesList { $r .= ' '.$rcObj->timestamp.' '; # Article or log link if( $logType ) { - $logtitle = Title::newFromText( "Log/$logType", NS_SPECIAL ); + $logtitle = SpecialPage::getTitleFor( 'Log', $logType ); $logname = LogPage::logName( $logType ); - $r .= '(' . $this->skin->link( - $logtitle, - $logname, - array(), - array(), - array( 'known', 'noclasses' ) - ) . ')'; + $r .= $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $logtitle, htmlspecialchars( $logname ) ) )->escaped(); } else { $this->insertArticleLink( $r, $rcObj, $rcObj->unpatrolled, $rcObj->watched ); } # Diff and hist links if ( $type != RC_LOG ) { - $r .= ' ('. $rcObj->difflink . $this->message['pipe-separator']; $query['action'] = 'history'; - $r .= $this->skin->link( + $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->difflink . $this->message['pipe-separator'] . Linker::linkKnown( $rcObj->getTitle(), $this->message['hist'], array(), - $query, - array( 'known', 'noclasses' ) - ) . ')'; + $query + ) )->escaped(); } $r .= ' . . '; # Character diff if( $wgRCShowChangedSize && ($cd = $rcObj->getCharacterDifference()) ) { $r .= "$cd . . "; } - # User/talk - $r .= ' '.$rcObj->userlink . $rcObj->usertalklink; - # Log action (if any) - if( $logType ) { - if( $this->isDeleted($rcObj,LogPage::DELETED_ACTION) ) { - $r .= ' ' . wfMsgHtml('rev-deleted-event') . ''; - } else { - $r .= ' ' . LogPage::actionText( $logType, $rcObj->mAttribs['rc_log_action'], $rcObj->getTitle(), - $this->skin, LogPage::extractParams( $rcObj->mAttribs['rc_params'] ), true, true ); - } + + if ( $type == RC_LOG ) { + $r .= $this->insertLogEntry( $rcObj ); + } else { + $r .= ' '.$rcObj->userlink . $rcObj->usertalklink; + $r .= $this->insertComment( $rcObj ); + $r .= $this->insertRollback( $r, $rcObj ); } - $this->insertComment( $r, $rcObj ); - $this->insertRollback( $r, $rcObj ); + # Tags $classes = explode( ' ', $classes ); $this->insertTags( $r, $rcObj, $classes ); @@ -1234,6 +1198,7 @@ class EnhancedChangesList extends ChangesList { /** * Returns text for the end of RC * If enhanced RC is in use, returns pretty much all the text + * @return string */ public function endRecentChangesList() { return $this->recentChangesBlock() . parent::endRecentChangesList();