source: spip-zone/_plugins_/trad-lang/trunk/tradlang_administrations.php @ 120875

Last change on this file since 120875 was 120875, checked in by Cerdic, 15 months ago

ajouter le basename du repo dans le nom du module de langue, pour permettre de differencier les modules de meme nom mais de plugin differents

File size: 14.0 KB
Line 
1<?php
2/**
3 * Plugin Tradlang
4 * Licence GPL (c) 2009-2013
5 */
6
7if (!defined('_ECRIRE_INC_VERSION')) {
8        return;
9}
10
11include_spip('inc/meta');
12
13/**
14 * Fonction d'installation, mise à jour de la base
15 *
16 * @param unknown_type $nom_meta_base_version
17 * @param unknown_type $version_cible
18 */
19function tradlang_upgrade($nom_meta_base_version, $version_cible) {
20        $current_version = 0.0;
21        $maj = array();
22        $maj['create'] = array(
23                array('creer_base'),
24                array('maj_tables',array('spip_auteurs')),
25                array('tradlang_import_ancien_tradlang',true),
26                array('tradlang_maj_modules',true)
27        );
28        $maj['0.3.1'] = array(
29                array('sql_alter',"TABLE spip_tradlang CHANGE status status VARCHAR(16) NOT NULL DEFAULT 'OK'")
30        );
31        $maj['0.3.2'] = array(
32                array('sql_alter','TABLE spip_tradlang_modules CHANGE nom_mod nom_mod VARCHAR(32) NOT NULL'),
33                array('sql_alter','TABLE spip_tradlang_modules CHANGE lang_prefix lang_prefix VARCHAR(32) NOT NULL')
34        );
35        $maj['0.3.3'] = array(
36                array('sql_alter',"TABLE spip_tradlang CHANGE status statut VARCHAR(16) NOT NULL default 'OK'"),
37        );
38        $maj['0.3.4'] = array(
39                array('sql_alter',"TABLE spip_tradlang ADD id_tradlang_module bigint(21) DEFAULT '0' NOT NULL"),
40                array('tradlang_maj_id_tradlang_modules',true)
41        );
42        $maj['0.3.5'] = array(
43                array('maj_tables',array('spip_tradlang')),
44                array('tradlang_maj_tradlang_titre',true)
45        );
46        $maj['0.3.6'] = array(
47                array('maj_tables',array('spip_tradlang'))
48        );
49        $maj['0.3.7'] = array(
50                array('tradlang_maj_traducteurs','true')
51        );
52        $maj['0.3.8'] = array(
53                array('maj_tables',array('spip_tradlang_modules'))
54        );
55        $maj['0.3.9'] = array(
56                array('sql_alter','TABLE spip_tradlang_modules DROP INDEX nom_mod'),
57                array('sql_alter','TABLE spip_tradlang_modules CHANGE nom_mod nom_mod text DEFAULT "" NOT NULL'),
58                array('sql_alter','TABLE spip_tradlang_modules ADD INDEX `nom_mod` ( `nom_mod` ( 255 ) )')
59        );
60        $maj['0.4.0'] = array(
61                array('maj_tables', array('spip_auteurs'))
62        );
63        $maj['0.4.1'] = array(
64                array('sql_alter', 'TABLE spip_tradlang DROP maj'),
65                array('sql_alter', 'TABLE spip_tradlang CHANGE ts maj timestamp(14) NOT NULL'),
66        );
67        $maj['0.4.2'] = array(
68                array('sql_alter', 'TABLE spip_tradlang RENAME spip_tradlangs')
69        );
70        $maj['0.4.3'] = array(
71                array('maj_tables', array('spip_auteurs'))
72        );
73        $maj['0.4.4'] = array(
74                array('maj_tables', array('spip_tradlang_modules'))
75        );
76        $maj['0.4.5'] = array(
77                array('sql_alter', 'TABLE spip_tradlangs ADD INDEX id_tradlang_module (id_tradlang_module)'),
78        );
79        $maj['0.4.6'] = array(
80                array('sql_alter', 'TABLE spip_tradlangs ADD INDEX statut (statut)'),
81        );
82        $maj['0.5.0'] = array(
83                array('creer_base'),
84                array('tradlang_maj_bilans')
85        );
86        $maj['0.5.1'] = array(
87                array('tradlang_maj_attic')
88        );
89        $maj['0.5.2'] = array(
90                array('maj_tables',array('spip_tradlang_modules'))
91        );
92
93        // changement de cle unique sur spip_tradlang_modules
94        $maj['1.0.0'] = array(
95                array('sql_alter','TABLE spip_tradlang_modules DROP INDEX module'),
96                // ajouter le champ dir_module
97                array('sql_alter','TABLE spip_tradlang_modules ADD dir_module varchar(255) NOT NULL DEFAULT \'\''),
98                // on preremplit avec module pour avoir l'unicite
99                array('sql_update','spip_tradlang_modules',array('dir_module' => 'module'), "dir_module=''"),
100                // ajout de l'index unique sur dir_module
101                array('sql_alter','TABLE spip_tradlang_modules ADD UNIQUE INDEX dir_module (dir_module)'),
102                // et on remet un index module simple
103                array('sql_alter','TABLE spip_tradlang_modules ADD INDEX module (module)'),
104        );
105
106        $maj['1.1.0'] = array(
107                // supprimer tous les indexs
108                array('sql_alter','TABLE spip_tradlangs DROP INDEX id'),
109                array('sql_alter','TABLE spip_tradlangs DROP INDEX module'),
110                array('sql_alter','TABLE spip_tradlangs DROP INDEX id_tradlang_module'),
111                array('sql_alter','TABLE spip_tradlangs DROP INDEX statut'),
112                array('sql_alter','TABLE spip_tradlangs DROP INDEX langstatut'),
113                array('sql_alter','TABLE spip_tradlangs DROP INDEX modlangstatut'),
114                array('sql_alter','TABLE spip_tradlangs DROP INDEX idmodlangstatut'),
115                array('sql_alter','TABLE spip_tradlangs DROP INDEX idmodlang'),
116
117                array('sql_alter','TABLE spip_tradlangs ADD UNIQUE INDEX id_tradlang_module_id_lang (id_tradlang_module,id,lang)'),
118                array('sql_alter','TABLE spip_tradlangs ADD INDEX id_tradlang_module (id_tradlang_module)'),
119                array('sql_alter','TABLE spip_tradlangs ADD INDEX id (id)'),
120                array('sql_alter','TABLE spip_tradlangs ADD INDEX lang (lang)'),
121                array('sql_alter','TABLE spip_tradlangs ADD INDEX module (module)'),
122                array('sql_alter','TABLE spip_tradlangs ADD INDEX statut (statut)'),
123                array('sql_alter','TABLE spip_tradlangs ADD INDEX module_lang (module,lang)'),
124        );
125        $maj['1.1.1'] = array(
126                array('sql_alter','TABLE spip_tradlangs ADD INDEX id_tradlang_module_lang_statut (id_tradlang_module,lang,statut)'),
127        );
128
129        $maj['1.2.0'] = array(
130                array('tradlang_nommer_modules'),
131        );
132
133        include_spip('base/upgrade');
134        maj_plugin($nom_meta_base_version, $version_cible, $maj);
135}
136
137
138function tradlang_nommer_modules() {
139
140        $res = sql_select('*', 'spip_tradlang_modules', "nom_mod=module OR nom_mod='' AND dir_module!=''");
141        $nb = sql_count($res);
142        spip_log("tradlang_nommer_modules: $nb restants", 'maj');
143        while($row_module = sql_fetch($res)) {
144
145                $id_tradlang_module = $row_module['id_tradlang_module'];
146
147                $set = array(
148                        'nom_mod' => calculer_nom_module($row_module['module'], $row_module['dir_module']),
149                );
150                sql_updateq("spip_tradlang_modules", $set, "id_tradlang_module=".intval($id_tradlang_module));
151                if (time()>_TIME_OUT) {
152                        return;
153                }
154        }
155}
156
157/**
158 * Fonction d'import de l'ancien tradlang
159 * Ne devrait être utile que sur spip.net mais sais t on jamais
160 */
161function tradlang_import_ancien_tradlang($affiche = false) {
162        /**
163         * On insère les modules
164         */
165        $modules = sql_select('*', 'trad_lang', '', array('module'));
166        while ($module=sql_fetch($modules)) {
167                $id_module = sql_insertq('spip_tradlang_modules', array('module' => $module['module'], 'nom_mod' => $module['module']));
168                /**
169                 * On insére les anciens tradlang
170                 */
171                //$docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100"));
172                $strings = sql_allfetsel('id,module,lang,str,comm,status,traducteur,ts,md5,orig,date_modif', 'trad_lang', 'module = ' . sql_quote($module['module']). ' AND orig!="2"', '', '', '0,100');
173                $count = 0;
174                while (count($strings)) {
175                        foreach ($strings as $id => $string) {
176                                $string['titre'] = $string['id'].' : '.$string['module'].' - '.$string['lang'];
177                                if (!$string['md5']) {
178                                        $string['md5'] = md5($string['str']);
179                                }
180                                $string['langue_choisie'] = 'non';
181                                $string['id_tradlang_module'] = $id_module;
182                                $string['statut'] = $string['status'] ? $string['status'] : 'OK';
183                                $string['maj'] = $string['ts'];
184                                unset($string['ts']);
185                                unset($string['status']);
186                                sql_insertq('spip_tradlangs', $string);
187                                sql_updateq('trad_lang', array('orig' => 2), 'str=' . sql_quote($string['str']) . ' AND lang= ' . sql_quote($string['lang']));
188                        }
189                        if ($affiche) {
190                                echo ' .';
191                        }
192                        $count = $count+count($strings);
193                        spip_log($count, 'tradlang');
194                        $strings = sql_allfetsel('id,module,lang,str,comm,status,traducteur,ts,md5,orig,date_modif', 'trad_lang', 'module = ' . sql_quote($module['module']). ' AND orig!="2"', '', '', '0,100');
195                }
196        }
197}
198function tradlang_maj_id_tradlang_modules($affiche = false) {
199        $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'id_tradlang_module=0', '', '', '0,100'));
200        while (count($strings)) {
201                foreach ($strings as $id_tradlang) {
202                        $module = sql_getfetsel('module', 'spip_tradlangs', 'id_tradlang = ' . intval($id_tradlang));
203                        $id_tradlang_module = sql_getfetsel('id_tradlang_module', 'spip_tradlang_modules', 'module = ' . sql_quote($module));
204                        sql_updateq('spip_tradlangs', array('id_tradlang_module' => $id_tradlang_module), 'id_tradlang = ' . intval($id_tradlang));
205                }
206                if ($affiche) {
207                        echo ' .';
208                }
209                $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'id_tradlang_module=0', '', '', '0,100'));
210        }
211}
212
213function tradlang_maj_tradlang_titre($affiche = false) {
214        $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'titre=""', '', '', '0,500'));
215        while (count($strings)) {
216                foreach ($strings as $id_tradlang) {
217                        $tradlang = sql_fetsel('*', 'spip_tradlangs', 'id_tradlang = ' . intval($id_tradlang));
218                        $titre = $tradlang['id'].' : '.$tradlang['module'].' - '.$tradlang['lang'];
219                        sql_updateq('spip_tradlangs', array('titre' => $titre), 'id_tradlang='.intval($id_tradlang));
220                }
221                if ($affiche) {
222                        echo ' .';
223                }
224                $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'titre=""', '', '', '0,500'));
225        }
226}
227
228function tradlang_maj_modules($affiche = false) {
229        $tradlang_verifier_langue_base = charger_fonction('tradlang_verifier_langue_base', 'inc');
230        /**
231         * On update les modules
232         */
233        $modules = sql_select('*', 'spip_tradlang_modules', 'module NOT LIKE "attic%" AND module !=' . sql_quote('attic'));
234
235        while ($module = sql_fetch($modules)) {
236                spip_log($module['module'], 'tradlang');
237                if ($affiche) {
238                        echo ' .';
239                }
240                $langues = sql_select('lang', 'spip_tradlangs', 'id_tradlang_module = ' . intval($module['id_tradlang_module']).' AND lang!='.sql_quote($module['lang_mere']), array('lang'));
241                while ($lang = sql_fetch($langues)) {
242                        $modifs = $tradlang_verifier_langue_base($module['module'],$lang['lang']);
243                }
244        }
245}
246
247/**
248 * On remet les traducteurs des locutions
249 */
250function tradlang_maj_traducteurs($affiche = false) {
251        $chaines_traducteurs = sql_select('*', 'trad_lang', 'status = "" AND traducteur != ""');
252        while ($traduction = sql_fetch($chaines_traducteurs)) {
253                sql_updateq('spip_tradlangs', array('traducteur' => $traduction['traducteur']), 'module = '.sql_quote($traduction['module']).' AND id = ' . sql_quote($traduction['id']) . ' AND lang = ' . sql_quote($traduction['lang']));
254        }
255
256        $chaines_traducteurs_modif = sql_select('*', 'trad_lang', 'status = "MODIF" AND traducteur != ""');
257        while ($traduction = sql_fetch($chaines_traducteurs_modif)) {
258                sql_updateq('spip_tradlangs', array('traducteur' => $traduction['traducteur']), 'module = '.sql_quote($traduction['module']).' AND id='.sql_quote($traduction['id']).' AND lang='.sql_quote($traduction['lang']));
259        }
260}
261
262/**
263 * On crée les bilans de chaque langue de chaque module
264 */
265function tradlang_maj_bilans($affiche = false) {
266        $modules = sql_select('id_tradlang_module, module, lang_mere', 'spip_tradlang_modules');
267
268        /**
269         * On passe d'abord les modules un par un
270         * On récupère $total qui est le total des chaines de la langue mère
271         */
272        while ($module = sql_fetch($modules)) {
273                /**
274                 * Si on n'est pas dans un module type attic
275                 */
276                if (substr($module['module'], 0, 5) != 'attic') {
277                        $total = sql_countsel('spip_tradlangs', 'module = ' . sql_quote($module['module']) . ' AND lang = ' . sql_quote($module['lang_mere']));
278                        $langues_base = sql_select('lang', 'spip_tradlangs', 'module = ' . sql_quote($module['module']), 'lang');
279                        /**
280                         * On passe ensuite chaque langue de ce module en revue
281                         * On insère une entrée pour chaque langue de chaque module
282                         */
283                        while ($langue = sql_fetch($langues_base)) {
284                                $lang = $langue['lang'];
285                                $chaines_ok = sql_countsel('spip_tradlangs', 'module=' . sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="OK"');
286                                $chaines_relire = sql_countsel('spip_tradlangs', 'module='.sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="RELIRE"');
287                                $chaines_modif = sql_countsel('spip_tradlangs', 'module='.sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="MODIF"');
288                                $chaines_new = sql_countsel('spip_tradlangs', 'module='.sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="NEW"');
289                                $infos_bilan = array(
290                                                                        'id_tradlang_module' => $module['id_tradlang_module'],
291                                                                        'module' => $module['module'],
292                                                                        'lang' => $lang,
293                                                                        'chaines_total' => $total,
294                                                                        'chaines_ok' => $chaines_ok,
295                                                                        'chaines_relire' => $chaines_relire,
296                                                                        'chaines_modif' => $chaines_modif,
297                                                                        'chaines_new' => $chaines_new
298                                                                );
299                                sql_insertq('spip_tradlangs_bilans', $infos_bilan);
300                        }
301                }
302        }
303}
304
305function tradlang_maj_attic($affiche = false) {
306        /**
307         * Dans un premier temps, on supprimer les attics qui ont un statut NEW,
308         * il ne serviront jamaiscar même récupérés, ils ne sont pas traduit
309         */
310        sql_delete('spip_tradlangs', 'module LIKE "attic%" AND statut="NEW"');
311        $select_attic_id_module = sql_select('*', 'spip_tradlangs', 'module LIKE "attic%"', 'id_tradlang_module');
312        while ($id_module = sql_fetch($select_attic_id_module)) {
313                $module = sql_getfetsel('module', 'spip_tradlang_modules', 'id_tradlang_module = ' . intval($id_module['id_tradlang_module']));
314                if ($module) {
315                        $attics_module = sql_select('id_tradlang,id,module,lang', 'spip_tradlangs', 'id_tradlang_module = ' . intval($id_module['id_tradlang_module']) . ' AND module LIKE "attic%"');
316                        while ($id_tradlang = sql_fetch($attics_module)) {
317                                if (!sql_getfetsel('id_tradlang', 'spip_tradlangs', 'id = ' . sql_quote($id_tradlang['id']).' AND module = ' . sql_quote($id_tradlang['module']).' AND lang = ' . sql_quote($id_tradlang['lang']))) {
318                                        sql_updateq('spip_tradlangs', array('statut' => 'attic', 'module' => $module), 'id_tradlang = ' . intval($id_tradlang['id_tradlang']));
319                                } else {
320                                        sql_delete('spip_tradlangs', 'id_tradlang = ' . intval($id_tradlang['id_tradlang']));
321                                }
322                        }
323                }
324        }
325        sql_delete('spip_tradlang_modules', 'module LIKE "attic%"');
326}
327/**
328 * Fonction de desinstallation
329 * On supprime :
330 * -* la table spip_tradlangs
331 * -* la table spip_tradlang_modules
332 * -* la table spip_tradlangs_bilans
333 * -* les éléments de spip_versions concernant l'obet tradlang
334 * -* les éléments de spip_versions_fragments concernant l'obet tradlang
335 * @param unknown_type $nom_meta_base_version
336 */
337function tradlang_vider_tables($nom_meta_base_version) {
338        sql_drop_table('spip_tradlangs');
339        sql_drop_table('spip_tradlang_modules');
340        sql_drop_table('spip_tradlangs_bilans');
341        sql_delete('spip_versions', 'objet = ' . sql_quote('tradlang'));
342        sql_delete('spip_versions_fragments', 'objet = ' . sql_quote('tradlang'));
343        effacer_meta($nom_meta_base_version);
344}
Note: See TracBrowser for help on using the repository browser.