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