57 $this->helpFormat = $params[
'helpformat'];
59 $this->context->
setUser( $this->userFactory->newAnonymous() );
62 if ( is_array( $params[
'modules'] ) ) {
64 foreach ( $params[
'modules'] as
$path ) {
68 if ( substr(
$path, -2 ) ===
'+*' || substr(
$path, -2 ) ===
' *' ) {
72 } elseif ( substr(
$path, -3 ) ===
'+**' || substr(
$path, -3 ) ===
' **' ) {
93 $this->
addWarning( [
'apierror-badmodule-nosubmodules', $path ],
'badmodule' );
103 if ( is_array( $params[
'querymodules'] ) ) {
104 $queryModules = $params[
'querymodules'];
105 foreach ( $queryModules as $m ) {
112 if ( is_array( $params[
'formatmodules'] ) ) {
113 $formatModules = $params[
'formatmodules'];
114 foreach ( $formatModules as $m ) {
138 if ( $module->getParent() && $module->getParent()->getModuleName() ==
'query' &&
139 in_array( $module->getModuleName(), $queryModules )
142 $key =
'querymodules';
144 if ( in_array( $module->getModuleName(), $formatModules ) ) {
145 $key =
'formatmodules';
150 $item[
'querytype'] = $item[
'group'];
152 $res[$key][] = $item;
156 $result->addValue( [ $this->
getModuleName() ],
'helpformat', $this->helpFormat );
158 foreach (
$res as $key => $stuff ) {
159 ApiResult::setIndexedTagName(
$res[$key],
'module' );
162 if ( $params[
'mainmodule'] ) {
166 if ( $params[
'pagesetmodule'] ) {
169 unset(
$res[
'pagesetmodule'][
'name'] );
170 unset(
$res[
'pagesetmodule'][
'path'] );
171 unset(
$res[
'pagesetmodule'][
'group'] );
258 $path = $module->getModulePath();
259 $paramValidator = $module->getMain()->getParamValidator();
261 $ret[
'name'] = $module->getModuleName();
262 $ret[
'classname'] = get_class( $module );
263 $ret[
'path'] =
$path;
264 if ( !$module->isMain() ) {
265 $ret[
'group'] = $module->getParent()->getModuleManager()->getModuleGroup(
266 $module->getModuleName()
269 $ret[
'prefix'] = $module->getModulePrefix();
271 $sourceInfo = $module->getModuleSourceInfo();
273 $ret[
'source'] = $sourceInfo[
'name'];
274 if ( isset( $sourceInfo[
'namemsg'] ) ) {
275 $ret[
'sourcename'] = $this->context->msg( $sourceInfo[
'namemsg'] )->text();
277 $ret[
'sourcename'] = $ret[
'source'];
281 if ( isset( $sourceInfo[
'license-name'] ) ) {
282 $ret[
'licensetag'] = $sourceInfo[
'license-name'];
283 $ret[
'licenselink'] = (string)$link;
284 } elseif ( ExtensionInfo::getLicenseFileNames( dirname( $sourceInfo[
'path'] ) ) ) {
285 $ret[
'licenselink'] = (string)$link;
291 foreach ( $module->getHelpFlags() as $flag ) {
295 $ret[
'helpurls'] = (array)$module->getHelpUrls();
296 if ( isset( $ret[
'helpurls'][0] ) && $ret[
'helpurls'][0] === false ) {
297 $ret[
'helpurls'] = [];
299 ApiResult::setIndexedTagName( $ret[
'helpurls'],
'helpurl' );
301 if ( $this->helpFormat !==
'none' ) {
302 $ret[
'examples'] = [];
303 $examples = $module->getExamplesMessages();
304 foreach ( $examples as $qs => $msg ) {
309 $module->getModulePrefix(),
310 $module->getModuleName(),
311 $module->getModulePath()
314 if ( isset( $item[
'description'] ) ) {
315 if ( is_array( $item[
'description'] ) ) {
316 $item[
'description'] = $item[
'description'][0];
318 ApiResult::setSubelementsList( $item,
'description' );
321 $ret[
'examples'][] = $item;
323 ApiResult::setIndexedTagName( $ret[
'examples'],
'example' );
326 $ret[
'parameters'] = [];
327 $ret[
'templatedparameters'] = [];
329 $paramDesc = $module->getFinalParamDescription();
331 foreach ( $params as $name => $settings ) {
332 $settings = $paramValidator->normalizeSettings( $settings );
341 ApiResult::setIndexedTagName( $item[
'templatevars'],
'var' );
344 if ( isset( $paramDesc[$name] ) ) {
348 foreach ( $paramValidator->getParamInfo( $module, $name, $settings, [] ) as $k => $v ) {
352 if ( $name ===
'token' && $module->needsToken() ) {
353 $item[
'tokentype'] = $module->needsToken();
356 if ( $item[
'type'] ===
'NULL' ) {
358 $item[
'type'] =
'string';
359 } elseif ( is_array( $item[
'type'] ) ) {
361 ApiResult::setIndexedTagName( $item[
'type'],
't' );
367 $tag = array_shift( $i );
372 $info[
'values'] = $i;
373 ApiResult::setIndexedTagName( $info[
'values'],
'v' );
376 $this->context->msg(
"apihelp-{$path}-paraminfo-{$tag}" )
377 ->numParams( count( $i ) )
378 ->params( $this->context->getLanguage()->commaList( $i ) )
379 ->params( $module->getModulePrefix() )
381 ApiResult::setSubelementsList( $info,
'text' );
382 $item[
'info'][] = $info;
384 ApiResult::setIndexedTagName( $item[
'info'],
'i' );
388 $ret[$key][] = $item;
390 ApiResult::setIndexedTagName( $ret[
'parameters'],
'param' );
391 ApiResult::setIndexedTagName( $ret[
'templatedparameters'],
'param' );
393 $dynamicParams = $module->dynamicParameterDocumentation();
394 if ( $dynamicParams !==
null ) {
395 if ( $this->helpFormat ===
'none' ) {
396 $ret[
'dynamicparameters'] =
true;
399 $module->getModulePrefix(),
400 $module->getModuleName(),
401 $module->getModulePath()