From 222b01f5169f1c7e69762e0e8904c24f78f71882 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 28 Jul 2010 11:52:48 +0200 Subject: update to MediaWiki 1.16.0 --- includes/api/ApiQuery.php | 243 +++++++++++++++++++++++----------------------- 1 file changed, 121 insertions(+), 122 deletions(-) (limited to 'includes/api/ApiQuery.php') diff --git a/includes/api/ApiQuery.php b/includes/api/ApiQuery.php index 49ddcdd3..8d3ef616 100644 --- a/includes/api/ApiQuery.php +++ b/includes/api/ApiQuery.php @@ -23,9 +23,9 @@ * http://www.gnu.org/copyleft/gpl.html */ -if (!defined('MEDIAWIKI')) { +if ( !defined( 'MEDIAWIKI' ) ) { // Eclipse helper - will be ignored in production - require_once ('ApiBase.php'); + require_once ( 'ApiBase.php' ); } /** @@ -74,6 +74,7 @@ class ApiQuery extends ApiBase { 'logevents' => 'ApiQueryLogEvents', 'recentchanges' => 'ApiQueryRecentChanges', 'search' => 'ApiQuerySearch', + 'tags' => 'ApiQueryTags', 'usercontribs' => 'ApiQueryContributions', 'watchlist' => 'ApiQueryWatchlist', 'watchlistraw' => 'ApiQueryWatchlistRaw', @@ -92,22 +93,22 @@ class ApiQuery extends ApiBase { private $mSlaveDB = null; private $mNamedDB = array(); - public function __construct($main, $action) { - parent :: __construct($main, $action); + public function __construct( $main, $action ) { + parent :: __construct( $main, $action ); // Allow custom modules to be added in LocalSettings.php global $wgAPIPropModules, $wgAPIListModules, $wgAPIMetaModules; - self :: appendUserModules($this->mQueryPropModules, $wgAPIPropModules); - self :: appendUserModules($this->mQueryListModules, $wgAPIListModules); - self :: appendUserModules($this->mQueryMetaModules, $wgAPIMetaModules); + self :: appendUserModules( $this->mQueryPropModules, $wgAPIPropModules ); + self :: appendUserModules( $this->mQueryListModules, $wgAPIListModules ); + self :: appendUserModules( $this->mQueryMetaModules, $wgAPIMetaModules ); - $this->mPropModuleNames = array_keys($this->mQueryPropModules); - $this->mListModuleNames = array_keys($this->mQueryListModules); - $this->mMetaModuleNames = array_keys($this->mQueryMetaModules); + $this->mPropModuleNames = array_keys( $this->mQueryPropModules ); + $this->mListModuleNames = array_keys( $this->mQueryListModules ); + $this->mMetaModuleNames = array_keys( $this->mQueryMetaModules ); // Allow the entire list of modules at first, // but during module instantiation check if it can be used as a generator. - $this->mAllowedGenerators = array_merge($this->mListModuleNames, $this->mPropModuleNames); + $this->mAllowedGenerators = array_merge( $this->mListModuleNames, $this->mPropModuleNames ); } /** @@ -115,9 +116,9 @@ class ApiQuery extends ApiBase { * @param $modules array Module array * @param $newModules array Module array to add to $modules */ - private static function appendUserModules(&$modules, $newModules) { - if (is_array( $newModules )) { - foreach ( $newModules as $moduleName => $moduleClass) { + private static function appendUserModules( &$modules, $newModules ) { + if ( is_array( $newModules ) ) { + foreach ( $newModules as $moduleName => $moduleClass ) { $modules[$moduleName] = $moduleClass; } } @@ -128,9 +129,9 @@ class ApiQuery extends ApiBase { * @return Database */ public function getDB() { - if (!isset ($this->mSlaveDB)) { + if ( !isset ( $this->mSlaveDB ) ) { $this->profileDBIn(); - $this->mSlaveDB = wfGetDB(DB_SLAVE,'api'); + $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' ); $this->profileDBOut(); } return $this->mSlaveDB; @@ -146,10 +147,10 @@ class ApiQuery extends ApiBase { * @param $groups array Query groups * @return Database */ - public function getNamedDB($name, $db, $groups) { - if (!array_key_exists($name, $this->mNamedDB)) { + public function getNamedDB( $name, $db, $groups ) { + if ( !array_key_exists( $name, $this->mNamedDB ) ) { $this->profileDBIn(); - $this->mNamedDB[$name] = wfGetDB($db, $groups); + $this->mNamedDB[$name] = wfGetDB( $db, $groups ); $this->profileDBOut(); } return $this->mNamedDB[$name]; @@ -168,15 +169,15 @@ class ApiQuery extends ApiBase { * @return array(modulename => classname) */ function getModules() { - return array_merge($this->mQueryPropModules, $this->mQueryListModules, $this->mQueryMetaModules); + return array_merge( $this->mQueryPropModules, $this->mQueryListModules, $this->mQueryMetaModules ); } - + public function getCustomPrinter() { // If &exportnowrap is set, use the raw formatter - if ($this->getParameter('export') && - $this->getParameter('exportnowrap')) - return new ApiFormatRaw($this->getMain(), - $this->getMain()->createPrinterByName('xml')); + if ( $this->getParameter( 'export' ) && + $this->getParameter( 'exportnowrap' ) ) + return new ApiFormatRaw( $this->getMain(), + $this->getMain()->createPrinterByName( 'xml' ) ); else return null; } @@ -196,24 +197,18 @@ class ApiQuery extends ApiBase { $this->params = $this->extractRequestParams(); $this->redirects = $this->params['redirects']; - // // Create PageSet - // - $this->mPageSet = new ApiPageSet($this, $this->redirects); + $this->mPageSet = new ApiPageSet( $this, $this->redirects ); - // // Instantiate requested modules - // $modules = array (); - $this->InstantiateModules($modules, 'prop', $this->mQueryPropModules); - $this->InstantiateModules($modules, 'list', $this->mQueryListModules); - $this->InstantiateModules($modules, 'meta', $this->mQueryMetaModules); + $this->InstantiateModules( $modules, 'prop', $this->mQueryPropModules ); + $this->InstantiateModules( $modules, 'list', $this->mQueryListModules ); + $this->InstantiateModules( $modules, 'meta', $this->mQueryMetaModules ); $cacheMode = 'public'; - // // If given, execute generator to substitute user supplied data with generated data. - // if ( isset ( $this->params['generator'] ) ) { $generator = $this->newGenerator( $this->params['generator'] ); $params = $generator->extractRequestParams(); @@ -222,25 +217,21 @@ class ApiQuery extends ApiBase { $this->executeGeneratorModule( $generator, $modules ); } else { // Append custom fields and populate page/revision information - $this->addCustomFldsToPageSet($modules, $this->mPageSet); + $this->addCustomFldsToPageSet( $modules, $this->mPageSet ); $this->mPageSet->execute(); } - // // Record page information (title, namespace, if exists, etc) - // $this->outputGeneralPageInfo(); - // // Execute all requested modules. - // - foreach ($modules as $module) { + foreach ( $modules as $module ) { $params = $module->extractRequestParams(); $cacheMode = $this->mergeCacheMode( $cacheMode, $module->getCacheMode( $params ) ); $module->profileIn(); $module->execute(); - wfRunHooks('APIQueryAfterExecute', array(&$module)); + wfRunHooks( 'APIQueryAfterExecute', array( &$module ) ); $module->profileOut(); } @@ -273,10 +264,10 @@ class ApiQuery extends ApiBase { * @param $modules array of module objects * @param $pageSet ApiPageSet */ - private function addCustomFldsToPageSet($modules, $pageSet) { + private function addCustomFldsToPageSet( $modules, $pageSet ) { // Query all requested modules. - foreach ($modules as $module) { - $module->requestExtraData($pageSet); + foreach ( $modules as $module ) { + $module->requestExtraData( $pageSet ); } } @@ -286,11 +277,11 @@ class ApiQuery extends ApiBase { * @param $param string Parameter name to read modules from * @param $moduleList array(modulename => classname) */ - private function InstantiateModules(&$modules, $param, $moduleList) { + private function InstantiateModules( &$modules, $param, $moduleList ) { $list = @$this->params[$param]; - if (!is_null ($list)) - foreach ($list as $moduleName) - $modules[] = new $moduleList[$moduleName] ($this, $moduleName); + if ( !is_null ( $list ) ) + foreach ( $list as $moduleName ) + $modules[] = new $moduleList[$moduleName] ( $this, $moduleName ); } /** @@ -303,65 +294,65 @@ class ApiQuery extends ApiBase { $pageSet = $this->getPageSet(); $result = $this->getResult(); - # We don't check for a full result set here because we can't be adding - # more than 380K. The maximum revision size is in the megabyte range, - # and the maximum result size must be even higher than that. + // We don't check for a full result set here because we can't be adding + // more than 380K. The maximum revision size is in the megabyte range, + // and the maximum result size must be even higher than that. // Title normalizations $normValues = array (); - foreach ($pageSet->getNormalizedTitles() as $rawTitleStr => $titleStr) { + foreach ( $pageSet->getNormalizedTitles() as $rawTitleStr => $titleStr ) { $normValues[] = array ( 'from' => $rawTitleStr, 'to' => $titleStr ); } - if (count($normValues)) { - $result->setIndexedTagName($normValues, 'n'); - $result->addValue('query', 'normalized', $normValues); + if ( count( $normValues ) ) { + $result->setIndexedTagName( $normValues, 'n' ); + $result->addValue( 'query', 'normalized', $normValues ); } // Interwiki titles $intrwValues = array (); - foreach ($pageSet->getInterwikiTitles() as $rawTitleStr => $interwikiStr) { + foreach ( $pageSet->getInterwikiTitles() as $rawTitleStr => $interwikiStr ) { $intrwValues[] = array ( 'title' => $rawTitleStr, 'iw' => $interwikiStr ); } - if (count($intrwValues)) { - $result->setIndexedTagName($intrwValues, 'i'); - $result->addValue('query', 'interwiki', $intrwValues); + if ( count( $intrwValues ) ) { + $result->setIndexedTagName( $intrwValues, 'i' ); + $result->addValue( 'query', 'interwiki', $intrwValues ); } // Show redirect information $redirValues = array (); - foreach ($pageSet->getRedirectTitles() as $titleStrFrom => $titleStrTo) { + foreach ( $pageSet->getRedirectTitles() as $titleStrFrom => $titleStrTo ) { $redirValues[] = array ( - 'from' => strval($titleStrFrom), + 'from' => strval( $titleStrFrom ), 'to' => $titleStrTo ); } - if (count($redirValues)) { - $result->setIndexedTagName($redirValues, 'r'); - $result->addValue('query', 'redirects', $redirValues); + if ( count( $redirValues ) ) { + $result->setIndexedTagName( $redirValues, 'r' ); + $result->addValue( 'query', 'redirects', $redirValues ); } // // Missing revision elements // $missingRevIDs = $pageSet->getMissingRevisionIDs(); - if (count($missingRevIDs)) { + if ( count( $missingRevIDs ) ) { $revids = array (); - foreach ($missingRevIDs as $revid) { + foreach ( $missingRevIDs as $revid ) { $revids[$revid] = array ( 'revid' => $revid ); } - $result->setIndexedTagName($revids, 'rev'); - $result->addValue('query', 'badrevids', $revids); + $result->setIndexedTagName( $revids, 'rev' ); + $result->addValue( 'query', 'badrevids', $revids ); } // @@ -370,17 +361,17 @@ class ApiQuery extends ApiBase { $pages = array (); // Report any missing titles - foreach ($pageSet->getMissingTitles() as $fakeId => $title) { + foreach ( $pageSet->getMissingTitles() as $fakeId => $title ) { $vals = array(); - ApiQueryBase :: addTitleInfo($vals, $title); + ApiQueryBase :: addTitleInfo( $vals, $title ); $vals['missing'] = ''; $pages[$fakeId] = $vals; } // Report any invalid titles - foreach ($pageSet->getInvalidTitles() as $fakeId => $title) - $pages[$fakeId] = array('title' => $title, 'invalid' => ''); + foreach ( $pageSet->getInvalidTitles() as $fakeId => $title ) + $pages[$fakeId] = array( 'title' => $title, 'invalid' => '' ); // Report any missing page ids - foreach ($pageSet->getMissingPageIDs() as $pageid) { + foreach ( $pageSet->getMissingPageIDs() as $pageid ) { $pages[$pageid] = array ( 'pageid' => $pageid, 'missing' => '' @@ -388,51 +379,52 @@ class ApiQuery extends ApiBase { } // Output general page information for found titles - foreach ($pageSet->getGoodTitles() as $pageid => $title) { + foreach ( $pageSet->getGoodTitles() as $pageid => $title ) { $vals = array(); $vals['pageid'] = $pageid; - ApiQueryBase :: addTitleInfo($vals, $title); + ApiQueryBase :: addTitleInfo( $vals, $title ); $pages[$pageid] = $vals; } - if (count($pages)) { + if ( count( $pages ) ) { - if ($this->params['indexpageids']) { - $pageIDs = array_keys($pages); + if ( $this->params['indexpageids'] ) { + $pageIDs = array_keys( $pages ); // json treats all map keys as strings - converting to match - $pageIDs = array_map('strval', $pageIDs); - $result->setIndexedTagName($pageIDs, 'id'); - $result->addValue('query', 'pageids', $pageIDs); + $pageIDs = array_map( 'strval', $pageIDs ); + $result->setIndexedTagName( $pageIDs, 'id' ); + $result->addValue( 'query', 'pageids', $pageIDs ); } - $result->setIndexedTagName($pages, 'page'); - $result->addValue('query', 'pages', $pages); + $result->setIndexedTagName( $pages, 'page' ); + $result->addValue( 'query', 'pages', $pages ); } - if ($this->params['export']) { - $exporter = new WikiExporter($this->getDB()); + if ( $this->params['export'] ) { + $exporter = new WikiExporter( $this->getDB() ); // WikiExporter writes to stdout, so catch its // output with an ob ob_start(); $exporter->openStream(); - foreach (@$pageSet->getGoodTitles() as $title) - if ($title->userCanRead()) - $exporter->pageByTitle($title); + foreach ( @$pageSet->getGoodTitles() as $title ) + if ( $title->userCanRead() ) + $exporter->pageByTitle( $title ); $exporter->closeStream(); $exportxml = ob_get_contents(); ob_end_clean(); + // Don't check the size of exported stuff // It's not continuable, so it would cause more // problems than it'd solve $result->disableSizeCheck(); - if ($this->params['exportnowrap']) { + if ( $this->params['exportnowrap'] ) { $result->reset(); // Raw formatter will handle this - $result->addValue(null, 'text', $exportxml); - $result->addValue(null, 'mime', 'text/xml'); + $result->addValue( null, 'text', $exportxml ); + $result->addValue( null, 'mime', 'text/xml' ); } else { $r = array(); - ApiResult::setContent($r, $exportxml); - $result->addValue('query', 'export', $r); + ApiResult::setContent( $r, $exportxml ); + $result->addValue( 'query', 'export', $r ); } $result->enableSizeCheck(); } @@ -442,22 +434,23 @@ class ApiQuery extends ApiBase { * Create a generator object of the given type and return it */ public function newGenerator( $generatorName ) { + // Find class that implements requested generator - if (isset ($this->mQueryListModules[$generatorName])) { + if ( isset ( $this->mQueryListModules[$generatorName] ) ) { $className = $this->mQueryListModules[$generatorName]; - } elseif (isset ($this->mQueryPropModules[$generatorName])) { + } elseif ( isset ( $this->mQueryPropModules[$generatorName] ) ) { $className = $this->mQueryPropModules[$generatorName]; } else { - ApiBase :: dieDebug(__METHOD__, "Unknown generator=$generatorName"); + ApiBase :: dieDebug( __METHOD__, "Unknown generator=$generatorName" ); } // Generator results - $resultPageSet = new ApiPageSet($this, $this->redirects); + $resultPageSet = new ApiPageSet( $this, $this->redirects ); // Create and execute the generator - $generator = new $className ($this, $generatorName); - if (!$generator instanceof ApiQueryGeneratorBase) - $this->dieUsage("Module $generatorName cannot be used as a generator", "badgenerator"); + $generator = new $className ( $this, $generatorName ); + if ( !$generator instanceof ApiQueryGeneratorBase ) + $this->dieUsage( "Module $generatorName cannot be used as a generator", "badgenerator" ); $generator->setGeneratorMode(); return $generator; } @@ -473,16 +466,16 @@ class ApiQuery extends ApiBase { $resultPageSet = new ApiPageSet( $this, $this->redirects, $this->convertTitles ); // Add any additional fields modules may need - $generator->requestExtraData($this->mPageSet); - $this->addCustomFldsToPageSet($modules, $resultPageSet); + $generator->requestExtraData( $this->mPageSet ); + $this->addCustomFldsToPageSet( $modules, $resultPageSet ); // Populate page information with the original user input $this->mPageSet->execute(); // populate resultPageSet with the generator output $generator->profileIn(); - $generator->executeGenerator($resultPageSet); - wfRunHooks('APIQueryGeneratorAfterExecute', array(&$generator, &$resultPageSet)); + $generator->executeGenerator( $resultPageSet ); + wfRunHooks( 'APIQueryGeneratorAfterExecute', array( &$generator, &$resultPageSet ) ); $resultPageSet->finishPageSetGeneration(); $generator->profileOut(); @@ -527,14 +520,14 @@ class ApiQuery extends ApiBase { $this->mPageSet = null; $this->mAllowedGenerators = array(); // Will be repopulated - $astriks = str_repeat('--- ', 8); - $astriks2 = str_repeat('*** ', 10); + $astriks = str_repeat( '--- ', 8 ); + $astriks2 = str_repeat( '*** ', 10 ); $msg .= "\n$astriks Query: Prop $astriks\n\n"; - $msg .= $this->makeHelpMsgHelper($this->mQueryPropModules, 'prop'); + $msg .= $this->makeHelpMsgHelper( $this->mQueryPropModules, 'prop' ); $msg .= "\n$astriks Query: List $astriks\n\n"; - $msg .= $this->makeHelpMsgHelper($this->mQueryListModules, 'list'); + $msg .= $this->makeHelpMsgHelper( $this->mQueryListModules, 'list' ); $msg .= "\n$astriks Query: Meta $astriks\n\n"; - $msg .= $this->makeHelpMsgHelper($this->mQueryMetaModules, 'meta'); + $msg .= $this->makeHelpMsgHelper( $this->mQueryMetaModules, 'meta' ); $msg .= "\n\n$astriks2 Modules: continuation $astriks2\n\n"; // Perform the base call last because the $this->mAllowedGenerators @@ -551,25 +544,25 @@ class ApiQuery extends ApiBase { * @param $paramName string Parameter name * @return string */ - private function makeHelpMsgHelper($moduleList, $paramName) { + private function makeHelpMsgHelper( $moduleList, $paramName ) { $moduleDescriptions = array (); - foreach ($moduleList as $moduleName => $moduleClass) { - $module = new $moduleClass ($this, $moduleName, null); + foreach ( $moduleList as $moduleName => $moduleClass ) { + $module = new $moduleClass ( $this, $moduleName, null ); - $msg = ApiMain::makeHelpMsgHeader($module, $paramName); + $msg = ApiMain::makeHelpMsgHeader( $module, $paramName ); $msg2 = $module->makeHelpMsg(); - if ($msg2 !== false) + if ( $msg2 !== false ) $msg .= $msg2; - if ($module instanceof ApiQueryGeneratorBase) { + if ( $module instanceof ApiQueryGeneratorBase ) { $this->mAllowedGenerators[] = $moduleName; $msg .= "Generator:\n This module may be used as a generator\n"; } $moduleDescriptions[] = $msg; } - return implode("\n", $moduleDescriptions); + return implode( "\n", $moduleDescriptions ); } /** @@ -577,7 +570,7 @@ class ApiQuery extends ApiBase { * @return string */ public function makeHelpMsgParameters() { - $psModule = new ApiPageSet($this); + $psModule = new ApiPageSet( $this ); return $psModule->makeHelpMsgParameters() . parent :: makeHelpMsgParameters(); } @@ -590,8 +583,8 @@ class ApiQuery extends ApiBase { 'prop' => 'Which properties to get for the titles/revisions/pageids', 'list' => 'Which lists to get', 'meta' => 'Which meta data to get about the site', - 'generator' => array('Use the output of a list as the input for other prop/list/meta items', - 'NOTE: generator parameter names must be prefixed with a \'g\', see examples.'), + 'generator' => array( 'Use the output of a list as the input for other prop/list/meta items', + 'NOTE: generator parameter names must be prefixed with a \'g\', see examples.' ), 'redirects' => 'Automatically resolve redirects', 'indexpageids' => 'Include an additional pageids section listing all returned page IDs.', 'export' => 'Export the current revisions of all given or generated pages', @@ -606,6 +599,12 @@ class ApiQuery extends ApiBase { 'All data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.' ); } + + public function getPossibleErrors() { + return array_merge( parent::getPossibleErrors(), array( + array( 'code' => 'badgenerator', 'info' => 'Module $generatorName cannot be used as a generator' ), + ) ); + } protected function getExamples() { return array ( @@ -615,9 +614,9 @@ class ApiQuery extends ApiBase { } public function getVersion() { - $psModule = new ApiPageSet($this); + $psModule = new ApiPageSet( $this ); $vers = array (); - $vers[] = __CLASS__ . ': $Id: ApiQuery.php 69986 2010-07-27 03:57:39Z tstarling $'; + $vers[] = __CLASS__ . ': $Id: ApiQuery.php 69932 2010-07-26 08:03:21Z tstarling $'; $vers[] = $psModule->getVersion(); return $vers; } -- cgit v1.2.3-54-g00ecf