From ca32f08966f1b51fcb19460f0996bb0c4048e6fe Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 3 Dec 2011 13:29:22 +0100 Subject: Update to MediaWiki 1.18.0 * also update ArchLinux skin to chagnes in MonoBook * Use only css to hide our menu bar when printing --- includes/api/ApiQueryWatchlist.php | 94 +++++++++++++++++++++++++------------- 1 file changed, 62 insertions(+), 32 deletions(-) (limited to 'includes/api/ApiQueryWatchlist.php') diff --git a/includes/api/ApiQueryWatchlist.php b/includes/api/ApiQueryWatchlist.php index 784f89c0..a5eb23eb 100644 --- a/includes/api/ApiQueryWatchlist.php +++ b/includes/api/ApiQueryWatchlist.php @@ -1,6 +1,6 @@ selectNamedDB( 'watchlist', DB_SLAVE, 'watchlist' ); @@ -74,6 +78,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { $this->fld_sizes = isset( $prop['sizes'] ); $this->fld_patrol = isset( $prop['patrol'] ); $this->fld_notificationtimestamp = isset( $prop['notificationtimestamp'] ); + $this->fld_loginfo = isset( $prop['loginfo'] ); if ( $this->fld_patrol ) { if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) { @@ -85,25 +90,25 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { $this->addFields( array( 'rc_namespace', 'rc_title', - 'rc_timestamp' + 'rc_timestamp', + 'rc_type', ) ); if ( is_null( $resultPageSet ) ) { $this->addFields( array( 'rc_cur_id', - 'rc_this_oldid' + 'rc_this_oldid', + 'rc_last_oldid', ) ); - $this->addFieldsIf( 'rc_new', $this->fld_flags ); - $this->addFieldsIf( 'rc_minor', $this->fld_flags ); - $this->addFieldsIf( 'rc_bot', $this->fld_flags ); + $this->addFieldsIf( array( 'rc_new', 'rc_minor', 'rc_bot' ), $this->fld_flags ); $this->addFieldsIf( 'rc_user', $this->fld_user || $this->fld_userid ); $this->addFieldsIf( 'rc_user_text', $this->fld_user ); $this->addFieldsIf( 'rc_comment', $this->fld_comment || $this->fld_parsedcomment ); $this->addFieldsIf( 'rc_patrolled', $this->fld_patrol ); - $this->addFieldsIf( 'rc_old_len', $this->fld_sizes ); - $this->addFieldsIf( 'rc_new_len', $this->fld_sizes ); + $this->addFieldsIf( array( 'rc_old_len', 'rc_new_len' ), $this->fld_sizes ); $this->addFieldsIf( 'wl_notificationtimestamp', $this->fld_notificationtimestamp ); + $this->addFieldsIf( array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ), $this->fld_loginfo ); } elseif ( $params['allrev'] ) { $this->addFields( 'rc_this_oldid' ); } else { @@ -111,27 +116,33 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { } $this->addTables( array( + 'recentchanges', 'watchlist', - 'page', - 'recentchanges' ) ); $userId = $user->getId(); + $this->addJoinConds( array( 'watchlist' => array('INNER JOIN', + array( + 'wl_user' => $userId, + 'wl_namespace=rc_namespace', + 'wl_title=rc_title' + ) ) ) ); + $this->addWhere( array( - 'wl_namespace = rc_namespace', - 'wl_title = rc_title', - 'rc_cur_id = page_id', - 'wl_user' => $userId, 'rc_deleted' => 0, ) ); - + $db = $this->getDB(); - $this->addWhereRange( 'rc_timestamp', $params['dir'], - $db->timestamp( $params['start'] ), - $db->timestamp( $params['end'] ) ); + $this->addTimestampWhereRange( 'rc_timestamp', $params['dir'], + $params['start'], $params['end'] ); $this->addWhereFld( 'wl_namespace', $params['namespace'] ); - $this->addWhereIf( 'rc_this_oldid=page_latest', !$params['allrev'] ); + + if ( !$params['allrev'] ) { + $this->addTables( 'page' ); + $this->addJoinConds( array( 'page' => array( 'LEFT JOIN','rc_cur_id=page_id' ) ) ); + $this->addWhere( 'rc_this_oldid=page_latest OR rc_type=' . RC_LOG ); + } if ( !is_null( $params['show'] ) ) { $show = array_flip( $params['show'] ); @@ -143,7 +154,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { || ( isset ( $show['patrolled'] ) && isset ( $show['!patrolled'] ) ) ) { - $this->dieUsageMsg( array( 'show' ) ); + $this->dieUsageMsg( 'show' ); } // Check permissions. @@ -172,11 +183,9 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { $this->addWhereFld( 'rc_user_text', $params['user'] ); } if ( !is_null( $params['excludeuser'] ) ) { - $this->addWhere( 'rc_user_text != ' . $this->getDB()->addQuotes( $params['excludeuser'] ) ); + $this->addWhere( 'rc_user_text != ' . $db->addQuotes( $params['excludeuser'] ) ); } - - // This is an index optimization for mysql, as done in the Special:Watchlist page $this->addWhereIf( "rc_timestamp > ''", !isset( $params['start'] ) && !isset( $params['end'] ) && $db->getType() == 'mysql' ); @@ -225,6 +234,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { if ( $this->fld_ids ) { $vals['pageid'] = intval( $row->rc_cur_id ); $vals['revid'] = intval( $row->rc_this_oldid ); + $vals['old_revid'] = intval( $row->rc_last_oldid ); } $title = Title::makeTitle( $row->rc_namespace, $row->rc_title ); @@ -240,7 +250,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { } if ( $this->fld_userid ) { - $vals['user'] = $row->rc_user; + $vals['user'] = $row->rc_user; } if ( !$row->rc_user ) { @@ -284,8 +294,21 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { } if ( $this->fld_parsedcomment && isset( $row->rc_comment ) ) { - global $wgUser; - $vals['parsedcomment'] = $wgUser->getSkin()->formatComment( $row->rc_comment, $title ); + $vals['parsedcomment'] = Linker::formatComment( $row->rc_comment, $title ); + } + + if ( $this->fld_loginfo && $row->rc_type == RC_LOG ) { + $vals['logid'] = intval( $row->rc_logid ); + $vals['logtype'] = $row->rc_log_type; + $vals['logaction'] = $row->rc_log_action; + ApiQueryLogEvents::addLogParams( + $this->getResult(), + $vals, + $row->rc_params, + $row->rc_log_type, + $row->rc_log_action, + $row->rc_timestamp + ); } return $vals; @@ -338,7 +361,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { 'timestamp', 'patrol', 'sizes', - 'notificationtimestamp' + 'notificationtimestamp', + 'loginfo', ) ), 'show' => array( @@ -364,6 +388,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { } public function getParamDescription() { + $p = $this->getModulePrefix(); return array( 'allrev' => 'Include multiple revisions of the same page within given timeframe', 'start' => 'The timestamp to start enumerating from', @@ -371,7 +396,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { 'namespace' => 'Filter changes to only the given namespace(s)', 'user' => 'Only list changes by this user', 'excludeuser' => 'Don\'t list changes by this user', - 'dir' => 'In which direction to enumerate pages', + 'dir' => $this->getDirectionDescription( $p ), 'limit' => 'How many total results to return per request', 'prop' => array( 'Which additional items to get (non-generator mode only).', @@ -384,12 +409,13 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { ' parsedcomment - Adds parsed comment of the edit', ' timestamp - Adds timestamp of the edit', ' patrol - Tags edits that are patrolled', - ' size - Adds the old and new lengths of the page', + ' sizes - Adds the old and new lengths of the page', ' notificationtimestamp - Adds timestamp of when the user was last notified about the edit', + ' loginfo - Adds log information where appropriate', ), 'show' => array( 'Show only items that meet this criteria.', - "For example, to see only minor edits done by logged-in users, set {$this->getModulePrefix()}show=minor|!anon" + "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon" ), 'owner' => 'The name of the user whose watchlist you\'d like to access', 'token' => 'Give a security token (settable in preferences) to allow access to another user\'s watchlist' @@ -423,7 +449,11 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase { ); } + public function getHelpUrls() { + return 'https://www.mediawiki.org/wiki/API:Watchlist'; + } + public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryWatchlist.php 85435 2011-04-05 14:00:08Z demon $'; + return __CLASS__ . ': $Id: ApiQueryWatchlist.php 104449 2011-11-28 15:52:04Z reedy $'; } } -- cgit v1.2.3-54-g00ecf