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