From 589a3f24badd9daa54f64cf229f31e6eb38084d7 Mon Sep 17 00:00:00 2001 From: Sam Reed Date: Sun, 2 Jan 2011 21:01:44 +0000 Subject: [PATCH] * (bug 26541) Generator-ise ApiQueryRecentChanges --- RELEASE-NOTES | 1 + includes/api/ApiQueryRecentChanges.php | 49 +++++++++++++++++--------- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index cdb60d48bf..2e32db2f50 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -59,6 +59,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN * (bug 24287) Wrap API Help output at 100 characters * Add a realname uiprop option to query=userinfo so a user's realname can be extracted * Add a &watchuser option to ApiBlock +* (bug 26541) Generator-ise ApiQueryRecentChanges === Languages updated in 1.18 === diff --git a/includes/api/ApiQueryRecentChanges.php b/includes/api/ApiQueryRecentChanges.php index 8b5d864a95..c062908251 100644 --- a/includes/api/ApiQueryRecentChanges.php +++ b/includes/api/ApiQueryRecentChanges.php @@ -35,7 +35,7 @@ if ( !defined( 'MEDIAWIKI' ) ) { * * @ingroup API */ -class ApiQueryRecentChanges extends ApiQueryBase { +class ApiQueryRecentChanges extends ApiQueryGeneratorBase { public function __construct( $query, $moduleName ) { parent::__construct( $query, $moduleName, 'rc' ); @@ -108,10 +108,18 @@ class ApiQueryRecentChanges extends ApiQueryBase { $this->fld_tags = isset( $prop['tags'] ); } + public function execute() { + $this->run(); + } + + public function executeGenerator( $resultPageSet ) { + $this->run( $resultPageSet ); + } + /** * Generates and outputs the result of this query based upon the provided parameters. */ - public function execute() { + public function run( $resultPageSet = null ) { global $wgUser; /* Get the parameters of the request. */ $params = $this->extractRequestParams(); @@ -252,6 +260,8 @@ class ApiQueryRecentChanges extends ApiQueryBase { /* Perform the actual query. */ $res = $this->select( __METHOD__ ); + $titles = array(); + /* Iterate through the rows, adding data extracted from them to our query result. */ foreach ( $res as $row ) { if ( ++ $count > $params['limit'] ) { @@ -260,22 +270,30 @@ class ApiQueryRecentChanges extends ApiQueryBase { break; } - /* Extract the data from a single row. */ - $vals = $this->extractRowInfo( $row ); + if ( is_null( $resultPageSet ) ) { + /* Extract the data from a single row. */ + $vals = $this->extractRowInfo( $row ); - /* Add that row's data to our final output. */ - if ( !$vals ) { - continue; - } - $fit = $this->getResult()->addValue( array( 'query', $this->getModuleName() ), null, $vals ); - if ( !$fit ) { - $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) ); - break; + /* Add that row's data to our final output. */ + if ( !$vals ) { + continue; + } + $fit = $this->getResult()->addValue( array( 'query', $this->getModuleName() ), null, $vals ); + if ( !$fit ) { + $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) ); + break; + } + } else { + $titles[] = Title::makeTitle( $row->rc_namespace, $row->rc_title ); } } - /* Format the result */ - $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'rc' ); + if ( is_null( $resultPageSet ) ) { + /* Format the result */ + $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'rc' ); + } else { + $resultPageSet->populateFromTitles( $titles ); + } } /** @@ -288,8 +306,7 @@ class ApiQueryRecentChanges extends ApiQueryBase { public function extractRowInfo( $row ) { /* If page was moved somewhere, get the title of the move target. */ $movedToTitle = false; - if ( isset( $row->rc_moved_to_title ) && $row->rc_moved_to_title !== '' ) - { + if ( isset( $row->rc_moved_to_title ) && $row->rc_moved_to_title !== '' ) { $movedToTitle = Title::makeTitle( $row->rc_moved_to_ns, $row->rc_moved_to_title ); } -- 2.20.1