MediaWiki  REL1_21
ApiHelp.php
Go to the documentation of this file.
00001 <?php
00032 class ApiHelp extends ApiBase {
00033 
00037         public function execute() {
00038                 // Get parameters
00039                 $params = $this->extractRequestParams();
00040 
00041                 if ( !isset( $params['modules'] ) && !isset( $params['querymodules'] ) ) {
00042                         $this->dieUsage( '', 'help' );
00043                 }
00044 
00045                 $this->getMain()->setHelp();
00046                 $result = $this->getResult();
00047 
00048                 if ( is_array( $params['modules'] ) ) {
00049                         $modules = $params['modules'];
00050                 } else {
00051                         $modules = array();
00052                 }
00053 
00054                 if ( is_array( $params['querymodules'] ) ) {
00055                         $queryModules = $params['querymodules'];
00056                         foreach ( $queryModules as $m ) {
00057                                 $modules[] = 'query+' . $m;
00058                         }
00059                 } else {
00060                         $queryModules = array();
00061                 }
00062 
00063                 $r = array();
00064                 foreach ( $modules as $m ) {
00065                         // sub-modules could be given in the form of "name[+name[+name...]]"
00066                         $subNames = explode( '+', $m );
00067                         if ( count( $subNames ) === 1 ) {
00068                                 // In case the '+' was typed into URL, it resolves as a space
00069                                 $subNames = explode( ' ', $m );
00070                         }
00071                         $module = $this->getMain();
00072                         for ( $i = 0; $i < count( $subNames ); $i++ ) {
00073                                 $subs = $module->getModuleManager();
00074                                 if ( $subs === null ) {
00075                                         $module = null;
00076                                 } else {
00077                                         $module = $subs->getModule( $subNames[$i] );
00078                                 }
00079                                 if ( $module === null ) {
00080                                         if ( count( $subNames ) === 2
00081                                                         && $i === 1
00082                                                         && $subNames[0] === 'query'
00083                                                         && in_array( $subNames[1], $queryModules )
00084                                         ) {
00085                                                 // Legacy: This is one of the renamed 'querymodule=...' parameters,
00086                                                 // do not use '+' notation in the output, use submodule's name instead.
00087                                                 $name = $subNames[1];
00088                                         } else {
00089                                                 $name = implode( '+', array_slice( $subNames, 0, $i + 1 ) );
00090                                         }
00091                                         $r[] = array( 'name' => $name, 'missing' => '' );
00092                                         break;
00093                                 } else {
00094                                         $type = $subs->getModuleGroup( $subNames[$i] );
00095                                 }
00096                         }
00097                         if ( $module !== null ) {
00098                                 $r[] = $this->buildModuleHelp( $module, $type );
00099                         }
00100                 }
00101 
00102                 $result->setIndexedTagName( $r, 'module' );
00103                 $result->addValue( null, $this->getModuleName(), $r );
00104         }
00105 
00111         private function buildModuleHelp( $module, $type ) {
00112                 $msg = ApiMain::makeHelpMsgHeader( $module, $type );
00113 
00114                 $msg2 = $module->makeHelpMsg();
00115                 if ( $msg2 !== false ) {
00116                         $msg .= $msg2;
00117                 }
00118 
00119                 return $msg;
00120         }
00121 
00122         public function shouldCheckMaxlag() {
00123                 return false;
00124         }
00125 
00126         public function isReadMode() {
00127                 return false;
00128         }
00129 
00130         public function getAllowedParams() {
00131                 return array(
00132                         'modules' => array(
00133                                 ApiBase::PARAM_ISMULTI => true
00134                         ),
00135                         'querymodules' => array(
00136                                 ApiBase::PARAM_ISMULTI => true,
00137                                 ApiBase::PARAM_DEPRECATED => true
00138                         ),
00139                 );
00140         }
00141 
00142         public function getParamDescription() {
00143                 return array(
00144                         'modules' => 'List of module names (value of the action= parameter). Can specify submodules with a \'+\'',
00145                         'querymodules' => 'Use modules=query+value instead. List of query module names (value of prop=, meta= or list= parameter)',
00146                 );
00147         }
00148 
00149         public function getDescription() {
00150                 return 'Display this help screen. Or the help screen for the specified module';
00151         }
00152 
00153         public function getExamples() {
00154                 return array(
00155                         'api.php?action=help' => 'Whole help page',
00156                         'api.php?action=help&modules=protect' => 'Module (action) help page',
00157                         'api.php?action=help&modules=query+categorymembers' => 'Help for the query/categorymembers module',
00158                         'api.php?action=help&modules=login|query+info' => 'Help for the login and query/info modules',
00159                 );
00160         }
00161 
00162         public function getHelpUrls() {
00163                 return array(
00164                         'https://www.mediawiki.org/wiki/API:Main_page',
00165                         'https://www.mediawiki.org/wiki/API:FAQ',
00166                         'https://www.mediawiki.org/wiki/API:Quick_start_guide',
00167                 );
00168         }
00169 }