MediaWiki
REL1_21
|
00001 <?php 00025 # Start from scratch 00026 define( 'MW_NO_EXTENSION_MESSAGES', 1 ); 00027 00028 require_once( __DIR__ . '/Maintenance.php' ); 00029 $maintClass = 'MergeMessageFileList'; 00030 $mmfl = false; 00031 00038 class MergeMessageFileList extends Maintenance { 00039 00040 function __construct() { 00041 parent::__construct(); 00042 $this->addOption( 'list-file', 'A file containing a list of extension setup files, one per line.', true, true ); 00043 $this->addOption( 'extensions-dir', 'Path where extensions can be found.', false, true ); 00044 $this->addOption( 'output', 'Send output to this file (omit for stdout)', false, true ); 00045 $this->mDescription = 'Merge $wgExtensionMessagesFiles from various extensions to produce a ' . 00046 'single array containing all message files.'; 00047 } 00048 00049 public function execute() { 00050 global $mmfl; 00051 00052 # Add setup files contained in file passed to --list-file 00053 $lines = file( $this->getOption( 'list-file' ) ); 00054 if ( $lines === false ) { 00055 $this->error( 'Unable to open list file.' ); 00056 } 00057 $mmfl = array( 'setupFiles' => array_map( 'trim', $lines ) ); 00058 00059 # Now find out files in a directory 00060 $hasError = false; 00061 if ( $this->hasOption( 'extensions-dir' ) ) { 00062 $extdir = $this->getOption( 'extensions-dir' ); 00063 $entries = scandir( $extdir ); 00064 foreach( $entries as $extname ) { 00065 if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) { 00066 continue; 00067 } 00068 $extfile = "{$extdir}/{$extname}/{$extname}.php"; 00069 if ( file_exists( $extfile ) ) { 00070 $mmfl['setupFiles'][] = $extfile; 00071 } else { 00072 $hasError = true; 00073 $this->error( "Extension {$extname} in {$extdir} lacks expected {$extname}.php" ); 00074 } 00075 } 00076 } 00077 00078 if ( $hasError ) { 00079 $this->error( "Some files are missing (see above). Giving up.", 1 ); 00080 } 00081 00082 if ( $this->hasOption( 'output' ) ) { 00083 $mmfl['output'] = $this->getOption( 'output' ); 00084 } 00085 if ( $this->hasOption( 'quiet' ) ) { 00086 $mmfl['quiet'] = true; 00087 } 00088 } 00089 } 00090 00091 require_once( RUN_MAINTENANCE_IF_MAIN ); 00092 00093 foreach ( $mmfl['setupFiles'] as $fileName ) { 00094 if ( strval( $fileName ) === '' ) { 00095 continue; 00096 } 00097 $fileName = str_replace( '$IP', $IP, $fileName ); 00098 if ( empty( $mmfl['quiet'] ) ) { 00099 fwrite( STDERR, "Loading data from $fileName\n" ); 00100 } 00101 include_once( $fileName ); 00102 } 00103 fwrite( STDERR, "\n" ); 00104 $s = 00105 "<" . "?php\n" . 00106 "## This file is generated by mergeMessageFileList.php. Do not edit it directly.\n\n" . 00107 "if ( defined( 'MW_NO_EXTENSION_MESSAGES' ) ) return;\n\n" . 00108 '$wgExtensionMessagesFiles = ' . var_export( $wgExtensionMessagesFiles, true ) . ";\n\n"; 00109 00110 $dirs = array( 00111 $IP, 00112 dirname( __DIR__ ), 00113 realpath( $IP ) 00114 ); 00115 00116 foreach ( $dirs as $dir ) { 00117 $s = preg_replace( 00118 "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", 00119 '"$IP\1"', 00120 $s ); 00121 } 00122 00123 if ( isset( $mmfl['output'] ) ) { 00124 file_put_contents( $mmfl['output'], $s ); 00125 } else { 00126 echo $s; 00127 }