API: Display message-per-value style help for submodule parameters
[lhc/web/wiklou.git] / includes / api / ApiParamInfo.php
index a9b3dde..4ce0e9f 100644 (file)
@@ -237,7 +237,7 @@ class ApiParamInfo extends ApiBase {
 
        /**
         * @param ApiBase $module
-        * @return ApiResult
+        * @return array
         */
        private function getModuleInfo( $module ) {
                $ret = [];
@@ -401,6 +401,25 @@ class ApiParamInfo extends ApiBase {
                                        if ( isset( $settings[ApiBase::PARAM_SUBMODULE_PARAM_PREFIX] ) ) {
                                                $item['submoduleparamprefix'] = $settings[ApiBase::PARAM_SUBMODULE_PARAM_PREFIX];
                                        }
+
+                                       $deprecatedSubmodules = [];
+                                       foreach ( $item['submodules'] as $v => $submodulePath ) {
+                                               try {
+                                                       $submod = $this->getModuleFromPath( $submodulePath );
+                                                       if ( $submod && $submod->isDeprecated() ) {
+                                                               $deprecatedSubmodules[] = $v;
+                                                       }
+                                               } catch ( ApiUsageException $ex ) {
+                                                       // Ignore
+                                               }
+                                       }
+                                       if ( $deprecatedSubmodules ) {
+                                               $item['type'] = array_merge(
+                                                       array_diff( $item['type'], $deprecatedSubmodules ),
+                                                       $deprecatedSubmodules
+                                               );
+                                               $item['deprecatedvalues'] = $deprecatedSubmodules;
+                                       }
                                } elseif ( $settings[ApiBase::PARAM_TYPE] === 'tags' ) {
                                        $item['type'] = ChangeTags::listExplicitlyDefinedTags();
                                } else {
@@ -426,6 +445,15 @@ class ApiParamInfo extends ApiBase {
                                        ( is_array( $item['type'] ) || $item['type'] === 'namespace' ) ) {
                                        $item['allspecifier'] = $allSpecifier;
                                }
+
+                               if ( $item['type'] === 'namespace' &&
+                                       isset( $settings[ApiBase::PARAM_EXTRA_NAMESPACES] ) &&
+                                       is_array( $settings[ApiBase::PARAM_EXTRA_NAMESPACES] )
+                               ) {
+                                       $item['extranamespaces'] = $settings[ApiBase::PARAM_EXTRA_NAMESPACES];
+                                       ApiResult::setArrayType( $item['extranamespaces'], 'array' );
+                                       ApiResult::setIndexedTagName( $item['extranamespaces'], 'ns' );
+                               }
                        }
                        if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
                                $item['max'] = $settings[ApiBase::PARAM_MAX];
@@ -439,6 +467,16 @@ class ApiParamInfo extends ApiBase {
                        if ( !empty( $settings[ApiBase::PARAM_RANGE_ENFORCE] ) ) {
                                $item['enforcerange'] = true;
                        }
+                       if ( !empty( $settings[ApiBase::PARAM_DEPRECATED_VALUES] ) ) {
+                               $deprecatedValues = array_keys( $settings[ApiBase::PARAM_DEPRECATED_VALUES] );
+                               if ( is_array( $item['type'] ) ) {
+                                       $deprecatedValues = array_intersect( $deprecatedValues, $item['type'] );
+                               }
+                               if ( $deprecatedValues ) {
+                                       $item['deprecatedvalues'] = array_values( $deprecatedValues );
+                                       ApiResult::setIndexedTagName( $item['deprecatedvalues'], 'v' );
+                               }
+                       }
 
                        if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
                                $item['info'] = [];
@@ -534,6 +572,6 @@ class ApiParamInfo extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Parameter_information';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Parameter_information';
        }
 }