xref: /dokuwiki/bin/striplangs.php (revision c0470665eec5d52d0e7da72e5ba8fd76b931247d)
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);