diff options
Diffstat (limited to 'includes/api/ApiQueryRecentChanges.php')
-rw-r--r-- | includes/api/ApiQueryRecentChanges.php | 122 |
1 files changed, 32 insertions, 90 deletions
diff --git a/includes/api/ApiQueryRecentChanges.php b/includes/api/ApiQueryRecentChanges.php index 6f0c5d34..f6a64785 100644 --- a/includes/api/ApiQueryRecentChanges.php +++ b/includes/api/ApiQueryRecentChanges.php @@ -56,15 +56,16 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { return $this->tokenFunctions; } - // If we're in JSON callback mode, no tokens can be obtained - if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) { + // If we're in a mode that breaks the same-origin policy, no tokens can + // be obtained + if ( $this->lacksSameOriginSecurity() ) { return array(); } $this->tokenFunctions = array( 'patrol' => array( 'ApiQueryRecentChanges', 'getPatrolToken' ) ); - wfRunHooks( 'APIQueryRecentChangesTokens', array( &$this->tokenFunctions ) ); + Hooks::run( 'APIQueryRecentChangesTokens', array( &$this->tokenFunctions ) ); return $this->tokenFunctions; } @@ -178,7 +179,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { if ( !is_null( $params['type'] ) ) { try { $this->addWhereFld( 'rc_type', RecentChange::parseToRCType( $params['type'] ) ); - } catch ( MWException $e ) { + } catch ( Exception $e ) { ApiBase::dieDebug( __METHOD__, $e->getMessage() ); } } @@ -383,9 +384,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { $vals = $this->extractRowInfo( $row ); /* Add that row's data to our final output. */ - if ( !$vals ) { - continue; - } $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals ); if ( !$fit ) { $this->setContinueEnumParameter( 'continue', "$row->rc_timestamp|$row->rc_id" ); @@ -398,7 +396,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { if ( is_null( $resultPageSet ) ) { /* Format the result */ - $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'rc' ); + $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'rc' ); } else { $resultPageSet->populateFromTitles( $titles ); } @@ -427,7 +425,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { /* Create a new entry in the result for the title. */ if ( $this->fld_title || $this->fld_ids ) { if ( $type === RC_LOG && ( $row->rc_deleted & LogPage::DELETED_ACTION ) ) { - $vals['actionhidden'] = ''; + $vals['actionhidden'] = true; $anyHidden = true; } if ( $type !== RC_LOG || @@ -451,7 +449,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { /* Add user data and 'anon' flag, if user is anonymous. */ if ( $this->fld_user || $this->fld_userid ) { if ( $row->rc_deleted & Revision::DELETED_USER ) { - $vals['userhidden'] = ''; + $vals['userhidden'] = true; $anyHidden = true; } if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_USER, $user ) ) { @@ -464,22 +462,16 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { } if ( !$row->rc_user ) { - $vals['anon'] = ''; + $vals['anon'] = true; } } } /* Add flags, such as new, minor, bot. */ if ( $this->fld_flags ) { - if ( $row->rc_bot ) { - $vals['bot'] = ''; - } - if ( $row->rc_type == RC_NEW ) { - $vals['new'] = ''; - } - if ( $row->rc_minor ) { - $vals['minor'] = ''; - } + $vals['bot'] = (bool)$row->rc_bot; + $vals['new'] = $row->rc_type == RC_NEW; + $vals['minor'] = (bool)$row->rc_minor; } /* Add sizes of each revision. (Only available on 1.10+) */ @@ -496,7 +488,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { /* Add edit summary / log summary. */ if ( $this->fld_comment || $this->fld_parsedcomment ) { if ( $row->rc_deleted & Revision::DELETED_COMMENT ) { - $vals['commenthidden'] = ''; + $vals['commenthidden'] = true; $anyHidden = true; } if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_COMMENT, $user ) ) { @@ -511,45 +503,32 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { } if ( $this->fld_redirect ) { - if ( $row->page_is_redirect ) { - $vals['redirect'] = ''; - } + $vals['redirect'] = (bool)$row->page_is_redirect; } /* Add the patrolled flag */ - if ( $this->fld_patrolled && $row->rc_patrolled == 1 ) { - $vals['patrolled'] = ''; - } - - if ( $this->fld_patrolled && ChangesList::isUnpatrolled( $row, $user ) ) { - $vals['unpatrolled'] = ''; + if ( $this->fld_patrolled ) { + $vals['patrolled'] = $row->rc_patrolled == 1; + $vals['unpatrolled'] = ChangesList::isUnpatrolled( $row, $user ); } if ( $this->fld_loginfo && $row->rc_type == RC_LOG ) { if ( $row->rc_deleted & LogPage::DELETED_ACTION ) { - $vals['actionhidden'] = ''; + $vals['actionhidden'] = true; $anyHidden = true; } if ( LogEventsList::userCanBitfield( $row->rc_deleted, LogPage::DELETED_ACTION, $user ) ) { $vals['logid'] = intval( $row->rc_logid ); $vals['logtype'] = $row->rc_log_type; $vals['logaction'] = $row->rc_log_action; - $logEntry = DatabaseLogEntry::newFromRow( (array)$row ); - ApiQueryLogEvents::addLogParams( - $this->getResult(), - $vals, - $logEntry->getParameters(), - $logEntry->getType(), - $logEntry->getSubtype(), - $logEntry->getTimestamp() - ); + $vals['logparams'] = LogFormatter::newFromRow( $row )->formatParametersForApi(); } } if ( $this->fld_tags ) { if ( $row->ts_tags ) { $tags = explode( ',', $row->ts_tags ); - $this->getResult()->setIndexedTagName( $tags, 'tag' ); + ApiResult::setIndexedTagName( $tags, 'tag' ); $vals['tags'] = $tags; } else { $vals['tags'] = array(); @@ -558,7 +537,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { if ( $this->fld_sha1 && $row->rev_sha1 !== null ) { if ( $row->rev_deleted & Revision::DELETED_TEXT ) { - $vals['sha1hidden'] = ''; + $vals['sha1hidden'] = true; $anyHidden = true; } if ( Revision::userCanBitfield( $row->rev_deleted, Revision::DELETED_TEXT, $user ) ) { @@ -584,7 +563,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { } if ( $anyHidden && ( $row->rc_deleted & Revision::DELETED_RESTRICTED ) ) { - $vals['suppressed'] = ''; + $vals['suppressed'] = true; } return $vals; @@ -625,7 +604,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { ApiBase::PARAM_TYPE => array( 'newer', 'older' - ) + ), + ApiBase::PARAM_HELP_MSG => 'api-help-param-direction', ), 'namespace' => array( ApiBase::PARAM_ISMULTI => true, @@ -687,6 +667,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2 ), 'type' => array( + ApiBase::PARAM_DFLT => 'edit|new|log', ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_TYPE => array( 'edit', @@ -696,57 +677,18 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { ) ), 'toponly' => false, - 'continue' => null, - ); - } - - public function getParamDescription() { - $p = $this->getModulePrefix(); - - return array( - 'start' => 'The timestamp to start enumerating from', - 'end' => 'The timestamp to end enumerating', - 'dir' => $this->getDirectionDescription( $p ), - 'namespace' => 'Filter log entries to only this namespace(s)', - 'user' => 'Only list changes by this user', - 'excludeuser' => 'Don\'t list changes by this user', - 'prop' => array( - 'Include additional pieces of information', - ' user - Adds the user responsible for the edit and tags if they are an IP', - ' userid - Adds the user id responsible for the edit', - ' comment - Adds the comment for the edit', - ' parsedcomment - Adds the parsed comment for the edit', - ' flags - Adds flags for the edit', - ' timestamp - Adds timestamp of the edit', - ' title - Adds the page title of the edit', - ' ids - Adds the page ID, recent changes ID and the new and old revision ID', - ' sizes - Adds the new and old page length in bytes', - ' redirect - Tags edit if page is a redirect', - ' patrolled - Tags patrollable edits as being patrolled or unpatrolled', - ' loginfo - Adds log information (logid, logtype, etc) to log entries', - ' tags - Lists tags for the entry', - ' sha1 - Adds the content checksum for entries associated with a revision', + 'continue' => array( + ApiBase::PARAM_HELP_MSG => 'api-help-param-continue', ), - 'token' => 'Which tokens to obtain for each change', - 'show' => array( - 'Show only items that meet this criteria.', - "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon" - ), - 'type' => 'Which types of changes to show', - 'limit' => 'How many total changes to return', - 'tag' => 'Only list changes tagged with this tag', - 'toponly' => 'Only list changes which are the latest revision', - 'continue' => 'When more results are available, use this to continue', ); } - public function getDescription() { - return 'Enumerate recent changes.'; - } - - public function getExamples() { + protected function getExamplesMessages() { return array( - 'api.php?action=query&list=recentchanges' + 'action=query&list=recentchanges' + => 'apihelp-query+recentchanges-example-simple', + 'action=query&generator=recentchanges&grcshow=!patrolled&prop=info' + => 'apihelp-query+recentchanges-example-generator', ); } |