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