1 | <?php |
---|
2 | /** |
---|
3 | * Plugin Tradlang |
---|
4 | * Licence GPL (c) 2009-2013 |
---|
5 | */ |
---|
6 | |
---|
7 | if (!defined('_ECRIRE_INC_VERSION')) { |
---|
8 | return; |
---|
9 | } |
---|
10 | |
---|
11 | include_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 | */ |
---|
19 | function 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 | include_spip('base/upgrade'); |
---|
130 | maj_plugin($nom_meta_base_version, $version_cible, $maj); |
---|
131 | } |
---|
132 | |
---|
133 | /** |
---|
134 | * Fonction d'import de l'ancien tradlang |
---|
135 | * Ne devrait être utile que sur spip.net mais sais t on jamais |
---|
136 | */ |
---|
137 | function tradlang_import_ancien_tradlang($affiche = false) { |
---|
138 | /** |
---|
139 | * On insère les modules |
---|
140 | */ |
---|
141 | $modules = sql_select('*', 'trad_lang', '', array('module')); |
---|
142 | while ($module=sql_fetch($modules)) { |
---|
143 | $id_module = sql_insertq('spip_tradlang_modules', array('module' => $module['module'], 'nom_mod' => $module['module'])); |
---|
144 | /** |
---|
145 | * On insére les anciens tradlang |
---|
146 | */ |
---|
147 | //$docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100")); |
---|
148 | $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'); |
---|
149 | $count = 0; |
---|
150 | while (count($strings)) { |
---|
151 | foreach ($strings as $id => $string) { |
---|
152 | $string['titre'] = $string['id'].' : '.$string['module'].' - '.$string['lang']; |
---|
153 | if (!$string['md5']) { |
---|
154 | $string['md5'] = md5($string['str']); |
---|
155 | } |
---|
156 | $string['langue_choisie'] = 'non'; |
---|
157 | $string['id_tradlang_module'] = $id_module; |
---|
158 | $string['statut'] = $string['status'] ? $string['status'] : 'OK'; |
---|
159 | $string['maj'] = $string['ts']; |
---|
160 | unset($string['ts']); |
---|
161 | unset($string['status']); |
---|
162 | sql_insertq('spip_tradlangs', $string); |
---|
163 | sql_updateq('trad_lang', array('orig' => 2), 'str=' . sql_quote($string['str']) . ' AND lang= ' . sql_quote($string['lang'])); |
---|
164 | } |
---|
165 | if ($affiche) { |
---|
166 | echo ' .'; |
---|
167 | } |
---|
168 | $count = $count+count($strings); |
---|
169 | spip_log($count, 'tradlang'); |
---|
170 | $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'); |
---|
171 | } |
---|
172 | } |
---|
173 | } |
---|
174 | function tradlang_maj_id_tradlang_modules($affiche = false) { |
---|
175 | $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'id_tradlang_module=0', '', '', '0,100')); |
---|
176 | while (count($strings)) { |
---|
177 | foreach ($strings as $id_tradlang) { |
---|
178 | $module = sql_getfetsel('module', 'spip_tradlangs', 'id_tradlang = ' . intval($id_tradlang)); |
---|
179 | $id_tradlang_module = sql_getfetsel('id_tradlang_module', 'spip_tradlang_modules', 'module = ' . sql_quote($module)); |
---|
180 | sql_updateq('spip_tradlangs', array('id_tradlang_module' => $id_tradlang_module), 'id_tradlang = ' . intval($id_tradlang)); |
---|
181 | } |
---|
182 | if ($affiche) { |
---|
183 | echo ' .'; |
---|
184 | } |
---|
185 | $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'id_tradlang_module=0', '', '', '0,100')); |
---|
186 | } |
---|
187 | } |
---|
188 | |
---|
189 | function tradlang_maj_tradlang_titre($affiche = false) { |
---|
190 | $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'titre=""', '', '', '0,500')); |
---|
191 | while (count($strings)) { |
---|
192 | foreach ($strings as $id_tradlang) { |
---|
193 | $tradlang = sql_fetsel('*', 'spip_tradlangs', 'id_tradlang = ' . intval($id_tradlang)); |
---|
194 | $titre = $tradlang['id'].' : '.$tradlang['module'].' - '.$tradlang['lang']; |
---|
195 | sql_updateq('spip_tradlangs', array('titre' => $titre), 'id_tradlang='.intval($id_tradlang)); |
---|
196 | } |
---|
197 | if ($affiche) { |
---|
198 | echo ' .'; |
---|
199 | } |
---|
200 | $strings = array_map('reset', sql_allfetsel('id_tradlang', 'spip_tradlangs', 'titre=""', '', '', '0,500')); |
---|
201 | } |
---|
202 | } |
---|
203 | |
---|
204 | function tradlang_maj_modules($affiche = false) { |
---|
205 | $tradlang_verifier_langue_base = charger_fonction('tradlang_verifier_langue_base', 'inc'); |
---|
206 | /** |
---|
207 | * On update les modules |
---|
208 | */ |
---|
209 | $modules = sql_select('*', 'spip_tradlang_modules', 'module NOT LIKE "attic%" AND module !=' . sql_quote('attic')); |
---|
210 | |
---|
211 | while ($module = sql_fetch($modules)) { |
---|
212 | spip_log($module['module'], 'tradlang'); |
---|
213 | if ($affiche) { |
---|
214 | echo ' .'; |
---|
215 | } |
---|
216 | $langues = sql_select('lang', 'spip_tradlangs', 'id_tradlang_module = ' . intval($module['id_tradlang_module']).' AND lang!='.sql_quote($module['lang_mere']), array('lang')); |
---|
217 | while ($lang = sql_fetch($langues)) { |
---|
218 | $modifs = $tradlang_verifier_langue_base($module['module'],$lang['lang']); |
---|
219 | } |
---|
220 | } |
---|
221 | } |
---|
222 | |
---|
223 | /** |
---|
224 | * On remet les traducteurs des locutions |
---|
225 | */ |
---|
226 | function tradlang_maj_traducteurs($affiche = false) { |
---|
227 | $chaines_traducteurs = sql_select('*', 'trad_lang', 'status = "" AND traducteur != ""'); |
---|
228 | while ($traduction = sql_fetch($chaines_traducteurs)) { |
---|
229 | 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'])); |
---|
230 | } |
---|
231 | |
---|
232 | $chaines_traducteurs_modif = sql_select('*', 'trad_lang', 'status = "MODIF" AND traducteur != ""'); |
---|
233 | while ($traduction = sql_fetch($chaines_traducteurs_modif)) { |
---|
234 | 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'])); |
---|
235 | } |
---|
236 | } |
---|
237 | |
---|
238 | /** |
---|
239 | * On crée les bilans de chaque langue de chaque module |
---|
240 | */ |
---|
241 | function tradlang_maj_bilans($affiche = false) { |
---|
242 | $modules = sql_select('id_tradlang_module, module, lang_mere', 'spip_tradlang_modules'); |
---|
243 | |
---|
244 | /** |
---|
245 | * On passe d'abord les modules un par un |
---|
246 | * On récupère $total qui est le total des chaines de la langue mère |
---|
247 | */ |
---|
248 | while ($module = sql_fetch($modules)) { |
---|
249 | /** |
---|
250 | * Si on n'est pas dans un module type attic |
---|
251 | */ |
---|
252 | if (substr($module['module'], 0, 5) != 'attic') { |
---|
253 | $total = sql_countsel('spip_tradlangs', 'module = ' . sql_quote($module['module']) . ' AND lang = ' . sql_quote($module['lang_mere'])); |
---|
254 | $langues_base = sql_select('lang', 'spip_tradlangs', 'module = ' . sql_quote($module['module']), 'lang'); |
---|
255 | /** |
---|
256 | * On passe ensuite chaque langue de ce module en revue |
---|
257 | * On insère une entrée pour chaque langue de chaque module |
---|
258 | */ |
---|
259 | while ($langue = sql_fetch($langues_base)) { |
---|
260 | $lang = $langue['lang']; |
---|
261 | $chaines_ok = sql_countsel('spip_tradlangs', 'module=' . sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="OK"'); |
---|
262 | $chaines_relire = sql_countsel('spip_tradlangs', 'module='.sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="RELIRE"'); |
---|
263 | $chaines_modif = sql_countsel('spip_tradlangs', 'module='.sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="MODIF"'); |
---|
264 | $chaines_new = sql_countsel('spip_tradlangs', 'module='.sql_quote($module['module']).' AND lang='.sql_quote($lang).' AND statut="NEW"'); |
---|
265 | $infos_bilan = array( |
---|
266 | 'id_tradlang_module' => $module['id_tradlang_module'], |
---|
267 | 'module' => $module['module'], |
---|
268 | 'lang' => $lang, |
---|
269 | 'chaines_total' => $total, |
---|
270 | 'chaines_ok' => $chaines_ok, |
---|
271 | 'chaines_relire' => $chaines_relire, |
---|
272 | 'chaines_modif' => $chaines_modif, |
---|
273 | 'chaines_new' => $chaines_new |
---|
274 | ); |
---|
275 | sql_insertq('spip_tradlangs_bilans', $infos_bilan); |
---|
276 | } |
---|
277 | } |
---|
278 | } |
---|
279 | } |
---|
280 | |
---|
281 | function tradlang_maj_attic($affiche = false) { |
---|
282 | /** |
---|
283 | * Dans un premier temps, on supprimer les attics qui ont un statut NEW, |
---|
284 | * il ne serviront jamaiscar même récupérés, ils ne sont pas traduit |
---|
285 | */ |
---|
286 | sql_delete('spip_tradlangs', 'module LIKE "attic%" AND statut="NEW"'); |
---|
287 | $select_attic_id_module = sql_select('*', 'spip_tradlangs', 'module LIKE "attic%"', 'id_tradlang_module'); |
---|
288 | while ($id_module = sql_fetch($select_attic_id_module)) { |
---|
289 | $module = sql_getfetsel('module', 'spip_tradlang_modules', 'id_tradlang_module = ' . intval($id_module['id_tradlang_module'])); |
---|
290 | if ($module) { |
---|
291 | $attics_module = sql_select('id_tradlang,id,module,lang', 'spip_tradlangs', 'id_tradlang_module = ' . intval($id_module['id_tradlang_module']) . ' AND module LIKE "attic%"'); |
---|
292 | while ($id_tradlang = sql_fetch($attics_module)) { |
---|
293 | 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']))) { |
---|
294 | sql_updateq('spip_tradlangs', array('statut' => 'attic', 'module' => $module), 'id_tradlang = ' . intval($id_tradlang['id_tradlang'])); |
---|
295 | } else { |
---|
296 | sql_delete('spip_tradlangs', 'id_tradlang = ' . intval($id_tradlang['id_tradlang'])); |
---|
297 | } |
---|
298 | } |
---|
299 | } |
---|
300 | } |
---|
301 | sql_delete('spip_tradlang_modules', 'module LIKE "attic%"'); |
---|
302 | } |
---|
303 | /** |
---|
304 | * Fonction de desinstallation |
---|
305 | * On supprime : |
---|
306 | * -* la table spip_tradlangs |
---|
307 | * -* la table spip_tradlang_modules |
---|
308 | * -* la table spip_tradlangs_bilans |
---|
309 | * -* les éléments de spip_versions concernant l'obet tradlang |
---|
310 | * -* les éléments de spip_versions_fragments concernant l'obet tradlang |
---|
311 | * @param unknown_type $nom_meta_base_version |
---|
312 | */ |
---|
313 | function tradlang_vider_tables($nom_meta_base_version) { |
---|
314 | sql_drop_table('spip_tradlangs'); |
---|
315 | sql_drop_table('spip_tradlang_modules'); |
---|
316 | sql_drop_table('spip_tradlangs_bilans'); |
---|
317 | sql_delete('spip_versions', 'objet = ' . sql_quote('tradlang')); |
---|
318 | sql_delete('spip_versions_fragments', 'objet = ' . sql_quote('tradlang')); |
---|
319 | effacer_meta($nom_meta_base_version); |
---|
320 | } |
---|