source: spip-zone/_plugins_/langonet/formulaires/langonet_verifier.php @ 53947

Last change on this file since 53947 was 53947, checked in by esj@…, 9 years ago

langonet Accepter aussi dans un squelette des parenthèses dans un libellé brut à transformer en item de fichier de langues. Manque encore l'apostrophe et le deux-points, mais ça impliquerait de revoir complètement la Regexp.

Et ne pas oublier de produire le fichier !

  • Property svn:eol-style set to native
File size: 23.1 KB
Line 
1<?php
2/// @file
3/**
4 * Formulaire principal
5 *
6 */
7
8function formulaires_langonet_verifier_charger() {
9        return array('verification' => _request('verification'),
10                                'fichier_langue' => _request('fichier_langue'),
11                                'dossier_scan' => _request('dossier_scan'));
12}
13
14function formulaires_langonet_verifier_verifier() {
15        $erreurs = array();
16        if (_request('verification') != 'fonction_l') {
17                if (_request('fichier_langue') == '0') {
18                        $erreurs['fichier_langue'] = _T('langonet:message_nok_champ_obligatoire');
19                }
20        }
21        if (_request('dossier_scan') == '0') {
22                $erreurs['dossier_scan'] = _T('langonet:message_nok_champ_obligatoire');
23        }
24        return $erreurs;
25}
26
27
28
29///Recuperation des champs du formulaire
30///  $verification -> type de verification
31///                  'definition' ou 'utilisation'
32///  $rep          -> nom du repertoire parent de lang/
33///                   'langonet' pour 'langonet/lang/'
34///                   correspond generalement au 'nom' du plugin
35///  $module       -> prefixe du fichier de langue
36///                   'langonet' pour 'langonet_fr.php'
37///                   parfois different du 'nom' du plugin
38///  $langue       -> index du nom de langue
39///                   'fr' pour 'langonet_fr.php'
40///  $ou_langue    -> chemin vers le fichier de langue a verifier
41///                   'plugins/auto/langonet/lang'
42///  $ou_fichier   -> racine de l'arborescence a verifier
43///                   'plugins/auto/langonet'
44
45function formulaires_langonet_verifier_traiter() {
46
47        $verification = _request('verification');
48        $ou_fichier = _request('dossier_scan');
49        $retour_select_langue = explode(':', _request('fichier_langue'));
50        $rep = $retour_select_langue[0];
51        $module = $retour_select_langue[1];
52        $langue = $retour_select_langue[2];
53        $ou_langue = $retour_select_langue[3];
54        $encodage = _request('encodage');
55
56        // Chargement de la fonction de verification
57        // et verification et formatage des resultats pour affichage
58        $retour = array();
59        if ($verification != 'fonction_l') {
60                $langonet_verifier_items = charger_fonction('langonet_verifier_items','inc');
61                $resultats = $langonet_verifier_items($rep, $module, $langue, $ou_langue, $ou_fichier, $verification);
62        }
63        else {
64                $langonet_verifier_items = charger_fonction('langonet_verifier_l','inc');
65                $resultats = $langonet_verifier_items($module, $ou_fichier);
66        }
67
68        // Creation du fichier de langue corrige avec les items detectes comme non definis ou obsoletes
69        // suivant la verification en cours
70        $_l = ($verification=='fonction_l');
71        $all = $resultats[$_l ? "item_non" : 'item_non_mais_nok'];
72        if ($all) {
73                $langonet_corriger = charger_fonction('langonet_generer_fichier','inc');
74                if ($verification != 'utilisation') {
75                        $oublies = array();
76                        foreach ($all as $_item) {
77                                $oublies[$_item] = @$resultats['item_md5'][$_item]; // indefini si dejo normalise
78                        }
79                        $mode = $_l ?'fonction_l' :  'oublie';
80                        $corrections = $langonet_corriger($module, $langue, $ou_langue, $langue, $mode, $encodage, $oublies);
81                }
82                else {
83                        $inutiles = $resultats['item_non'];
84                        $mode = 'inutile';
85                        $corrections = $langonet_corriger($module, $langue, $ou_langue, $langue, $mode, $encodage, $inutiles);
86                }
87        }
88
89        // Traitement des resultats
90        if ($resultats['erreur']) {
91                $retour['message_erreur'] = $resultats['erreur'];
92        }
93        else {
94                $retour = formater_resultats($verification, $resultats, $corrections);
95        }
96        $retour['editable'] = true;
97        return $retour;
98}
99
100/**
101 * Formatage des resultats pour affichage dans le formulaire
102 *
103 * @param string $verification
104 * @param string $resultats
105 * @param string $corrections
106 * @param string $langue
107 * @return array
108 */
109
110// $resultats    => tableau des resultats (11 sous-tableaux) :
111//                    ["module"] => intitule module
112//                    ["ou_fichier"] => rep plugin
113//                    ["langue"] => nom fichier de lang
114//                    ["item_non"][] => intitule item
115//                    ["fichier_non"][item][fichier utilisant][num de la ligne][] => extrait ligne
116//                    ["item_non_mais_nok"][] => intitule item
117//                    ["fichier_non_mais_nok"][item][fichier utilisant][num de la ligne][] => extrait ligne
118//                    ["definition_non_mais_nok"][item][] => nom fichier de lang
119//                    ["item_non_mais"][] => intitule item
120//                    ["fichier_non_mais"][item][fichier utilisant][num de la ligne][] => extrait ligne
121//                    ["definition_non_mais"][item][] => nom fichier de lang
122//                    ["item_peut_etre"][] => intitule partiel item
123//                    ["fichier_peut_etre"][item][fichier utilisant][num de la ligne][] => extrait ligne
124// $verification => type de verification effectuee (definition ou utilisation)
125// $corrections  => tableau des resultats de la generation du fichier de langue corrige
126function formater_resultats($verification, $resultats, $corrections) {
127
128        include_spip('inc/actions');
129
130        // On charge le filtre de coloration si le plugin Coloration Code est actif
131        // Pour un bonne presentation il faut utiliser une version >= 0.6
132        $f_coloriser = NULL;
133        include_spip('public/parametrer'); // inclure les fichiers fonctions
134        $f_coloriser = chercher_filtre('coloration_code_color');
135
136        // On initialise le tableau des textes resultant contenant les index:
137        // - ["message_ok"]["resume"] : le message de retour ok fournissant le fichier des resultats
138        // - ["message_ok"]["resultats"] : le texte des résultats
139        // - ["message_erreur"] : le message d'erreur si on a erreur de traitement pendant l'execution
140        $retour = array();
141
142        $texte = array('non' => '', 'non_mais' => '', 'non_mais_nok' => '', 'peut_etre' => '');
143        if ($verification == 'definition') {
144                // Liste des items du module en cours de verification
145                // et non definis avec certitude dans le fichier idoine
146                if (count($resultats['item_non']) > 0) {
147                        $texte['non'] .= '<div class="error">'  . "\n";
148                        if (count($resultats['item_non']) == 1) {
149                                $texte['non'] .= _T('langonet:message_ok_non_definis_1', array('module' => $resultats['module'], 'ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
150                        }
151                        else {
152                                $texte['non'] .= _T('langonet:message_ok_non_definis_n', array('module' => $resultats['module'], 'nberr' => count($resultats['item_non']), 'ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
153                        }
154                        $texte['non'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
155                        $texte['non'] .= afficher_lignes('non', $resultats['fichier_non'], array(), $f_coloriser);
156                        $texte['non'] .= "</div><br />\n";
157                        $texte['non'] .= bouton_action(_T('langonet:bouton_corriger'), 
158                                                                                        generer_action_auteur('langonet_telecharger', $corrections['fichier']),
159                                                                                        "", "", _T('langonet:bulle_corriger'));
160                        $texte['non'] .= "</div>\n";
161                }
162                else {
163                        $texte['non'] .= '<div class="success">' . "\n";
164                        $texte['non'] .= _T('langonet:message_ok_non_definis_0', array('module' => $resultats['module'], 'ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
165                        $texte['non'] .= "</div>\n";
166                }
167
168                // Liste des items n'appartenant pas au module en cours de verification
169                // et non definis avec certitude dans le fichier idoine
170                if (count($resultats['item_non_mais_nok']) > 0) {
171                        $texte['non_mais_nok'] .= '<div class="error">'  . "\n";
172                        if (count($resultats['item_non_mais_nok']) == 1) {
173                                $texte['non_mais_nok'] .= _T('langonet:message_ok_nonmaisnok_definis_1', array('ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
174                        }
175                        else {
176                                $texte['non_mais_nok'] .= _T('langonet:message_ok_nonmaisnok_definis_n', array('nberr' => count($resultats['item_non_mais_nok']), 'ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
177                        }
178                        $texte['non_mais_nok'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
179                        $texte['non_mais_nok'] .= afficher_lignes('non_mais_nok', $resultats['fichier_non_mais_nok'], $resultats['definition_non_mais_nok'], $f_coloriser);
180                        $texte['non_mais_nok'] .= "</div>\n</div>\n";
181                }
182                else {
183                        $texte['non_mais_nok'] .= '<div class="success">' . "\n";
184                        $texte['non_mais_nok'] .= _T('langonet:message_ok_nonmaisnok_definis_0', array('ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
185                        $texte['non_mais_nok'] .= "</div>\n";
186                }
187
188                // Liste des items n'appartenant pas au module en cours de verification
189                // mais definis dans le module idoine
190                if (count($resultats['item_non_mais']) > 0) {
191                        $texte['non_mais'] .= '<div class="notice">' . "\n";
192                        if (count($resultats['item_non_mais']) == 1) {
193                                $texte['non_mais'] .= _T('langonet:message_ok_nonmais_definis_1', array('ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
194                        }
195                        else {
196                                $texte['non_mais'] .= _T('langonet:message_ok_nonmais_definis_n', array('nberr' => count($resultats['item_non_mais']), 'ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
197                        }
198                        $texte['non_mais'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
199                        $texte['non_mais'] .= afficher_lignes('non_mais', $resultats['fichier_non_mais'], $resultats['definition_non_mais'], $f_coloriser);
200                        $texte['non_mais'] .= "</div>\n</div>\n";
201                }
202                else {
203                        $texte['non_mais'] .= '<div class="success">' . "\n";
204                        $texte['non_mais'] .= _T('langonet:message_ok_nonmais_definis_0', array('ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
205                        $texte['non_mais'] .= "</div>\n";
206                }
207
208                // Liste des items non definis sans certitude car utilises dans un contexte variable
209                if (count($resultats['item_peut_etre']) > 0) {
210                        $texte['peut_etre'] .= '<div class="notice">' . "\n";
211                        if (count($resultats['item_peut_etre']) == 1) {
212                                $texte['peut_etre'] .= _T('langonet:message_ok_definis_incertains_1', array('langue' => $resultats['langue'])) . "\n";
213                        }
214                        else {
215                                $texte['peut_etre'] .= _T('langonet:message_ok_definis_incertains_n', array('nberr' => count($resultats['item_peut_etre']), 'langue' => $resultats['langue'])) . "\n";
216                        }
217                        $texte['peut_etre'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
218                        $texte['peut_etre'] .= afficher_lignes('peut_etre', $resultats['fichier_peut_etre'], array(), $f_coloriser);
219                        $texte['peut_etre'] .= "</div>\n</div>\n";
220                }
221                else {
222                        $texte['peut_etre'] .= '<div class="success">' . "\n";
223                        $texte['peut_etre'] .= _T('langonet:message_ok_definis_incertains_0', array('module' => $resultats['module'])) . "\n";
224                        $texte['peut_etre'] .= "</div>\n";
225                }
226        }
227
228        // Verification de type "Utilisation"
229        else if ($verification == 'utilisation') {
230                // Liste des items non utilises avec certitude
231                if (count($resultats['item_non']) > 0) {
232                        $texte['non'] .= '<div class="error">'  . "\n";
233                        if (count($resultats['item_non']) == 1) {
234                                $texte['non'] .= _T('langonet:message_ok_non_utilises_1', array('ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
235                        }
236                        else {
237                                $texte['non'] .= _T('langonet:message_ok_non_utilises_n', array('nberr' => count($resultats['item_non']), 'ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
238                        }
239                        $texte['non'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
240                        asort($resultats['item_non'], SORT_STRING);
241                        foreach($resultats['item_non'] as $_cle => $_item) {
242                                $texte['non'] .= "<div class=\"titrem\">\n" . $_item . "</div>\n";
243                        }
244                        $texte['non'] .= "</div><br />\n";
245                        $texte['non'] .= bouton_action(_T('langonet:bouton_corriger'), 
246                                                        generer_action_auteur('langonet_telecharger', $corrections['fichier']),
247                                                        "", "", _T('langonet:bulle_corriger'));
248                        $texte['non'] .= "</div>\n";
249                }
250                else {
251                        $texte['non'] .= '<div class="success">' . "\n";
252                        $texte['non'] .= _T('langonet:message_ok_non_utilises_0', array('ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
253                        $texte['non'] .= "</div>\n";
254                }
255
256                // Liste des items non utilises sans certitude
257                if (count($resultats['item_peut_etre']) > 0) {
258                        $texte['peut_etre'] .= '<div class="notice">' . "\n";
259                        if (count($resultats['item_peut_etre']) == 1) {
260                                $texte['peut_etre'] .= _T('langonet:message_ok_utilises_incertains_1') . "\n";
261                        }
262                        else {
263                                $texte['peut_etre'] .= _T('langonet:message_ok_utilises_incertains_n', array('nberr' => count($resultats['item_peut_etre']))) . "\n";
264                        }
265                        $texte['peut_etre'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
266                        $texte['peut_etre'] .= afficher_lignes('peut_etre', $resultats['fichier_peut_etre'], array(), $f_coloriser);
267                        $texte['peut_etre'] .= "</div>\n</div>\n";
268                }
269                else {
270                        $texte['peut_etre'] .= '<div class="success">' . "\n";
271                        $texte['peut_etre'] .= _T('langonet:message_ok_utilises_incertains_0', array('module' => $resultats['module'])) . "\n";
272                        $texte['peut_etre'] .= "</div>\n";
273                }
274        }
275
276        // Verification de type "Fonction_L"
277        else {
278                // Liste des cas d'utilisation de la fonction _L()
279                if (count($resultats['item_non']) > 0) {
280                        $texte['non'] .= '<div class="error">'  . "\n";
281                        if (count($resultats['item_non']) == 1) {
282                                $texte['non'] .= _T('langonet:message_ok_fonction_l_1', array('ou_fichier' => $resultats['ou_fichier'])) . "\n";
283                        }
284                        else {
285                                $texte['non'] .= _T('langonet:message_ok_fonction_l_n', array('nberr' => count($resultats['item_non']), 'ou_fichier' => $resultats['ou_fichier'])) . "\n";
286                        }
287                        $texte['non'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
288                        $texte['non'] .= afficher_lignes('non', $resultats['fichier_non'], $resultats['item_md5'], $f_coloriser);
289                        $texte['non'] .= "</div><br />\n";
290                        $texte['non'] .= bouton_action(_T('langonet:bouton_corriger'), 
291                                                        generer_action_auteur('langonet_telecharger', $corrections['fichier']),
292                                                        "", "", _T('langonet:bulle_corriger'));
293                        $texte['non'] .= "</div>\n";
294                }
295                else {
296                        $texte['non'] .= '<div class="success">' . "\n";
297                        $texte['non'] .= _T('langonet:message_ok_fonction_l_0', array('ou_fichier' => $resultats['ou_fichier'])) . "\n";
298                        $texte['non'] .= "</div>\n";
299                }
300        }
301
302        // Generation du fichier de log contenant le texte complet des resultats
303        $resume = 'langonet:message_ok_fichier_log';
304        $ok = creer_log($verification, $resultats, $texte, $log_fichier);
305        if (!$ok) {
306                $retour['message_erreur'] .= _T('langonet:message_nok_fichier_log');
307                spip_log("echec de creation du fichier $log_fichier", "langonet");
308                return $retour;
309        }
310
311        if ($verification == 'fonction_l' OR $verification == 'definition' ) {
312                // On cree un fichier de script capable de modifier les fichiers de l'arbo specifiee
313                //  Il porte le meme nom que le log avec l'extension .sh
314                $script = substr($log_fichier, 0, strlen($log_fichier)-4) . '.sh';
315                if ($contenu = creer_script($resultats, $verification)) {
316                        if (!ecrire_fichier($script, $contenu)) {
317                                $retour['message_erreur'] .= _T('langonet:message_nok_fichier_script');
318                                spip_log("echec de creation du fichier $script", "langonet");
319                                return $retour;
320                        }
321                        $resume = 'langonet:message_ok_fichier_log_script';
322                }
323        }
324
325        // Tout s'est bien passe on renvoie le message ok et les resultats de la verification
326        $retour['message_ok']['resume'] = _T($resume, array('log_fichier' => $log_fichier, 'script' => $script));
327        $retour['message_ok']['resultats'] = $texte['non'] . $texte['non_mais_nok'] . $texte['non_mais'] . $texte['peut_etre'];
328
329        return $retour;
330}
331
332/**
333 * Formate une liste de resultats
334 *
335 * @param string $type
336 * @param array $tableau
337 * @param array $extra
338 * @param string $f_coloriser
339 * @return string
340 */
341
342/// $type               => le type de resultats (non, non_mais, non_mais_nok, peut_etre)
343/// $tableau    => [item][fichier utilisant][num ligne][] => extrait ligne
344/// $extra              => [item][] => fichier de langue ou item est defini
345///                             ou [codage(item)] => item, ou l'item est l'argument de _L()
346/// $f_coloriser        => la fonction de colorisation ou NULL si le plugin coloration_code n'est pas actif 
347function afficher_lignes($type, $tableau, $extra=array(), $f_coloriser) {
348
349        include_spip('inc/layer');
350
351        // Detail des fichiers utilisant les items de langue
352        ksort($tableau);
353        foreach ($tableau as $item => $detail) {
354                $liste_lignes .= bouton_block_depliable($item, false) .
355                                 debut_block_depliable(false) .
356                                 "<p style=\"padding-left:2em;\">\n  ".
357                                 _T('langonet:texte_item_utilise_ou')."\n<br />";       
358                foreach ($detail as $fichier => $lignes) {
359                        $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier. "</span><br />\n";
360                        foreach ($lignes as $ligne_n => $ligne_t) {
361                                $L = sprintf("%04s", intval($ligne_n+1));
362                                $T = '... '.$ligne_t[0].' ...';
363                                if ($f_coloriser) {
364                                        // Traitement de la coloration de l'extrait. C'est la fonction de coloration qui s'occupe des
365                                        // entites html
366                                        $infos = pathinfo($fichier);
367                                        $extension = ($infos['extension'] == 'html') ? 'html4strict' : $infos['extension'];
368                                        $T = $f_coloriser($T,  $extension, 'code', 'span');
369                                } else $T = htmlspecialchars($T);
370
371                                $liste_lignes .= "\t\t<code style='padding-left:4em;text-indent: -5em;'>L$L : $T</code><br />\n";
372                        }
373                }
374                $liste_lignes .= "</p>";
375
376                if ($type != 'non' AND is_array($extra[$item])) {
377                        $liste_lignes .= "<p style=\"padding-left:2em;\">  " . (($type=='non_mais_nok') ? _T('langonet:texte_item_mal_defini') : _T('langonet:texte_item_defini_ou')) . "\n<br />";
378                        foreach ($extra[$item] as $fichier_def) {
379                                $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier_def. "</span><br />\n";
380                        }
381                        $liste_lignes .= "</p>\n";
382                } elseif ($type == 'non_mais_nok') {
383                                $liste_lignes .= "<p style=\"padding-left:2em;\">  " . _T('langonet:texte_item_non_defini') . "</p>\n<br />\n";
384                }
385                $liste_lignes .= fin_block();
386        }
387
388        return $liste_lignes;
389}
390
391/**
392 * Cree le fichier de log avec le texte des resultats.
393 *
394 * @param string $verification
395 * @param array $resultats
396 * @param string $texte
397 * @param string &$log_fichier (nom du fichier cree retourne par reference)
398 * @return boolean
399 */
400function creer_log($verification, $resultats, $texte, &$log_fichier) {
401
402        // Fichier de log dans tmp/langonet/
403        $ou_fichier =  $resultats['ou_fichier'];
404        $log_prefixe = ($verification == 'fonction_l') ? str_replace("/", "%", $ou_fichier) : basename($resultats['langue'], '.php') . '_';
405        $log_nom = $log_prefixe . $verification[0] . '_' . date("Ymd_His").'.log';
406        $log_rep = sous_repertoire(_DIR_TMP, "langonet");
407        $log_rep = sous_repertoire($log_rep, "verification");
408        $log_rep = sous_repertoire($log_rep, $verification);
409        $log_fichier = $log_rep . $log_nom;
410
411        // Texte du fichier en UTF-8
412        include_spip('inc/langonet_utils');
413
414        $sep = str_repeat('*', 77);
415
416        // -- En-tete resumant la verification
417        $log_texte = "# $sep\n# LangOnet : " . 
418                entite2utf(_T('langonet:entete_log_date_creation', array('log_date_jour' => affdate(date('Y-m-d H:i:s')), 'log_date_heure' => date('H:i:s')))) .
419                "\n# $sep\n# " .
420                entite2utf(_T('langonet:label_verification')) . " : " .
421                entite2utf(_T('langonet:label_verification_'.$verification)) .
422                "\n";
423
424        if ($verification != 'fonction_l') {
425                $log_texte .= "# " . 
426                        entite2utf(_T('langonet:label_module')) . " : " .
427                        entite2utf($resultats['module']) . "\n# " .
428                        entite2utf(_T('langonet:label_fichier_verifie')) . " : " .
429                        entite2utf($resultats['langue']) . "\n";
430        }
431
432        $log_texte .= "# " .
433                entite2utf(_T('langonet:label_arborescence_scannee')) . " : " .
434                entite2utf($ou_fichier) . 
435                "\n# $sep\n# " .
436                entite2utf(_T('langonet:label_erreur')) . " : " .
437                strval(count($resultats['item_non'])+count($resultats['item_non_mais_nok']));
438
439        if ($verification != 'fonction_l') {
440                $log_texte .= "\n# " . entite2utf(_T('langonet:label_avertissement')) . " : " . strval(count($resultats['item_non_mais'])+count($resultats['item_peut_etre']));
441        }
442        $log_texte .= "\n# $sep\n";
443
444        // -- Texte des resultats: erreur (non definis ou non utilises)
445        $log_texte .= "\n# $sep\n# " .
446                entite2utf(_T('langonet:entete_log_erreur_'.$verification)) .
447                "\n# $sep\n" .
448                texte2log($texte['non']);
449
450        // -- Texte des resultats: erreur (non definis mais n'appartenant pas au module en cours de verification)
451        if ($verification == 'definition') {
452                $log_texte .= "\n\n# $sep\n# " . 
453                  entite2utf(_T('langonet:entete_log_erreur_definition_nonmais')) .
454                  "\n# $sep\n" .
455                  texte2log($texte['non_mais_nok']);
456
457        // -- Texte des resultats: avertissement (definis mais dans un autre module)
458                $log_texte .= "\n\n# $sep\n# " . 
459                  entite2utf(_T('langonet:entete_log_avertissement_nonmais')) .
460                  "\n# $sep\n" .
461                  texte2log($texte['non_mais']);
462        }
463
464        // -- Texte des resultats: avertissement (non definis ou non utilises sans certitude)
465        if ($verification != 'fonction_l') {
466                $log_texte .= "\n\n# $sep\n# " . 
467                  entite2utf(_T('langonet:entete_log_avertissement_peutetre_'.$verification)) . 
468                  "\n# $sep\n" .
469                texte2log($texte['peut_etre']);
470        }
471
472        $ok = ecrire_fichier($log_fichier, $log_texte);
473        return $ok;
474}
475
476/**
477 * Construit un script Shell
478 * s'appliquant sur les fichiers contenant les chaines indefinies
479 * @param array $resultats
480 * @param string $verification
481 * @return boolean
482 */
483function creer_script($resultats, $verification) {
484        $ou = $resultats['ou_fichier'];
485        $prefixe = ($resultats['module'] == 'spip' 
486                                OR $resultats['module'] == 'ecrire' 
487                                OR $resultats['module'] == 'public') ? '' : $resultats['module'] . ':' ;
488
489        $files = $sed = array();
490        $_l = ($verification=='fonction_l');
491        $all = $resultats[$_l ? "fichier_non" : 'fichier_non_mais_nok'];
492        // Pour chaque item on construit le sed
493        // et on collecte au passage les fichiers qui le contiennent
494        foreach ($all as $index => $val) {
495                foreach($val as $f => $l) $files[$f]= str_replace(_DIR_RACINE . $ou, '', $f);
496                $fichier = key($val);
497                $val = array_shift($val);
498                $val = array_shift($val);
499                $val = array_shift($val);
500                if ($_l) {
501                        // gestion des backslash imparfaite, mais c'est deja ca
502                        if (preg_match(_LANGONET_FONCTION_L, $val, $m))
503                                $occ = str_replace('\\', '.', $m[1]);
504                        elseif (preg_match(_LANGONET_FONCTION_L2, $val, $m))
505                                $occ = $m[1];
506                        else continue;
507                } else {
508                  // si les item n'ont pas que des lettres, normaliser
509                        $re = strpos($fichier, '.xml') ? _LANGONET_TROUVER_ITEM_X : _LANGONET_TROUVER_ITEM_HP;           
510                        if (!preg_match($re, $val, $m)) continue;
511                        if ($m[0][0] !== '<') continue;
512                        if (preg_match(',^\w+$,', $occ = $m[2])) continue;
513                }
514                // Un item avec $ est intraduisible.
515                if (strpos($occ, '$') !== false)  continue;
516                $occ = str_replace('%', '\\%', $occ);
517                $cite = $_l ? "s%_L *( *.$occ *.%_T('$prefixe$index'%;" : "s%<:$occ%<:$prefixe$index%;";
518                $sed[$cite]=strlen($occ); 
519        }
520        if (!$sed) return '';
521        // Trier par ordre decroissant des longueurs des items a remplacer:
522        // "truc_x" doit etre traite avant "truc"
523        arsort($sed);
524        // Creer le texte du script
525        $in = _L('executer ce script dans ');
526        $out = _L("Si correct, rappeler ce script avec 'mv' comme argument pour modifier les fichiers.");
527        return "echo \"$in $ou\"\n" .
528                'if [ "$*" == "mv" ]; then comm=mv; else comm=diff; fi' .
529                "\nfor i in " .
530                join(" ", $files) .
531                "\ndo\nr=\$(basename \$i)\nsed \"\n" .
532                join("\n", array_keys($sed)) .
533                "\n\" \$i > /tmp/\$r\n\$comm /tmp/\$r \$i\ndone\n" .
534                "\nif [ \"$*\" != 'mv' ]; then echo; echo \"$out\"; fi";
535}
536
537// fonction purement utilitaire
538function texte2log($texte) {
539        // On vire les tags
540        $texte_log = strip_tags($texte);
541        // On passe en utf-8
542        $texte_log = entite2utf($texte_log);
543
544        return $texte_log;
545}
546
547?>
Note: See TracBrowser for help on using the repository browser.