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

Last change on this file since 90095 was 77188, checked in by kent1@…, 8 years ago

Faire fonctionner les grappes avec les modules de langue

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