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