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