MediaWiki
REL1_20
|
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 } 00086 } 00087 00088 require_once( RUN_MAINTENANCE_IF_MAIN ); 00089 00090 foreach ( $mmfl['setupFiles'] as $fileName ) { 00091 if ( strval( $fileName ) === '' ) { 00092 continue; 00093 } 00094 $fileName = str_replace( '$IP', $IP, $fileName ); 00095 fwrite( STDERR, "Loading data from $fileName\n" ); 00096 include_once( $fileName ); 00097 } 00098 fwrite( STDERR, "\n" ); 00099 $s = 00100 "<" . "?php\n" . 00101 "## This file is generated by mergeMessageFileList.php. Do not edit it directly.\n\n" . 00102 "if ( defined( 'MW_NO_EXTENSION_MESSAGES' ) ) return;\n\n" . 00103 '$wgExtensionMessagesFiles = ' . var_export( $wgExtensionMessagesFiles, true ) . ";\n\n"; 00104 00105 $dirs = array( 00106 $IP, 00107 dirname( __DIR__ ), 00108 realpath( $IP ) 00109 ); 00110 00111 foreach ( $dirs as $dir ) { 00112 $s = preg_replace( 00113 "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", 00114 '"$IP\1"', 00115 $s ); 00116 } 00117 00118 if ( isset( $mmfl['output'] ) ) { 00119 file_put_contents( $mmfl['output'], $s ); 00120 } else { 00121 echo $s; 00122 } 00123