[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> getConfiguration.php (source)

   1  <?php
   2  /**
   3   * Print serialized output of MediaWiki config vars.
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the GNU General Public License as published by
   7   * the Free Software Foundation; either version 2 of the License, or
   8   * (at your option) any later version.
   9   *
  10   * This program is distributed in the hope that it will be useful,
  11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13   * GNU General Public License for more details.
  14   *
  15   * You should have received a copy of the GNU General Public License along
  16   * with this program; if not, write to the Free Software Foundation, Inc.,
  17   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18   * http://www.gnu.org/copyleft/gpl.html
  19   *
  20   * @file
  21   * @ingroup Maintenance
  22   * @author Tim Starling
  23   * @author Antoine Musso <[email protected]>
  24   */
  25  
  26  require_once  __DIR__ . '/Maintenance.php';
  27  
  28  /**
  29   * Print serialized output of MediaWiki config vars
  30   *
  31   * @ingroup Maintenance
  32   */
  33  class GetConfiguration extends Maintenance {
  34  
  35      protected $regex = null;
  36  
  37      protected $settings_list = array();
  38  
  39      /**
  40       * List of format output internally supported.
  41       * Each item MUST be lower case.
  42       */
  43      protected static $outFormats = array(
  44          'json',
  45          'php',
  46          'serialize',
  47          'vardump',
  48      );
  49  
  50  	public function __construct() {
  51          parent::__construct();
  52          $this->mDescription = "Get serialized MediaWiki site configuration";
  53          $this->addOption( 'regex', 'regex to filter variables with', false, true );
  54          $this->addOption( 'iregex', 'same as --regex but case insensitive', false, true );
  55          $this->addOption( 'settings', 'Space-separated list of wg* variables', false, true );
  56          $this->addOption( 'format', join( ', ', self::$outFormats ), false, true );
  57      }
  58  
  59  	protected function validateParamsAndArgs() {
  60          $error_out = false;
  61  
  62          # Get the format and make sure it is set to a valid default value
  63          $format = strtolower( $this->getOption( 'format', 'PHP' ) );
  64  
  65          $validFormat = in_array( $format, self::$outFormats );
  66          if ( !$validFormat ) {
  67              $this->error( "--format set to an unrecognized format", 0 );
  68              $error_out = true;
  69          }
  70  
  71          if ( $this->getOption( 'regex' ) && $this->getOption( 'iregex' ) ) {
  72              $this->error( "Can only use either --regex or --iregex" );
  73              $error_out = true;
  74          }
  75  
  76          parent::validateParamsAndArgs();
  77  
  78          if ( $error_out ) {
  79              # Force help and quit
  80              $this->maybeHelp( true );
  81          }
  82      }
  83  
  84      /**
  85       * finalSetup() since we need MWException
  86       */
  87  	public function finalSetup() {
  88          parent::finalSetup();
  89  
  90          $this->regex = $this->getOption( 'regex' ) ?: $this->getOption( 'iregex' );
  91          if ( $this->regex ) {
  92              $this->regex = '/' . $this->regex . '/';
  93              if ( $this->hasOption( 'iregex' ) ) {
  94                  $this->regex .= 'i'; # case insensitive regex
  95              }
  96          }
  97  
  98          if ( $this->hasOption( 'settings' ) ) {
  99              $this->settings_list = explode( ' ', $this->getOption( 'settings' ) );
 100              # Values validation
 101              foreach ( $this->settings_list as $name ) {
 102                  if ( !preg_match( '/^wg[A-Z]/', $name ) ) {
 103                      throw new MWException( "Variable '$name' does start with 'wg'." );
 104                  } elseif ( !isset( $GLOBALS[$name] ) ) {
 105                      throw new MWException( "Variable '$name' is not set." );
 106                  } elseif ( !$this->isAllowedVariable( $GLOBALS[$name] ) ) {
 107                      throw new MWException( "Variable '$name' includes non-array, non-scalar, items." );
 108                  }
 109              }
 110          }
 111      }
 112  
 113  	public function execute() {
 114          // Settings we will display
 115          $res = array();
 116  
 117          # Sane default: dump any wg / wmg variable
 118          if ( !$this->regex && !$this->getOption( 'settings' ) ) {
 119              $this->regex = '/^wm?g/';
 120          }
 121  
 122          # Filter out globals based on the regex
 123          if ( $this->regex ) {
 124              $res = array();
 125              foreach ( $GLOBALS as $name => $value ) {
 126                  if ( preg_match( $this->regex, $name ) ) {
 127                      $res[$name] = $value;
 128                  }
 129              }
 130          }
 131  
 132          # Explicitly dumps a list of provided global names
 133          if ( $this->settings_list ) {
 134              foreach ( $this->settings_list as $name ) {
 135                  $res[$name] = $GLOBALS[$name];
 136              }
 137          }
 138  
 139          ksort( $res );
 140  
 141          $out = null;
 142          switch ( strtolower( $this->getOption( 'format' ) ) ) {
 143              case 'serialize':
 144              case 'php':
 145                  $out = serialize( $res );
 146                  break;
 147              case 'vardump':
 148                  $out = $this->formatVarDump( $res );
 149                  break;
 150              case 'json':
 151                  $out = FormatJson::encode( $res );
 152                  break;
 153              default:
 154                  throw new MWException( "Invalid serialization format given." );
 155          }
 156          if ( !is_string( $out ) ) {
 157              throw new MWException( "Failed to serialize the requested settings." );
 158          }
 159  
 160          if ( $out ) {
 161              $this->output( $out . "\n" );
 162          }
 163      }
 164  
 165  	protected function formatVarDump( $res ) {
 166          $ret = '';
 167          foreach ( $res as $key => $value ) {
 168              ob_start(); # intercept var_dump() output
 169              print "\${$key} = ";
 170              var_dump( $value );
 171              # grab var_dump() output and discard it from the output buffer
 172              $ret .= trim( ob_get_clean() ) . ";\n";
 173          }
 174  
 175          return trim( $ret, "\n" );
 176      }
 177  
 178  	private function isAllowedVariable( $value ) {
 179          if ( is_array( $value ) ) {
 180              foreach ( $value as $k => $v ) {
 181                  if ( !$this->isAllowedVariable( $v ) ) {
 182                      return false;
 183                  }
 184              }
 185  
 186              return true;
 187          } elseif ( is_scalar( $value ) ) {
 188              return true;
 189          }
 190  
 191          return false;
 192      }
 193  }
 194  
 195  $maintClass = "GetConfiguration";
 196  require_once RUN_MAINTENANCE_IF_MAIN;


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1