diff options
Diffstat (limited to 'includes/changes/RecentChange.php')
-rw-r--r-- | includes/changes/RecentChange.php | 523 |
1 files changed, 265 insertions, 258 deletions
diff --git a/includes/changes/RecentChange.php b/includes/changes/RecentChange.php index 980bd0a0..e33274e8 100644 --- a/includes/changes/RecentChange.php +++ b/includes/changes/RecentChange.php @@ -26,10 +26,10 @@ * mAttribs: * rc_id id of the row in the recentchanges table * rc_timestamp time the entry was made - * rc_cur_time timestamp on the cur row * rc_namespace namespace # * rc_title non-prefixed db key * rc_type is new entry, used to determine whether updating is necessary + * rc_source string representation of change source * rc_minor is minor * rc_cur_id page_id of associated page entry * rc_user user id who made the entry @@ -52,7 +52,6 @@ * mExtra: * prefixedDBkey prefixed db key, used by external app via msg queue * lastTimestamp timestamp of previous entry, used in WHERE clause during update - * lang the interwiki prefix, automatically set in save() * oldSize text size before the change * newSize text size after the change * pageStatus status of the page: created, deleted, moved, restored, changed @@ -60,59 +59,111 @@ * temporary: not stored in the database * notificationtimestamp * numberofWatchingusers - * - * @todo document functions and variables */ class RecentChange { - var $mAttribs = array(), $mExtra = array(); + // Constants for the rc_source field. Extensions may also have + // their own source constants. + const SRC_EDIT = 'mw.edit'; + const SRC_NEW = 'mw.new'; + const SRC_LOG = 'mw.log'; + const SRC_EXTERNAL = 'mw.external'; // obsolete + + public $mAttribs = array(); + public $mExtra = array(); /** * @var Title */ - var $mTitle = false; + public $mTitle = false; /** * @var User */ private $mPerformer = false; + public $numberofWatchingusers = 0; # Dummy to prevent error message in SpecialRecentChangesLinked + public $notificationtimestamp; + /** - * @var Title + * @var int Line number of recent change. Default -1. */ - var $mMovedToTitle = false; - var $numberofWatchingusers = 0; # Dummy to prevent error message in SpecialRecentchangeslinked - var $notificationtimestamp; + public $counter = -1; # Factory methods /** - * @param $row + * @param mixed $row * @return RecentChange */ public static function newFromRow( $row ) { $rc = new RecentChange; $rc->loadFromRow( $row ); + return $rc; } /** - * @deprecated in 1.22 - * @param $row - * @return RecentChange + * Parsing text to RC_* constants + * @since 1.24 + * @param string|array $type + * @throws MWException + * @return int|array RC_TYPE */ - public static function newFromCurRow( $row ) { - wfDeprecated( __METHOD__, '1.22' ); - $rc = new RecentChange; - $rc->loadFromCurRow( $row ); - $rc->notificationtimestamp = false; - $rc->numberofWatchingusers = false; - return $rc; + public static function parseToRCType( $type ) { + if ( is_array( $type ) ) { + $retval = array(); + foreach ( $type as $t ) { + $retval[] = RecentChange::parseToRCType( $t ); + } + + return $retval; + } + + switch ( $type ) { + case 'edit': + return RC_EDIT; + case 'new': + return RC_NEW; + case 'log': + return RC_LOG; + case 'external': + return RC_EXTERNAL; + default: + throw new MWException( "Unknown type '$type'" ); + } + } + + /** + * Parsing RC_* constants to human-readable test + * @since 1.24 + * @param int $rcType + * @return string $type + */ + public static function parseFromRCType( $rcType ) { + switch ( $rcType ) { + case RC_EDIT: + $type = 'edit'; + break; + case RC_NEW: + $type = 'new'; + break; + case RC_LOG: + $type = 'log'; + break; + case RC_EXTERNAL: + $type = 'external'; + break; + default: + $type = "$rcType"; + } + + return $type; } /** * Obtain the recent change with a given rc_id value * - * @param int $rcid rc_id value to retrieve + * @param int $rcid The rc_id value to retrieve * @return RecentChange */ public static function newFromId( $rcid ) { @@ -122,9 +173,9 @@ class RecentChange { /** * Find the first recent change matching some specific conditions * - * @param array $conds of conditions - * @param $fname Mixed: override the method name in profiling/logs - * @param $options Array Query options + * @param array $conds Array of conditions + * @param mixed $fname Override the method name in profiling/logs + * @param array $options Query options * @return RecentChange */ public static function newFromConds( $conds, $fname = __METHOD__, $options = array() ) { @@ -146,7 +197,6 @@ class RecentChange { return array( 'rc_id', 'rc_timestamp', - 'rc_cur_time', 'rc_user', 'rc_user_text', 'rc_namespace', @@ -159,6 +209,7 @@ class RecentChange { 'rc_this_oldid', 'rc_last_oldid', 'rc_type', + 'rc_source', 'rc_patrolled', 'rc_ip', 'rc_old_len', @@ -174,27 +225,27 @@ class RecentChange { # Accessors /** - * @param $attribs array + * @param array $attribs */ public function setAttribs( $attribs ) { $this->mAttribs = $attribs; } /** - * @param $extra array + * @param array $extra */ public function setExtra( $extra ) { $this->mExtra = $extra; } /** - * * @return Title */ public function &getTitle() { if ( $this->mTitle === false ) { $this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] ); } + return $this->mTitle; } @@ -211,21 +262,21 @@ class RecentChange { $this->mPerformer = User::newFromName( $this->mAttribs['rc_user_text'], false ); } } + return $this->mPerformer; } /** * Writes the data in this object to the database - * @param $noudp bool + * @param bool $noudp */ public function save( $noudp = false ) { - global $wgLocalInterwiki, $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker, $wgContLang; + global $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker, $wgContLang; $dbw = wfGetDB( DB_MASTER ); if ( !is_array( $this->mExtra ) ) { $this->mExtra = array(); } - $this->mExtra['lang'] = $wgLocalInterwiki; if ( !$wgPutIPinRC ) { $this->mAttribs['rc_ip'] = ''; @@ -244,7 +295,6 @@ class RecentChange { # Fixup database timestamps $this->mAttribs['rc_timestamp'] = $dbw->timestamp( $this->mAttribs['rc_timestamp'] ); - $this->mAttribs['rc_cur_time'] = $dbw->timestamp( $this->mAttribs['rc_cur_time'] ); $this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'recentchanges_rc_id_seq' ); ## If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL @@ -271,7 +321,7 @@ class RecentChange { $editor = $this->getPerformer(); $title = $this->getTitle(); - if ( wfRunHooks( 'AbortEmailNotification', array( $editor, $title ) ) ) { + if ( wfRunHooks( 'AbortEmailNotification', array( $editor, $title, $this ) ) ) { # @todo FIXME: This would be better as an extension hook $enotif = new EmailNotification(); $enotif->notifyOnPageChange( $editor, $title, @@ -285,44 +335,37 @@ class RecentChange { } /** - * @deprecated since 1.22, use notifyRCFeeds instead. - */ - public function notifyRC2UDP() { - wfDeprecated( __METHOD__, '1.22' ); - $this->notifyRCFeeds(); - } - - /** - * Send some text to UDP. - * @deprecated since 1.22 + * Notify all the feeds about the change. + * @param array $feeds Optional feeds to send to, defaults to $wgRCFeeds */ - public static function sendToUDP( $line, $address = '', $prefix = '', $port = '' ) { - global $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPPort, $wgRC2UDPPrefix; - - wfDeprecated( __METHOD__, '1.22' ); - - # Assume default for standard RC case - $address = $address ? $address : $wgRC2UDPAddress; - $prefix = $prefix ? $prefix : $wgRC2UDPPrefix; - $port = $port ? $port : $wgRC2UDPPort; + public function notifyRCFeeds( array $feeds = null ) { + global $wgRCFeeds; + if ( $feeds === null ) { + $feeds = $wgRCFeeds; + } - $engine = new UDPRCFeedEngine(); - $feed = array( - 'uri' => "udp://$address:$port/$prefix", - 'formatter' => 'IRCColourfulRCFeedFormatter', - 'add_interwiki_prefix' => $wgRC2UDPInterwikiPrefix, - ); + $performer = $this->getPerformer(); - return $engine->send( $feed, $line ); - } + foreach ( $feeds as $feed ) { + $feed += array( + 'omit_bots' => false, + 'omit_anon' => false, + 'omit_user' => false, + 'omit_minor' => false, + 'omit_patrolled' => false, + ); - /** - * Notify all the feeds about the change. - */ - public function notifyRCFeeds() { - global $wgRCFeeds; + if ( + ( $feed['omit_bots'] && $this->mAttribs['rc_bot'] ) || + ( $feed['omit_anon'] && $performer->isAnon() ) || + ( $feed['omit_user'] && !$performer->isAnon() ) || + ( $feed['omit_minor'] && $this->mAttribs['rc_minor'] ) || + ( $feed['omit_patrolled'] && $this->mAttribs['rc_patrolled'] ) || + $this->mAttribs['rc_type'] == RC_EXTERNAL + ) { + continue; + } - foreach ( $wgRCFeeds as $feed ) { $engine = self::getEngine( $feed['uri'] ); if ( isset( $this->mExtra['actionCommentIRC'] ) ) { @@ -331,16 +374,8 @@ class RecentChange { $actionComment = null; } - $omitBots = isset( $feed['omit_bots'] ) ? $feed['omit_bots'] : false; - - if ( - ( $omitBots && $this->mAttribs['rc_bot'] ) || - $this->mAttribs['rc_type'] == RC_EXTERNAL - ) { - continue; - } - - $formatter = new $feed['formatter'](); + /** @var $formatter RCFeedFormatter */ + $formatter = is_object( $feed['formatter'] ) ? $feed['formatter'] : new $feed['formatter'](); $line = $formatter->getLine( $feed, $this, $actionComment ); $engine->send( $feed, $line ); @@ -350,10 +385,11 @@ class RecentChange { /** * Gets the stream engine object for a given URI from $wgRCEngines * - * @param $uri string URI to get the engine object for - * @return object The engine object + * @param string $uri URI to get the engine object for + * @throws MWException + * @return RCFeedEngine The engine object */ - private static function getEngine( $uri ) { + public static function getEngine( $uri ) { global $wgRCEngines; $scheme = parse_url( $uri, PHP_URL_SCHEME ); @@ -369,19 +405,11 @@ class RecentChange { } /** - * @deprecated since 1.22, moved to IRCColourfulRCFeedFormatter - */ - public static function cleanupForIRC( $text ) { - wfDeprecated( __METHOD__, '1.22' ); - return IRCColourfulRCFeedFormatter::cleanupForIRC( $text ); - } - - /** * Mark a given change as patrolled * - * @param $change Mixed: RecentChange or corresponding rc_id - * @param $auto Boolean: for automatic patrol - * @return Array See doMarkPatrolled(), or null if $change is not an existing rc_id + * @param RecentChange|int $change RecentChange or corresponding rc_id + * @param bool $auto For automatic patrol + * @return array See doMarkPatrolled(), or null if $change is not an existing rc_id */ public static function markPatrolled( $change, $auto = false ) { global $wgUser; @@ -393,16 +421,18 @@ class RecentChange { if ( !$change instanceof RecentChange ) { return null; } + return $change->doMarkPatrolled( $wgUser, $auto ); } /** * Mark this RecentChange as patrolled * - * NOTE: Can also return 'rcpatroldisabled', 'hookaborted' and 'markedaspatrollederror-noautopatrol' as errors - * @param $user User object doing the action - * @param $auto Boolean: for automatic patrol - * @return array of permissions errors, see Title::getUserPermissionsErrors() + * NOTE: Can also return 'rcpatroldisabled', 'hookaborted' and + * 'markedaspatrollederror-noautopatrol' as errors + * @param User $user User object doing the action + * @param bool $auto For automatic patrol + * @return array Array of permissions errors, see Title::getUserPermissionsErrors() */ public function doMarkPatrolled( User $user, $auto = false ) { global $wgUseRCPatrol, $wgUseNPPatrol; @@ -420,7 +450,9 @@ class RecentChange { } // Users without the 'autopatrol' right can't patrol their // own revisions - if ( $user->getName() == $this->getAttribute( 'rc_user_text' ) && !$user->isAllowed( 'autopatrol' ) ) { + if ( $user->getName() == $this->getAttribute( 'rc_user_text' ) + && !$user->isAllowed( 'autopatrol' ) + ) { $errors[] = array( 'markedaspatrollederror-noautopatrol' ); } if ( $errors ) { @@ -435,12 +467,13 @@ class RecentChange { // Log this patrol event PatrolLog::record( $this, $auto, $user ); wfRunHooks( 'MarkPatrolledComplete', array( $this->getAttribute( 'rc_id' ), &$user, false ) ); + return array(); } /** * Mark this RecentChange patrolled, without error checking - * @return Integer: number of affected rows + * @return int Number of affected rows */ public function reallyMarkPatrolled() { $dbw = wfGetDB( DB_MASTER ); @@ -457,25 +490,26 @@ class RecentChange { // Invalidate the page cache after the page has been patrolled // to make sure that the Patrol link isn't visible any longer! $this->getTitle()->invalidateCache(); + return $dbw->affectedRows(); } /** * Makes an entry in the database corresponding to an edit * - * @param $timestamp - * @param $title Title - * @param $minor - * @param $user User - * @param $comment - * @param $oldId - * @param $lastTimestamp - * @param $bot - * @param $ip string - * @param $oldSize int - * @param $newSize int - * @param $newId int - * @param $patrol int + * @param string $timestamp + * @param Title $title + * @param bool $minor + * @param User $user + * @param string $comment + * @param int $oldId + * @param string $lastTimestamp + * @param bool $bot + * @param string $ip + * @param int $oldSize + * @param int $newSize + * @param int $newId + * @param int $patrol * @return RecentChange */ public static function notifyEdit( $timestamp, &$title, $minor, &$user, $comment, $oldId, @@ -484,57 +518,57 @@ class RecentChange { $rc->mTitle = $title; $rc->mPerformer = $user; $rc->mAttribs = array( - 'rc_timestamp' => $timestamp, - 'rc_cur_time' => $timestamp, - 'rc_namespace' => $title->getNamespace(), - 'rc_title' => $title->getDBkey(), - 'rc_type' => RC_EDIT, - 'rc_minor' => $minor ? 1 : 0, - 'rc_cur_id' => $title->getArticleID(), - 'rc_user' => $user->getId(), - 'rc_user_text' => $user->getName(), - 'rc_comment' => $comment, + 'rc_timestamp' => $timestamp, + 'rc_namespace' => $title->getNamespace(), + 'rc_title' => $title->getDBkey(), + 'rc_type' => RC_EDIT, + 'rc_source' => self::SRC_EDIT, + 'rc_minor' => $minor ? 1 : 0, + 'rc_cur_id' => $title->getArticleID(), + 'rc_user' => $user->getId(), + 'rc_user_text' => $user->getName(), + 'rc_comment' => $comment, 'rc_this_oldid' => $newId, 'rc_last_oldid' => $oldId, - 'rc_bot' => $bot ? 1 : 0, - 'rc_ip' => self::checkIPAddress( $ip ), - 'rc_patrolled' => intval( $patrol ), - 'rc_new' => 0, # obsolete - 'rc_old_len' => $oldSize, - 'rc_new_len' => $newSize, - 'rc_deleted' => 0, - 'rc_logid' => 0, - 'rc_log_type' => null, + 'rc_bot' => $bot ? 1 : 0, + 'rc_ip' => self::checkIPAddress( $ip ), + 'rc_patrolled' => intval( $patrol ), + '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_params' => '' ); $rc->mExtra = array( 'prefixedDBkey' => $title->getPrefixedDBkey(), 'lastTimestamp' => $lastTimestamp, - 'oldSize' => $oldSize, - 'newSize' => $newSize, - 'pageStatus' => 'changed' + 'oldSize' => $oldSize, + 'newSize' => $newSize, + 'pageStatus' => 'changed' ); $rc->save(); + return $rc; } /** * Makes an entry in the database corresponding to page creation * Note: the title object must be loaded with the new id using resetArticleID() - * @todo Document parameters and return * - * @param $timestamp - * @param $title Title - * @param $minor - * @param $user User - * @param $comment - * @param $bot - * @param $ip string - * @param $size int - * @param $newId int - * @param $patrol int + * @param string $timestamp + * @param Title $title + * @param bool $minor + * @param User $user + * @param string $comment + * @param bool $bot + * @param string $ip + * @param int $size + * @param int $newId + * @param int $patrol * @return RecentChange */ public static function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot, @@ -543,29 +577,29 @@ class RecentChange { $rc->mTitle = $title; $rc->mPerformer = $user; $rc->mAttribs = array( - 'rc_timestamp' => $timestamp, - 'rc_cur_time' => $timestamp, - 'rc_namespace' => $title->getNamespace(), - 'rc_title' => $title->getDBkey(), - 'rc_type' => RC_NEW, - 'rc_minor' => $minor ? 1 : 0, - 'rc_cur_id' => $title->getArticleID(), - 'rc_user' => $user->getId(), - 'rc_user_text' => $user->getName(), - 'rc_comment' => $comment, - 'rc_this_oldid' => $newId, - 'rc_last_oldid' => 0, - 'rc_bot' => $bot ? 1 : 0, - 'rc_ip' => self::checkIPAddress( $ip ), - 'rc_patrolled' => intval( $patrol ), - '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_timestamp' => $timestamp, + 'rc_namespace' => $title->getNamespace(), + 'rc_title' => $title->getDBkey(), + 'rc_type' => RC_NEW, + 'rc_source' => self::SRC_NEW, + 'rc_minor' => $minor ? 1 : 0, + 'rc_cur_id' => $title->getArticleID(), + 'rc_user' => $user->getId(), + 'rc_user_text' => $user->getName(), + 'rc_comment' => $comment, + 'rc_this_oldid' => $newId, + 'rc_last_oldid' => 0, + 'rc_bot' => $bot ? 1 : 0, + 'rc_ip' => self::checkIPAddress( $ip ), + 'rc_patrolled' => intval( $patrol ), + '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->mExtra = array( @@ -576,28 +610,30 @@ class RecentChange { 'pageStatus' => 'created' ); $rc->save(); + return $rc; } /** - * @param $timestamp - * @param $title - * @param $user - * @param $actionComment - * @param $ip string - * @param $type - * @param $action - * @param $target - * @param $logComment - * @param $params - * @param $newId int - * @param $actionCommentIRC string + * @param string $timestamp + * @param Title $title + * @param User $user + * @param string $actionComment + * @param string $ip + * @param string $type + * @param string $action + * @param Title $target + * @param string $logComment + * @param string $params + * @param int $newId + * @param string $actionCommentIRC * @return bool */ public static function notifyLog( $timestamp, &$title, &$user, $actionComment, $ip, $type, - $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' ) - { + $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' + ) { global $wgLogRestrictions; + # Don't add private logs to RC! if ( isset( $wgLogRestrictions[$type] ) && $wgLogRestrictions[$type] != '*' ) { return false; @@ -605,22 +641,23 @@ class RecentChange { $rc = self::newLogEntry( $timestamp, $title, $user, $actionComment, $ip, $type, $action, $target, $logComment, $params, $newId, $actionCommentIRC ); $rc->save(); + return true; } /** - * @param $timestamp - * @param $title Title - * @param $user User - * @param $actionComment - * @param $ip string - * @param $type - * @param $action - * @param $target Title - * @param $logComment - * @param $params - * @param $newId int - * @param $actionCommentIRC string + * @param string $timestamp + * @param Title $title + * @param User $user + * @param string $actionComment + * @param string $ip + * @param string $type + * @param string $action + * @param Title $target + * @param string $logComment + * @param string $params + * @param int $newId + * @param string $actionCommentIRC * @return RecentChange */ public static function newLogEntry( $timestamp, &$title, &$user, $actionComment, $ip, @@ -652,45 +689,46 @@ class RecentChange { $rc->mTitle = $target; $rc->mPerformer = $user; $rc->mAttribs = array( - 'rc_timestamp' => $timestamp, - 'rc_cur_time' => $timestamp, - 'rc_namespace' => $target->getNamespace(), - 'rc_title' => $target->getDBkey(), - 'rc_type' => RC_LOG, - 'rc_minor' => 0, - 'rc_cur_id' => $target->getArticleID(), - 'rc_user' => $user->getId(), - 'rc_user_text' => $user->getName(), - 'rc_comment' => $logComment, + 'rc_timestamp' => $timestamp, + 'rc_namespace' => $target->getNamespace(), + 'rc_title' => $target->getDBkey(), + 'rc_type' => RC_LOG, + 'rc_source' => self::SRC_LOG, + 'rc_minor' => 0, + 'rc_cur_id' => $target->getArticleID(), + 'rc_user' => $user->getId(), + 'rc_user_text' => $user->getName(), + 'rc_comment' => $logComment, 'rc_this_oldid' => 0, 'rc_last_oldid' => 0, - 'rc_bot' => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0, - 'rc_ip' => self::checkIPAddress( $ip ), - 'rc_patrolled' => 1, - 'rc_new' => 0, # obsolete - 'rc_old_len' => null, - 'rc_new_len' => null, - 'rc_deleted' => 0, - 'rc_logid' => $newId, - 'rc_log_type' => $type, + 'rc_bot' => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0, + 'rc_ip' => self::checkIPAddress( $ip ), + 'rc_patrolled' => 1, + '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_params' => $params ); $rc->mExtra = array( 'prefixedDBkey' => $title->getPrefixedDBkey(), 'lastTimestamp' => 0, 'actionComment' => $actionComment, // the comment appended to the action, passed from LogPage - 'pageStatus' => $pageStatus, + 'pageStatus' => $pageStatus, 'actionCommentIRC' => $actionCommentIRC ); + return $rc; } /** * Initialises the members of this object from a mysql row object * - * @param $row + * @param mixed $row */ public function loadFromRow( $row ) { $this->mAttribs = get_object_vars( $row ); @@ -699,42 +737,6 @@ class RecentChange { } /** - * Makes a pseudo-RC entry from a cur row - * - * @deprected in 1.22 - * @param $row - */ - public function loadFromCurRow( $row ) { - wfDeprecated( __METHOD__, '1.22' ); - $this->mAttribs = array( - 'rc_timestamp' => wfTimestamp( TS_MW, $row->rev_timestamp ), - 'rc_cur_time' => $row->rev_timestamp, - 'rc_user' => $row->rev_user, - 'rc_user_text' => $row->rev_user_text, - 'rc_namespace' => $row->page_namespace, - 'rc_title' => $row->page_title, - 'rc_comment' => $row->rev_comment, - 'rc_minor' => $row->rev_minor_edit ? 1 : 0, - 'rc_type' => $row->page_is_new ? RC_NEW : RC_EDIT, - 'rc_cur_id' => $row->page_id, - 'rc_this_oldid' => $row->rev_id, - 'rc_last_oldid' => isset( $row->rc_last_oldid ) ? $row->rc_last_oldid : 0, - 'rc_bot' => 0, - 'rc_ip' => '', - 'rc_id' => $row->rc_id, - 'rc_patrolled' => $row->rc_patrolled, - 'rc_new' => $row->page_is_new, # obsolete - 'rc_old_len' => $row->rc_old_len, - 'rc_new_len' => $row->rc_new_len, - 'rc_params' => isset( $row->rc_params ) ? $row->rc_params : '', - 'rc_log_type' => isset( $row->rc_log_type ) ? $row->rc_log_type : null, - 'rc_log_action' => isset( $row->rc_log_action ) ? $row->rc_log_action : null, - 'rc_logid' => isset( $row->rc_logid ) ? $row->rc_logid : 0, - 'rc_deleted' => $row->rc_deleted // MUST be set - ); - } - - /** * Get an attribute value * * @param string $name Attribute name @@ -754,7 +756,7 @@ class RecentChange { /** * Gets the end part of the diff URL associated with this object * Blank if no diff link should be displayed - * @param $forceCur + * @param bool $forceCur * @return string */ public function diffLinkTrail( $forceCur ) { @@ -769,14 +771,15 @@ class RecentChange { } else { $trail = ''; } + return $trail; } /** * Returns the change size (HTML). * The lengths can be given optionally. - * @param $old int - * @param $new int + * @param int $old + * @param int $new * @return string */ public function getCharacterDifference( $old = 0, $new = 0 ) { @@ -789,6 +792,7 @@ class RecentChange { if ( $old === null || $new === null ) { return ''; } + return ChangesList::showCharacterDifference( $old, $new ); } @@ -803,7 +807,7 @@ class RecentChange { $method = __METHOD__; $dbw = wfGetDB( DB_MASTER ); - $dbw->onTransactionIdle( function() use ( $dbw, $method ) { + $dbw->onTransactionIdle( function () use ( $dbw, $method ) { global $wgRCMaxAge; $cutoff = $dbw->timestamp( time() - $wgRCMaxAge ); @@ -819,7 +823,8 @@ class RecentChange { global $wgRequest; if ( $ip ) { if ( !IP::isIPAddress( $ip ) ) { - throw new MWException( "Attempt to write \"" . $ip . "\" as an IP address into recent changes" ); + throw new MWException( "Attempt to write \"" . $ip . + "\" as an IP address into recent changes" ); } } else { $ip = $wgRequest->getIP(); @@ -827,6 +832,7 @@ class RecentChange { $ip = ''; } } + return $ip; } @@ -835,12 +841,13 @@ class RecentChange { * as the recentchanges table might not be cleared out regularly (so older entries might exist) * or rows which will be deleted soon shouldn't be included. * - * @param $timestamp mixed MWTimestamp compatible timestamp - * @param $tolerance integer Tolerance in seconds + * @param mixed $timestamp MWTimestamp compatible timestamp + * @param int $tolerance Tolerance in seconds * @return bool */ public static function isInRCLifespan( $timestamp, $tolerance = 0 ) { global $wgRCMaxAge; + return wfTimestamp( TS_UNIX, $timestamp ) > time() - $tolerance - $wgRCMaxAge; } } |