diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2013-12-08 09:55:49 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2013-12-08 09:55:49 +0100 |
commit | 4ac9fa081a7c045f6a9f1cfc529d82423f485b2e (patch) | |
tree | af68743f2f4a47d13f2b0eb05f5c4aaf86d8ea37 /maintenance/getConfiguration.php | |
parent | af4da56f1ad4d3ef7b06557bae365da2ea27a897 (diff) |
Update to MediaWiki 1.22.0
Diffstat (limited to 'maintenance/getConfiguration.php')
-rw-r--r-- | maintenance/getConfiguration.php | 143 |
1 files changed, 124 insertions, 19 deletions
diff --git a/maintenance/getConfiguration.php b/maintenance/getConfiguration.php index 83b5b029..5a5eb587 100644 --- a/maintenance/getConfiguration.php +++ b/maintenance/getConfiguration.php @@ -1,6 +1,6 @@ <?php /** - * Print serialized output of MediaWiki config vars + * Print serialized output of MediaWiki config vars. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,10 +20,10 @@ * @file * @ingroup Maintenance * @author Tim Starling - * @author Antoine Musso + * @author Antoine Musso <hashar@free.fr> */ -require_once( __DIR__ . '/Maintenance.php' ); +require_once __DIR__ . '/Maintenance.php'; /** * Print serialized output of MediaWiki config vars @@ -31,33 +31,123 @@ require_once( __DIR__ . '/Maintenance.php' ); * @ingroup Maintenance */ class GetConfiguration extends Maintenance { + + protected $regex = null; + + protected $settings_list = array(); + + /** + * List of format output internally supported. + * Each item MUST be lower case. + */ + protected static $outFormats = array( + 'json', + 'php', + 'serialize', + 'vardump', + ); + public function __construct() { parent::__construct(); $this->mDescription = "Get serialized MediaWiki site configuration"; - $this->addOption( 'settings', 'Space-separated list of wg* variables', true, true ); - $this->addOption( 'format', 'PHP or JSON', true, true ); - $this->addOption( 'wiki', 'Wiki ID', true, true ); + $this->addOption( 'regex', 'regex to filter variables with', false, true ); + $this->addOption( 'iregex', 'same as --regex but case insensitive', false, true ); + $this->addOption( 'settings', 'Space-separated list of wg* variables', false, true ); + $this->addOption( 'format', join( ', ', self::$outFormats ), false, true ); + } + + protected function validateParamsAndArgs() { + $error_out = false; + + # Get the format and make sure it is set to a valid default value + $format = strtolower( $this->getOption( 'format', 'PHP' ) ); + + $validFormat = in_array( $format, self::$outFormats ); + if ( ! $validFormat ) { + $this->error( "--format set to an unrecognized format", 0 ); + $error_out = true; + } + + if ( $this->getOption( 'regex' ) && $this->getOption( 'iregex' ) ) { + $this->error( "Can only use either --regex or --iregex" ); + $error_out = true; + } + + parent::validateParamsAndArgs(); + + if ( $error_out ) { + # Force help and quit + $this->maybeHelp( true ); + } + } + + /** + * finalSetup() since we need MWException + */ + public function finalSetup() { + parent::finalSetup(); + + $this->regex = $this->getOption( 'regex' ) ? : $this->getOption( 'iregex' ); + if ( $this->regex ) { + $this->regex = '/' . $this->regex . '/'; + if ( $this->hasOption( 'iregex' ) ) { + $this->regex .= 'i'; # case insensitive regex + } + } + + if ( $this->hasOption( 'settings' ) ) { + $this->settings_list = explode( ' ', $this->getOption( 'settings' ) ); + # Values validation + foreach ( $this->settings_list as $name ) { + if ( !preg_match( '/^wg[A-Z]/', $name ) ) { + throw new MWException( "Variable '$name' does start with 'wg'." ); + } elseif ( !isset( $GLOBALS[$name] ) ) { + throw new MWException( "Variable '$name' is not set." ); + } elseif ( !$this->isAllowedVariable( $GLOBALS[$name] ) ) { + throw new MWException( "Variable '$name' includes non-array, non-scalar, items." ); + } + } + } } public function execute() { + // Settings we will display $res = array(); - foreach ( explode( ' ', $this->getOption( 'settings' ) ) as $name ) { - if ( !preg_match( '/^wg[A-Z]/', $name ) ) { - throw new MWException( "Variable '$name' does start with 'wg'." ); - } elseif ( !isset( $GLOBALS[$name] ) ) { - throw new MWException( "Variable '$name' is not set." ); - } elseif ( !$this->isAllowedVariable( $GLOBALS[$name] ) ) { - throw new MWException( "Variable '$name' includes non-array, non-scalar, items." ); + + # Sane default: dump any wg / wmg variable + if ( ! $this->regex && ! $this->getOption( 'settings' ) ) { + $this->regex = '/^wm?g/'; + } + + # Filter out globals based on the regex + if ( $this->regex ) { + $res = array(); + foreach ( $GLOBALS as $name => $value ) { + if ( preg_match( $this->regex, $name ) ) { + $res[$name] = $value; + } } - $res[$name] = $GLOBALS[$name]; } + # Explicitly dumps a list of provided global names + if ( $this->settings_list ) { + foreach ( $this->settings_list as $name ) { + $res[$name] = $GLOBALS[$name]; + } + } + + ksort( $res ); + $out = null; - switch( $this->getOption( 'format' ) ) { - case 'PHP': + switch ( strtolower( $this->getOption( 'format' ) ) ) { + case 'serialize': + case 'php': $out = serialize( $res ); break; - case 'JSON': + case 'vardump': + $out = $this->formatVarDump( $res ); + break; + case 'json': $out = FormatJson::encode( $res ); break; default: @@ -67,7 +157,22 @@ class GetConfiguration extends Maintenance { throw new MWException( "Failed to serialize the requested settings." ); } - $this->output( $out . "\n" ); + if ( $out ) { + $this->output( $out . "\n" ); + } + } + + protected function formatVarDump( $res ) { + $ret = ''; + foreach ( $res as $key => $value ) { + ob_start(); # intercept var_dump() output + print "\${$key} = "; + var_dump( $value ); + # grab var_dump() output and discard it from the output buffer + $ret .= trim( ob_get_clean() ) . ";\n"; + } + + return trim( $ret, "\n" ); } private function isAllowedVariable( $value ) { @@ -86,4 +191,4 @@ class GetConfiguration extends Maintenance { } $maintClass = "GetConfiguration"; -require_once( RUN_MAINTENANCE_IF_MAIN ); +require_once RUN_MAINTENANCE_IF_MAIN; |