1*c0470665SMartin 'E.T.' Misuth#!/usr/bin/php 2*c0470665SMartin 'E.T.' Misuth<?php 3*c0470665SMartin 'E.T.' Misuthif ('cli' != php_sapi_name()) die(); 4*c0470665SMartin 'E.T.' Misuth 5*c0470665SMartin 'E.T.' Misuth#------------------------------------------------------------------------------ 6*c0470665SMartin 'E.T.' Misuthif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/'); 7*c0470665SMartin 'E.T.' Misuthrequire_once DOKU_INC.'inc/cliopts.php'; 8*c0470665SMartin 'E.T.' Misuth 9*c0470665SMartin 'E.T.' Misuth#------------------------------------------------------------------------------ 10*c0470665SMartin 'E.T.' Misuthfunction usage($show_examples = false) { 11*c0470665SMartin 'E.T.' Misuth print "Usage: striplangs.php [-h [-x]] [-e] [-k lang1[,lang2]..[,langN]] 12*c0470665SMartin 'E.T.' Misuth 13*c0470665SMartin 'E.T.' Misuth Removes all languages from the instalation, besides the ones 14*c0470665SMartin 'E.T.' Misuth after the -k option. English language is never removed! 15*c0470665SMartin 'E.T.' Misuth 16*c0470665SMartin 'E.T.' Misuth OPTIONS 17*c0470665SMartin 'E.T.' Misuth -h, --help get this help 18*c0470665SMartin 'E.T.' Misuth -x, --examples get also usage examples 19*c0470665SMartin 'E.T.' Misuth -k, --keep comma separated list of languages, -e is always implied 20*c0470665SMartin 'E.T.' Misuth -e, --english keeps english, dummy to use without -k"; 21*c0470665SMartin 'E.T.' Misuth if ( $show_examples ) { 22*c0470665SMartin 'E.T.' Misuth print "\n 23*c0470665SMartin 'E.T.' Misuth EXAMPLES 24*c0470665SMartin 'E.T.' Misuth Strips all languages, but keeps 'en' and 'de': 25*c0470665SMartin 'E.T.' Misuth striplangs -k de 26*c0470665SMartin 'E.T.' Misuth 27*c0470665SMartin 'E.T.' Misuth Strips all but 'en','ca-valencia','cs','de','is','sk': 28*c0470665SMartin 'E.T.' Misuth striplangs --keep ca-valencia,cs,de,is,sk 29*c0470665SMartin 'E.T.' Misuth 30*c0470665SMartin 'E.T.' Misuth Strips all but 'en': 31*c0470665SMartin 'E.T.' Misuth striplangs -e 32*c0470665SMartin 'E.T.' Misuth 33*c0470665SMartin 'E.T.' Misuth No option specified, prints usage and throws error: 34*c0470665SMartin 'E.T.' Misuth striplangs\n"; 35*c0470665SMartin 'E.T.' Misuth } 36*c0470665SMartin 'E.T.' Misuth} 37*c0470665SMartin 'E.T.' Misuth 38*c0470665SMartin 'E.T.' Misuthfunction getSuppliedArgument($OPTS, $short, $long) { 39*c0470665SMartin 'E.T.' Misuth $arg = $OPTS->get($short); 40*c0470665SMartin 'E.T.' Misuth if ( is_null($arg) ) { 41*c0470665SMartin 'E.T.' Misuth $arg = $OPTS->get($long); 42*c0470665SMartin 'E.T.' Misuth } 43*c0470665SMartin 'E.T.' Misuth return $arg; 44*c0470665SMartin 'E.T.' Misuth} 45*c0470665SMartin 'E.T.' Misuth 46*c0470665SMartin 'E.T.' Misuthfunction processPlugins($path, $keep_langs) { 47*c0470665SMartin 'E.T.' Misuth if (is_dir($path)) { 48*c0470665SMartin 'E.T.' Misuth $entries = scandir($path); 49*c0470665SMartin 'E.T.' Misuth 50*c0470665SMartin 'E.T.' Misuth foreach ($entries as $entry) { 51*c0470665SMartin 'E.T.' Misuth if ($entry != "." && $entry != "..") { 52*c0470665SMartin 'E.T.' Misuth if ( is_dir($path.'\\'.$entry) ) { 53*c0470665SMartin 'E.T.' Misuth 54*c0470665SMartin 'E.T.' Misuth $plugin_langs = $path.'\\'.$entry.'\\lang'; 55*c0470665SMartin 'E.T.' Misuth 56*c0470665SMartin 'E.T.' Misuth if ( is_dir( $plugin_langs ) ) { 57*c0470665SMartin 'E.T.' Misuth stripDirLangs($plugin_langs, $keep_langs); 58*c0470665SMartin 'E.T.' Misuth } 59*c0470665SMartin 'E.T.' Misuth } 60*c0470665SMartin 'E.T.' Misuth } 61*c0470665SMartin 'E.T.' Misuth } 62*c0470665SMartin 'E.T.' Misuth } 63*c0470665SMartin 'E.T.' Misuth} 64*c0470665SMartin 'E.T.' Misuth 65*c0470665SMartin 'E.T.' Misuthfunction stripDirLangs($path, $keep_langs) { 66*c0470665SMartin 'E.T.' Misuth $dir = dir($path); 67*c0470665SMartin 'E.T.' Misuth 68*c0470665SMartin 'E.T.' Misuth while(($cur_dir = $dir->read()) !== false) { 69*c0470665SMartin 'E.T.' Misuth if( $cur_dir != '.' and $cur_dir != '..' and is_dir($path.'\\'.$cur_dir)) { 70*c0470665SMartin 'E.T.' Misuth 71*c0470665SMartin 'E.T.' Misuth if ( !in_array($cur_dir, $keep_langs, true ) ) { 72*c0470665SMartin 'E.T.' Misuth killDir($path.'\\'.$cur_dir); 73*c0470665SMartin 'E.T.' Misuth } 74*c0470665SMartin 'E.T.' Misuth } 75*c0470665SMartin 'E.T.' Misuth } 76*c0470665SMartin 'E.T.' Misuth $dir->close(); 77*c0470665SMartin 'E.T.' Misuth} 78*c0470665SMartin 'E.T.' Misuth 79*c0470665SMartin 'E.T.' Misuthfunction killDir($dir) { 80*c0470665SMartin 'E.T.' Misuth if (is_dir($dir)) { 81*c0470665SMartin 'E.T.' Misuth $entries = scandir($dir); 82*c0470665SMartin 'E.T.' Misuth 83*c0470665SMartin 'E.T.' Misuth foreach ($entries as $entry) { 84*c0470665SMartin 'E.T.' Misuth if ($entry != "." && $entry != "..") { 85*c0470665SMartin 'E.T.' Misuth if ( is_dir($dir.'\\'.$entry) ) { 86*c0470665SMartin 'E.T.' Misuth killDir($dir.'\\'.$entry); 87*c0470665SMartin 'E.T.' Misuth } else { 88*c0470665SMartin 'E.T.' Misuth unlink($dir.'\\'.$entry); 89*c0470665SMartin 'E.T.' Misuth } 90*c0470665SMartin 'E.T.' Misuth } 91*c0470665SMartin 'E.T.' Misuth } 92*c0470665SMartin 'E.T.' Misuth reset($entries); 93*c0470665SMartin 'E.T.' Misuth rmdir($dir); 94*c0470665SMartin 'E.T.' Misuth } 95*c0470665SMartin 'E.T.' Misuth} 96*c0470665SMartin 'E.T.' Misuth#------------------------------------------------------------------------------ 97*c0470665SMartin 'E.T.' Misuth 98*c0470665SMartin 'E.T.' Misuth// handle options 99*c0470665SMartin 'E.T.' Misuth$short_opts = 'hxk:e'; 100*c0470665SMartin 'E.T.' Misuth$long_opts = array('help', 'examples', 'keep=','english'); 101*c0470665SMartin 'E.T.' Misuth 102*c0470665SMartin 'E.T.' Misuth$OPTS = Doku_Cli_Opts::getOptions(__FILE__, $short_opts, $long_opts); 103*c0470665SMartin 'E.T.' Misuth 104*c0470665SMartin 'E.T.' Misuthif ( $OPTS->isError() ) { 105*c0470665SMartin 'E.T.' Misuth fwrite( STDERR, $OPTS->getMessage() . "\n"); 106*c0470665SMartin 'E.T.' Misuth exit(1); 107*c0470665SMartin 'E.T.' Misuth} 108*c0470665SMartin 'E.T.' Misuth 109*c0470665SMartin 'E.T.' Misuth// handle '--examples' option 110*c0470665SMartin 'E.T.' Misuth$show_examples = ( $OPTS->has('x') or $OPTS->has('examples') ) ? true : false; 111*c0470665SMartin 'E.T.' Misuth 112*c0470665SMartin 'E.T.' Misuth// handle '--help' option 113*c0470665SMartin 'E.T.' Misuthif ( $OPTS->has('h') or $OPTS->has('help') ) { 114*c0470665SMartin 'E.T.' Misuth usage($show_examples); 115*c0470665SMartin 'E.T.' Misuth exit(0); 116*c0470665SMartin 'E.T.' Misuth} 117*c0470665SMartin 'E.T.' Misuth 118*c0470665SMartin 'E.T.' Misuth// handle both '--keep' and '--english' options 119*c0470665SMartin 'E.T.' Misuthif ( $OPTS->has('k') or $OPTS->has('keep') ) { 120*c0470665SMartin 'E.T.' Misuth $preserved_langs = getSuppliedArgument($OPTS,'k','keep'); 121*c0470665SMartin 'E.T.' Misuth $langs = explode(',', $preserved_langs); 122*c0470665SMartin 'E.T.' Misuth 123*c0470665SMartin 'E.T.' Misuth // ! always enforce 'en' lang when using '--keep' (DW relies on it) 124*c0470665SMartin 'E.T.' Misuth if ( !isset($langs['en']) ) { 125*c0470665SMartin 'E.T.' Misuth $langs[]='en'; 126*c0470665SMartin 'E.T.' Misuth } 127*c0470665SMartin 'E.T.' Misuth} elseif ( $OPTS->has('e') or $OPTS->has('english') ) { 128*c0470665SMartin 'E.T.' Misuth // '--english' was specified strip everything besides 'en' 129*c0470665SMartin 'E.T.' Misuth $langs = array ('en'); 130*c0470665SMartin 'E.T.' Misuth} else { 131*c0470665SMartin 'E.T.' Misuth // no option was specified, print usage but don't do anything as 132*c0470665SMartin 'E.T.' Misuth // this run might not be intented 133*c0470665SMartin 'E.T.' Misuth usage(); 134*c0470665SMartin 'E.T.' Misuth print "\n 135*c0470665SMartin 'E.T.' Misuth ERROR 136*c0470665SMartin 'E.T.' Misuth No option specified, use either -h -x to get more info, 137*c0470665SMartin 'E.T.' Misuth or -e to strip every language besides english.\n"; 138*c0470665SMartin 'E.T.' Misuth exit(1); 139*c0470665SMartin 'E.T.' Misuth} 140*c0470665SMartin 'E.T.' Misuth 141*c0470665SMartin 'E.T.' Misuth// Kill all language directories in /inc/lang and /lib/plugins besides those in $langs array 142*c0470665SMartin 'E.T.' MisuthstripDirLangs(realpath(dirname(__FILE__).'/../inc/lang'), $langs); 143*c0470665SMartin 'E.T.' MisuthprocessPlugins(realpath(dirname(__FILE__).'/../lib/plugins'), $langs);