first one keeping its meaning. ApiPageSet is now derived from ApiBase.
* BREAKING CHANGE: ApiQuery::newGenerator() and executeGeneratorModule() were deleted.
* ApiQueryGeneratorBase::setGeneratorMode() now requires a pageset param.
+* $wgAPIGeneratorModules is now obsolete and will be ignored.
=== Languages updated in 1.21 ===
$wgAPIMetaModules = array();
$wgAPIPropModules = array();
$wgAPIListModules = array();
+
+/**
+ * This variable is ignored. To add your module to the API, please add it to $wgAPI*Modules
+ * @deprecated since 1.21
+ */
$wgAPIGeneratorModules = array();
/**
'converttitles' => false,
);
if ( $this->mAllowGenerator ) {
- $result['generator'] = array(
- ApiBase::PARAM_TYPE => $this->getGenerators() );
+ if ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
+ $result['generator'] = array(
+ ApiBase::PARAM_TYPE => $this->getGenerators()
+ );
+ } else {
+ $result['generator'] = null;
+ }
}
return $result;
}
// we must create it to get module manager
$query = $this->getMain()->getModuleManager()->getModule( 'query' );
}
- $gens = array_keys( $query->getGenerators() );
+ $gens = array();
+ $mgr = $query->getModuleManager();
+ foreach ( $mgr->getNamesWithClasses() as $name => $class ) {
+ if ( is_subclass_of( $class, 'ApiQueryGeneratorBase' ) ) {
+ $gens[] = $name;
+ }
+ }
sort( $gens );
self::$generators = $gens;
}
'userinfo' => 'ApiQueryUserInfo',
);
- /**
- * List of Api Query generator modules
- * Defined in code, rather than being derived at runtime,
- * due to performance reasons
- * @var array
- */
- private $mQueryGenerators = array(
- 'allcategories' => 'ApiQueryAllCategories',
- 'allimages' => 'ApiQueryAllImages',
- 'alllinks' => 'ApiQueryAllLinks',
- 'allpages' => 'ApiQueryAllPages',
- 'alltransclusions' => 'ApiQueryAllLinks',
- 'backlinks' => 'ApiQueryBacklinks',
- 'categories' => 'ApiQueryCategories',
- 'categorymembers' => 'ApiQueryCategoryMembers',
- 'duplicatefiles' => 'ApiQueryDuplicateFiles',
- 'embeddedin' => 'ApiQueryBacklinks',
- 'exturlusage' => 'ApiQueryExtLinksUsage',
- 'images' => 'ApiQueryImages',
- 'imageusage' => 'ApiQueryBacklinks',
- 'iwbacklinks' => 'ApiQueryIWBacklinks',
- 'langbacklinks' => 'ApiQueryLangBacklinks',
- 'links' => 'ApiQueryLinks',
- 'protectedtitles' => 'ApiQueryProtectedTitles',
- 'querypage' => 'ApiQueryQueryPage',
- 'random' => 'ApiQueryRandom',
- 'recentchanges' => 'ApiQueryRecentChanges',
- 'search' => 'ApiQuerySearch',
- 'templates' => 'ApiQueryLinks',
- 'watchlist' => 'ApiQueryWatchlist',
- 'watchlistraw' => 'ApiQueryWatchlistRaw',
- );
-
/**
* @var ApiPageSet
*/
$this->mModuleMgr->addModules( self::$QueryMetaModules, 'meta' );
$this->mModuleMgr->addModules( $wgAPIMetaModules, 'meta' );
- global $wgAPIGeneratorModules;
- if ( is_array( $wgAPIGeneratorModules ) ) {
- foreach ( $wgAPIGeneratorModules as $moduleName => $moduleClass ) {
- $this->mQueryGenerators[$moduleName] = $moduleClass;
- }
- }
-
// Create PageSet that will process titles/pageids/revids/generator
$this->mPageSet = new ApiPageSet( $this );
}
/**
* Get the generators array mapping module names to class names
+ * @deprecated since 1.21, list of generators is maintained by ApiPageSet
* @return array array(modulename => classname)
*/
public function getGenerators() {
- return $this->mQueryGenerators;
+ wfDeprecated( __METHOD__, '1.21' );
+ $gens = array();
+ foreach ( $this->mModuleMgr->getNamesWithClasses() as $name => $class ) {
+ if ( is_subclass_of( $class, 'ApiQueryGeneratorBase' ) ) {
+ $gens[$name] = $class;
+ }
+ }
+ return $gens;
}
/**
'exportnowrap' => false,
'iwurl' => false,
);
- if( $flags ) {
+ if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
}
return $result;
+++ /dev/null
-<?php
-
-/**
- * @group API
- */
-class ApiGeneratorTest extends MediaWikiTestCase {
-
- /**
- * Helper to easily get an ApiQuery object instance
- */
- function getApiQuery() {
- // Initialize an ApiQuery object to play with
- $main = new ApiMain( new FauxRequest() );
- return new ApiQuery( $main, 'foo', 'bar' );
- }
-
- /**
- * Test whether all registered query modules which are subclasses of
- * ApiQueryGeneratorBase are listed as being a generator. Registration is
- * done:
- * - for core: add it to ApiQuery::$mQueryGenerators
- * - for extension: by adding to $wgAPIGeneratorModules
- *
- * @dataProvider provideApiquerygeneratorbaseChilds
- */
- public function testApiquerygeneatorbaseModulesListedAsGenerators(
- $moduleName, $moduleClass
- ) {
- $generators = $this->getApiQuery()->getGenerators();
- $this->assertArrayHasKey( $moduleName, $generators,
- "API module '$moduleName' of class '$moduleClass' (an ApiQueryGeneratorBase subclass) must be listed in ApiQuery::\$mQueryGenerators or added to \$wgAPIGeneratorModules."
- );
- }
-
- /**
- * Returns API modules which are subclassing ApiQueryGeneratorBase.
- * Case format is:
- * (moduleName, moduleClass)
- */
- public function provideApiquerygeneratorbaseChilds() {
- $cases = array();
- $modules = $this->getApiQuery()->getModuleManager()->getNamesWithClasses();
- foreach ( $modules as $moduleName => $moduleClass ) {
- if ( !is_subclass_of( $moduleClass, 'ApiQueryGeneratorBase' ) ) {
- continue;
- }
- $cases[] = array( $moduleName, $moduleClass );
- }
- return $cases;
- }
-
- /**
- * @dataProvider provideListedApiqueryGenerators
- */
- public function testGeneratorsAreApiquerygeneratorbaseSubclasses(
- $generatorName, $generatorClass
- ) {
- $modules = $this->getApiQuery()->getModuleManager()->getNamesWithClasses();
- $this->assertArrayHasKey( $generatorName, $modules,
- "Class '$generatorClass' of generator '$generatorName' must be a subclass of 'ApiQueryGeneratorBase'. Listed either in ApiQuery::\$mQueryGenerators or in \$wgAPIGeneratorModules."
- );
-
- }
-
- /**
- * Return ApiQuery generators, either listed in ApiQuery or registered
- * via wgAPIGeneratorModules.
- * Case format is:
- * (moduleName, $moduleClass).
- */
- public function provideListedApiqueryGenerators() {
- $cases = array();
- $generators = $this->getApiQuery()->getGenerators();
- foreach ( $generators as $generatorName => $generatorClass ) {
- $cases[] = array( $generatorName, $generatorClass );
- }
- return $cases;
- }
-
-}