43 $this->helpFormat = $params[
'helpformat'];
48 if ( is_array( $params[
'modules'] ) ) {
50 foreach ( $params[
'modules'] as
$path ) {
54 if ( substr(
$path, -2 ) ===
'+*' || substr(
$path, -2 ) ===
' *' ) {
58 } elseif ( substr(
$path, -3 ) ===
'+**' || substr(
$path, -3 ) ===
' **' ) {
79 $this->
addWarning( [
'apierror-badmodule-nosubmodules', $path ],
'badmodule' );
89 if ( is_array( $params[
'querymodules'] ) ) {
90 $queryModules = $params[
'querymodules'];
91 foreach ( $queryModules as $m ) {
98 if ( is_array( $params[
'formatmodules'] ) ) {
99 $formatModules = $params[
'formatmodules'];
100 foreach ( $formatModules as $m ) {
124 if ( $module->getParent() && $module->getParent()->getModuleName() ==
'query' &&
125 in_array( $module->getModuleName(), $queryModules )
128 $key =
'querymodules';
130 if ( in_array( $module->getModuleName(), $formatModules ) ) {
131 $key =
'formatmodules';
136 $item[
'querytype'] = $item[
'group'];
138 $res[$key][] = $item;
142 $result->addValue( [ $this->
getModuleName() ],
'helpformat', $this->helpFormat );
144 foreach (
$res as $key => $stuff ) {
145 ApiResult::setIndexedTagName(
$res[$key],
'module' );
148 if ( $params[
'mainmodule'] ) {
152 if ( $params[
'pagesetmodule'] ) {
155 unset(
$res[
'pagesetmodule'][
'name'] );
156 unset(
$res[
'pagesetmodule'][
'path'] );
157 unset(
$res[
'pagesetmodule'][
'group'] );
193 switch ( $this->helpFormat ) {
199 foreach ( $msgs as $m ) {
200 $ret[] = $m->setContext( $this->context )->text();
202 $res[$key] = implode(
"\n\n", $ret );
204 $res[$key] = preg_replace(
'!^(([*#:;])[^\n]*)\n\n(?=\2)!m',
"$1\n",
$res[$key] );
210 foreach ( $msgs as $m ) {
211 $ret[] = $m->setContext( $this->context )->parseAsBlock();
213 $ret = implode(
"\n", $ret );
215 $ret = preg_replace(
'!\s*</([oud]l)>\s*<\1>\s*!',
"\n", $ret );
217 $res[$key] = Parser::stripOuterParagraph( $ret );
222 foreach ( $msgs as $m ) {
224 'key' => $m->getKey(),
225 'params' => $m->getParams(),
227 ApiResult::setIndexedTagName( $a[
'params'],
'param' );
229 $a[
'forvalue'] = $m->getParamValue();
233 ApiResult::setIndexedTagName(
$res[$key],
'msg' );
244 $path = $module->getModulePath();
245 $paramValidator = $module->getMain()->getParamValidator();
247 $ret[
'name'] = $module->getModuleName();
248 $ret[
'classname'] = get_class( $module );
249 $ret[
'path'] =
$path;
250 if ( !$module->isMain() ) {
251 $ret[
'group'] = $module->getParent()->getModuleManager()->getModuleGroup(
252 $module->getModuleName()
255 $ret[
'prefix'] = $module->getModulePrefix();
257 $sourceInfo = $module->getModuleSourceInfo();
259 $ret[
'source'] = $sourceInfo[
'name'];
260 if ( isset( $sourceInfo[
'namemsg'] ) ) {
261 $ret[
'sourcename'] = $this->context->msg( $sourceInfo[
'namemsg'] )->text();
263 $ret[
'sourcename'] = $ret[
'source'];
267 if ( isset( $sourceInfo[
'license-name'] ) ) {
268 $ret[
'licensetag'] = $sourceInfo[
'license-name'];
269 $ret[
'licenselink'] = (string)$link;
270 } elseif ( ExtensionInfo::getLicenseFileNames( dirname( $sourceInfo[
'path'] ) ) ) {
271 $ret[
'licenselink'] = (string)$link;
277 foreach ( $module->getHelpFlags() as $flag ) {
281 $ret[
'helpurls'] = (array)$module->getHelpUrls();
282 if ( isset( $ret[
'helpurls'][0] ) && $ret[
'helpurls'][0] === false ) {
283 $ret[
'helpurls'] = [];
285 ApiResult::setIndexedTagName( $ret[
'helpurls'],
'helpurl' );
287 if ( $this->helpFormat !==
'none' ) {
288 $ret[
'examples'] = [];
289 $examples = $module->getExamplesMessages();
290 foreach ( $examples as $qs => $msg ) {
295 $module->getModulePrefix(),
296 $module->getModuleName(),
297 $module->getModulePath()
300 if ( isset( $item[
'description'] ) ) {
301 if ( is_array( $item[
'description'] ) ) {
302 $item[
'description'] = $item[
'description'][0];
304 ApiResult::setSubelementsList( $item,
'description' );
307 $ret[
'examples'][] = $item;
309 ApiResult::setIndexedTagName( $ret[
'examples'],
'example' );
312 $ret[
'parameters'] = [];
313 $ret[
'templatedparameters'] = [];
315 $paramDesc = $module->getFinalParamDescription();
317 foreach ( $params as $name => $settings ) {
318 $settings = $paramValidator->normalizeSettings( $settings );
327 ApiResult::setIndexedTagName( $item[
'templatevars'],
'var' );
330 if ( isset( $paramDesc[$name] ) ) {
334 foreach ( $paramValidator->getParamInfo( $module, $name, $settings, [] ) as $k => $v ) {
338 if ( $name ===
'token' && $module->needsToken() ) {
339 $item[
'tokentype'] = $module->needsToken();
342 if ( $item[
'type'] ===
'NULL' ) {
344 $item[
'type'] =
'string';
345 } elseif ( is_array( $item[
'type'] ) ) {
347 ApiResult::setIndexedTagName( $item[
'type'],
't' );
353 $tag = array_shift( $i );
358 $info[
'values'] = $i;
359 ApiResult::setIndexedTagName( $info[
'values'],
'v' );
362 $this->context->msg(
"apihelp-{$path}-paraminfo-{$tag}" )
363 ->numParams( count( $i ) )
364 ->params( $this->context->getLanguage()->commaList( $i ) )
365 ->params( $module->getModulePrefix() )
367 ApiResult::setSubelementsList( $info,
'text' );
368 $item[
'info'][] = $info;
370 ApiResult::setIndexedTagName( $item[
'info'],
'i' );
374 $ret[$key][] = $item;
376 ApiResult::setIndexedTagName( $ret[
'parameters'],
'param' );
377 ApiResult::setIndexedTagName( $ret[
'templatedparameters'],
'param' );
379 $dynamicParams = $module->dynamicParameterDocumentation();
380 if ( $dynamicParams !==
null ) {
381 if ( $this->helpFormat ===
'none' ) {
382 $ret[
'dynamicparameters'] =
true;
385 $module->getModulePrefix(),
386 $module->getModuleName(),
387 $module->getModulePath()