X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/maintenance/updateExtensionJsonSchema.php diff --git a/maintenance/updateExtensionJsonSchema.php b/maintenance/updateExtensionJsonSchema.php new file mode 100644 index 00000000..427769f1 --- /dev/null +++ b/maintenance/updateExtensionJsonSchema.php @@ -0,0 +1,69 @@ +addDescription( 'Updates extension.json files to the latest manifest_version' ); + $this->addArg( 'path', 'Location to the extension.json or skin.json you wish to convert', + /* $required = */ true ); + } + + public function execute() { + $filename = $this->getArg( 0 ); + if ( !is_readable( $filename ) ) { + $this->error( "Error: Unable to read $filename", 1 ); + } + + $json = FormatJson::decode( file_get_contents( $filename ), true ); + if ( $json === null ) { + $this->error( "Error: Invalid JSON", 1 ); + } + + if ( !isset( $json['manifest_version'] ) ) { + $json['manifest_version'] = 1; + } + + if ( $json['manifest_version'] == ExtensionRegistry::MANIFEST_VERSION ) { + $this->output( "Already at the latest version: {$json['manifest_version']}\n" ); + return; + } + + while ( $json['manifest_version'] !== ExtensionRegistry::MANIFEST_VERSION ) { + $json['manifest_version'] += 1; + $func = "updateTo{$json['manifest_version']}"; + $this->$func( $json ); + } + + file_put_contents( $filename, FormatJson::encode( $json, "\t", FormatJson::ALL_OK ) . "\n" ); + $this->output( "Updated to {$json['manifest_version']}...\n" ); + } + + protected function updateTo2( &$json ) { + if ( isset( $json['config'] ) ) { + $config = $json['config']; + $json['config'] = []; + if ( isset( $config['_prefix'] ) ) { + $json = wfArrayInsertAfter( $json, [ + 'config_prefix' => $config['_prefix'] + ], 'config' ); + unset( $config['_prefix'] ); + } + + foreach ( $config as $name => $value ) { + if ( $name[0] !== '@' ) { + $json['config'][$name] = [ 'value' => $value ]; + if ( isset( $value[ExtensionRegistry::MERGE_STRATEGY] ) ) { + $json['config'][$name]['merge_strategy'] = $value[ExtensionRegistry::MERGE_STRATEGY]; + unset( $value[ExtensionRegistry::MERGE_STRATEGY] ); + } + } + } + } + } +} + +$maintClass = 'UpdateExtensionJsonSchema'; +require_once RUN_MAINTENANCE_IF_MAIN;