34 public function checkSettings(
string $name, $settings, array $options, array $ret ): array {
36 if ( !is_array( $map ) ) {
43 $ret = parent::checkSettings( $name, $settings, $options, $ret );
45 $ret[
'allowedKeys'] = array_merge( $ret[
'allowedKeys'], [
46 self::PARAM_SUBMODULE_MAP, self::PARAM_SUBMODULE_PARAM_PREFIX,
49 if ( is_array( $map ) ) {
50 $module = $options[
'module'];
51 foreach ( $map as $k => $v ) {
52 if ( !is_string( $v ) ) {
53 $ret[
'issues'][] =
'Values for PARAM_SUBMODULE_MAP must be strings, '
54 .
"but value for \"$k\" is " . gettype( $v );
59 $submod = $module->getModuleFromPath( $v );
60 }
catch ( ApiUsageException ) {
64 $ret[
'issues'][] =
"PARAM_SUBMODULE_MAP contains \"$v\", which is not a valid module path";
69 if ( !is_string( $settings[self::PARAM_SUBMODULE_PARAM_PREFIX] ??
'' ) ) {
71 .
'a string, got ' . gettype( $settings[self::PARAM_SUBMODULE_PARAM_PREFIX] );
78 public function getEnumValues( $name, array $settings, array $options ) {
79 if ( isset( $settings[self::PARAM_SUBMODULE_MAP] ) ) {
80 $modules = array_keys( $settings[self::PARAM_SUBMODULE_MAP] );
82 $modules = $options[
'module']->getModuleManager()->getNames( $name );
89 public function getParamInfo( $name, array $settings, array $options ) {
90 $info = parent::getParamInfo( $name, $settings, $options );
92 $module = $options[
'module'];
94 if ( isset( $settings[self::PARAM_SUBMODULE_MAP] ) ) {
95 $info[
'type'] = array_keys( $settings[self::PARAM_SUBMODULE_MAP] );
96 $info[
'submodules'] = $settings[self::PARAM_SUBMODULE_MAP];
98 $info[
'type'] = $module->getModuleManager()->getNames( $name );
99 $prefix = $module->isMain() ?
'' : ( $module->getModulePath() .
'+' );
100 $info[
'submodules'] = [];
101 foreach ( $info[
'type'] as $v ) {
102 $info[
'submodules'][$v] = $prefix . $v;
105 if ( isset( $settings[self::PARAM_SUBMODULE_PARAM_PREFIX] ) ) {
106 $info[
'submoduleparamprefix'] = $settings[self::PARAM_SUBMODULE_PARAM_PREFIX];
109 $submoduleFlags = [];
110 $submoduleNames = [];
111 foreach ( $info[
'submodules'] as $v => $submodulePath ) {
113 $submod = $module->getModuleFromPath( $submodulePath );
115 $submoduleFlags[] = 0;
116 $submoduleNames[] = $v;
120 if ( $submod && $submod->isDeprecated() ) {
121 $info[
'deprecatedvalues'][] = $v;
124 if ( $submod && $submod->isInternal() ) {
125 $info[
'internalvalues'][] = $v;
128 $submoduleFlags[] = $flags;
129 $submoduleNames[] = $v;
132 array_multisort( $submoduleFlags, $submoduleNames, $info[
'submodules'], $info[
'type'] );
133 if ( isset( $info[
'deprecatedvalues'] ) ) {
134 sort( $info[
'deprecatedvalues'] );
136 if ( isset( $info[
'internalvalues'] ) ) {
137 sort( $info[
'internalvalues'] );
143 private function getSubmoduleMap(
ApiBase $module,
string $name, array $settings ): array {
144 if ( isset( $settings[self::PARAM_SUBMODULE_MAP] ) ) {
145 $map = $settings[self::PARAM_SUBMODULE_MAP];
147 $prefix = $module->isMain() ?
'' : ( $module->getModulePath() .
'+' );
149 foreach ( $module->getModuleManager()->getNames( $name ) as $submoduleName ) {
150 $map[$submoduleName] = $prefix . $submoduleName;
158 string $name, array $values, array $settings, array $options
160 $module = $options[
'module'];
161 $map = $this->getSubmoduleMap( $module, $name, $settings );
163 $submoduleFlags = [];
164 foreach ( $values as $k => $v ) {
167 $submod = isset( $map[$v] ) ? $module->getModuleFromPath( $map[$v] ) :
null;
168 if ( $submod && $submod->isDeprecated() ) {
171 if ( $submod && $submod->isInternal() ) {
174 }
catch ( ApiUsageException ) {
177 $submoduleFlags[$k] = $flags;
179 array_multisort( $submoduleFlags, $values, SORT_NATURAL );
186 $module = $options[
'module'];
187 $map = $this->getSubmoduleMap( $module, $name, $settings );
188 $defaultAttrs = [
'dir' =>
'ltr',
'lang' =>
'en' ];
191 $submoduleFlags = [];
192 $submoduleNames = [];
193 foreach ( $map as $v => $m ) {
194 $attrs = $defaultAttrs;
197 $submod = $module->getModuleFromPath( $m );
198 if ( $submod && $submod->isDeprecated() ) {
199 $attrs[
'class'][] =
'apihelp-deprecated-value';
202 if ( $submod && $submod->isInternal() ) {
203 $attrs[
'class'][] =
'apihelp-internal-value';
209 $v = Html::element(
'span', $attrs, $v );
210 $values[] =
"[[Special:ApiHelp/{$m}|{$v}]]";
211 $submoduleFlags[] = $flags;
212 $submoduleNames[] = $v;
215 array_multisort( $submoduleFlags, $submoduleNames, SORT_NATURAL, $values, SORT_NATURAL );
if(!defined('MW_SETUP_CALLBACK'))