X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiParamInfo.php;h=dffce5bec0b2a2e4af0a8095b48703e09de0fd2c;hb=8f390bcfac38ec47e8a1068ea016e5c654bf7be9;hp=3ad14ab8062b301a5f2dbbdd0d31ef0152268122;hpb=324e642c2c843157d9be4d553827a3882a7977e8;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiParamInfo.php b/includes/api/ApiParamInfo.php index 3ad14ab806..dffce5bec0 100644 --- a/includes/api/ApiParamInfo.php +++ b/includes/api/ApiParamInfo.php @@ -24,11 +24,6 @@ * @file */ -if ( !defined( 'MEDIAWIKI' ) ) { - // Eclipse helper - will be ignored in production - require_once( "ApiBase.php" ); -} - /** * @ingroup API */ @@ -49,61 +44,66 @@ class ApiParamInfo extends ApiBase { $params = $this->extractRequestParams(); $result = $this->getResult(); - $r = array(); + $res = array(); if ( is_array( $params['modules'] ) ) { - $modArr = $this->getMain()->getModules(); - $r['modules'] = array(); - foreach ( $params['modules'] as $m ) { - if ( !isset( $modArr[$m] ) ) { - $r['modules'][] = array( 'name' => $m, 'missing' => '' ); + $modules = $this->getMain()->getModules(); + $res['modules'] = array(); + foreach ( $params['modules'] as $mod ) { + if ( !isset( $modules[$mod] ) ) { + $res['modules'][] = array( 'name' => $mod, 'missing' => '' ); continue; } - $obj = new $modArr[$m]( $this->getMain(), $m ); - $a = $this->getClassInfo( $obj ); - $a['name'] = $m; - $r['modules'][] = $a; + $obj = new $modules[$mod]( $this->getMain(), $mod ); + + $item = $this->getClassInfo( $obj ); + $item['name'] = $mod; + $res['modules'][] = $item; } - $result->setIndexedTagName( $r['modules'], 'module' ); + $result->setIndexedTagName( $res['modules'], 'module' ); } + if ( is_array( $params['querymodules'] ) ) { - $qmodArr = $this->queryObj->getModules(); - $r['querymodules'] = array(); + $queryModules = $this->queryObj->getModules(); + $res['querymodules'] = array(); foreach ( $params['querymodules'] as $qm ) { - if ( !isset( $qmodArr[$qm] ) ) { - $r['querymodules'][] = array( 'name' => $qm, 'missing' => '' ); + if ( !isset( $queryModules[$qm] ) ) { + $res['querymodules'][] = array( 'name' => $qm, 'missing' => '' ); continue; } - $obj = new $qmodArr[$qm]( $this, $qm ); - $a = $this->getClassInfo( $obj ); - $a['name'] = $qm; - $a['querytype'] = $this->queryObj->getModuleType( $qm ); - $r['querymodules'][] = $a; + $obj = new $queryModules[$qm]( $this, $qm ); + $item = $this->getClassInfo( $obj ); + $item['name'] = $qm; + $item['querytype'] = $this->queryObj->getModuleType( $qm ); + $res['querymodules'][] = $item; } - $result->setIndexedTagName( $r['querymodules'], 'module' ); + $result->setIndexedTagName( $res['querymodules'], 'module' ); } + if ( $params['mainmodule'] ) { - $r['mainmodule'] = $this->getClassInfo( $this->getMain() ); + $res['mainmodule'] = $this->getClassInfo( $this->getMain() ); } + if ( $params['pagesetmodule'] ) { $pageSet = new ApiPageSet( $this->queryObj ); - $r['pagesetmodule'] = $this->getClassInfo( $pageSet ); + $res['pagesetmodule'] = $this->getClassInfo( $pageSet ); } + if ( is_array( $params['formatmodules'] ) ) { $formats = $this->getMain()->getFormats(); - $r['formatmodules'] = array(); + $res['formatmodules'] = array(); foreach ( $params['formatmodules'] as $f ) { if ( !isset( $formats[$f] ) ) { - $r['formatmodules'][] = array( 'name' => $f, 'missing' => '' ); + $res['formatmodules'][] = array( 'name' => $f, 'missing' => '' ); continue; } $obj = new $formats[$f]( $this, $f ); - $a = $this->getClassInfo( $obj ); - $a['name'] = $f; - $r['formatmodules'][] = $a; + $item = $this->getClassInfo( $obj ); + $item['name'] = $f; + $res['formatmodules'][] = $item; } - $result->setIndexedTagName( $r['formatmodules'], 'module' ); + $result->setIndexedTagName( $res['formatmodules'], 'module' ); } - $result->addValue( null, $this->getModuleName(), $r ); + $result->addValue( null, $this->getModuleName(), $res ); } /** @@ -113,9 +113,10 @@ class ApiParamInfo extends ApiBase { function getClassInfo( $obj ) { $result = $this->getResult(); $retval['classname'] = get_class( $obj ); - $retval['description'] = implode( "\n", (array)$obj->getDescription() ); - $examples = (array)$obj->getExamples(); - $retval['examples'] = implode( "\n", $examples ); + $retval['description'] = implode( "\n", (array)$obj->getFinalDescription() ); + + $retval['examples'] = ''; + $retval['version'] = implode( "\n", (array)$obj->getVersion() ); $retval['prefix'] = $obj->getModulePrefix(); @@ -143,9 +144,31 @@ class ApiParamInfo extends ApiBase { } $result->setIndexedTagName( $retval['helpurls'], 'helpurl' ); - $retval['allexamples'] = $examples; - if ( isset( $retval['allexamples'][0] ) && $retval['allexamples'][0] === false ) { - $retval['allexamples'] = array(); + $examples = $obj->getExamples(); + $retval['allexamples'] = array(); + if ( $examples !== false ) { + if ( is_string( $examples ) ) { + $examples = array( $examples ); + } + foreach( $examples as $k => $v ) { + if ( strlen( $retval['examples'] ) ) { + $retval['examples'] .= ' '; + } + $item = array(); + if ( is_numeric( $k ) ) { + $retval['examples'] .= $v; + $result->setContent( $item, $v ); + } else { + if ( !is_array( $v ) ) { + $item['description'] = $v; + } else { + $item['description'] = implode( $v, "\n" ); + } + $retval['examples'] .= $item['description'] . ' ' . $k; + $result->setContent( $item, $k ); + } + $retval['allexamples'][] = $item; + } } $result->setIndexedTagName( $retval['allexamples'], 'example' ); @@ -228,6 +251,62 @@ class ApiParamInfo extends ApiBase { } $result->setIndexedTagName( $retval['parameters'], 'param' ); + $props = $obj->getFinalResultProperties(); + $listResult = null; + if ( $props !== false ) { + $retval['props'] = array(); + + foreach ( $props as $prop => $properties ) { + $propResult = array(); + if ( $prop == ApiBase::PROP_LIST ) { + $listResult = $properties; + continue; + } + if ( $prop != ApiBase::PROP_ROOT ) { + $propResult['name'] = $prop; + } + $propResult['properties'] = array(); + + foreach ( $properties as $name => $p ) { + $propertyResult = array(); + + $propertyResult['name'] = $name; + + if ( !is_array( $p ) ) { + $p = array( ApiBase::PROP_TYPE => $p ); + } + + $propertyResult['type'] = $p[ApiBase::PROP_TYPE]; + + if ( is_array( $propertyResult['type'] ) ) { + $propertyResult['type'] = array_values( $propertyResult['type'] ); + $result->setIndexedTagName( $propertyResult['type'], 't' ); + } + + $nullable = null; + if ( isset( $p[ApiBase::PROP_NULLABLE] ) ) { + $nullable = $p[ApiBase::PROP_NULLABLE]; + } + + if ( $nullable === true ) { + $propertyResult['nullable'] = ''; + } + + $propResult['properties'][] = $propertyResult; + } + + $result->setIndexedTagName( $propResult['properties'], 'property' ); + $retval['props'][] = $propResult; + } + + // default is true for query modules, false for other modules, overriden by ApiBase::PROP_LIST + if ( $listResult === true || ( $listResult !== false && $obj instanceof ApiQueryBase ) ) { + $retval['listresult'] = ''; + } + + $result->setIndexedTagName( $retval['props'], 'prop' ); + } + // Errors $retval['errors'] = $this->parseErrors( $obj->getPossibleErrors() ); $result->setIndexedTagName( $retval['errors'], 'error' ); @@ -240,21 +319,26 @@ class ApiParamInfo extends ApiBase { } public function getAllowedParams() { - + $modules = array_keys( $this->getMain()->getModules() ); + sort( $modules ); + $querymodules = array_keys( $this->queryObj->getModules() ); + sort( $querymodules ); + $formatmodules = array_keys( $this->getMain()->getFormats() ); + sort( $formatmodules ); return array( 'modules' => array( ApiBase::PARAM_ISMULTI => true, - ApiBase::PARAM_TYPE => array_keys( $this->getMain()->getModules() ), + ApiBase::PARAM_TYPE => $modules, ), 'querymodules' => array( ApiBase::PARAM_ISMULTI => true, - ApiBase::PARAM_TYPE => array_keys( $this->queryObj->getModules() ), + ApiBase::PARAM_TYPE => $querymodules, ), 'mainmodule' => false, 'pagesetmodule' => false, 'formatmodules' => array( ApiBase::PARAM_ISMULTI => true, - ApiBase::PARAM_TYPE => array_keys( $this->getMain()->getFormats() ), + ApiBase::PARAM_TYPE => $formatmodules, ) ); } @@ -280,7 +364,7 @@ class ApiParamInfo extends ApiBase { } public function getHelpUrls() { - return 'http://www.mediawiki.org/wiki/API:Parameter_information'; + return 'https://www.mediawiki.org/wiki/API:Parameter_information'; } public function getVersion() {