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