00001 <?php
00002
00003 # Start from scratch
00004 define( 'MW_NO_EXTENSION_MESSAGES', 1 );
00005
00006 require_once( dirname( __FILE__ ).'/Maintenance.php' );
00007 $maintClass = 'MergeMessageFileList';
00008 $mmfl = false;
00009 class MergeMessageFileList extends Maintenance {
00010
00011 function __construct() {
00012 $this->addOption( 'list-file', 'A file containing a list of extension setup files, one per line.', false, true );
00013 $this->addOption( 'output', 'Send output to this file (omit for stdout)', false, true );
00014 $this->mDescription = 'Merge $wgExtensionMessagesFiles from various extensions to produce a ' .
00015 'single array containing all message files.';
00016 }
00017
00018 public function execute() {
00019 global $IP, $mmfl;
00020 if ( !$this->hasOption( 'list-file' ) ) {
00021 $this->error( 'The --list-file option must be specified.' );
00022 return;
00023 }
00024
00025 $lines = file( $this->getOption( 'list-file' ) );
00026 if ( $lines === false ) {
00027 $this->error( 'Unable to open list file.' );
00028 }
00029 $mmfl = array( 'setupFiles' => array_map( 'trim', $lines ) );
00030 if ( $this->hasOption( 'output' ) ) {
00031 $mmfl['output'] = $this->getOption( 'output' );
00032 }
00033 }
00034 }
00035
00036 require_once( DO_MAINTENANCE );
00037
00038 foreach ( $mmfl['setupFiles'] as $fileName ) {
00039 if ( strval( $fileName ) === '' ) {
00040 continue;
00041 }
00042 $fileName = str_replace( '$IP', $IP, $fileName );
00043 fwrite( STDERR, "Loading data from $fileName\n" );
00044 include_once( $fileName );
00045 }
00046 fwrite( STDERR, "\n" );
00047 $s =
00048 "<" . "?php\n" .
00049 "## This file is generated by mergeMessageFileList.php. Do not edit it directly.\n\n" .
00050 "if ( defined( 'MW_NO_EXTENSION_MESSAGES' ) ) return;\n\n" .
00051 '$wgExtensionMessagesFiles = ' . var_export( $wgExtensionMessagesFiles, true ) . ";\n\n" .
00052 '$wgExtensionAliasesFiles = ' . var_export( $wgExtensionAliasesFiles, true ) . ";\n";
00053
00054 $dirs = array(
00055 $IP,
00056 dirname( dirname( __FILE__ ) ),
00057 realpath( $IP )
00058 );
00059
00060 foreach ( $dirs as $dir ) {
00061 $s = preg_replace(
00062 "/'" . preg_quote( $dir, '/' ) . "([^']*)'/",
00063 '"$IP\1"',
00064 $s );
00065 }
00066
00067 if ( isset( $mmfl['output'] ) ) {
00068 file_put_contents( $mmfl['output'], $s );
00069 } else {
00070 echo $s;
00071 }
00072