MediaWiki
REL1_23
|
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 }