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

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

On change l'affichage du fichier de log des vérifications dans la mediabox : passage d'une action à un exec qui permet d'obtenir un afficage correct non sujet aux entités html.

  • Property svn:eol-style set to native
File size: 18.7 KB
Line 
1<?php
2
3function formulaires_langonet_verifier_charger() {
4        return array('verification' => _request('verification'),
5                                'fichier_langue' => _request('fichier_langue'),
6                                'dossier_scan' => _request('dossier_scan'));
7}
8
9function formulaires_langonet_verifier_verifier() {
10        $erreurs = array();
11        if (_request('verification') != 'fonction_l') {
12                if (_request('fichier_langue') == '0') {
13                        $erreurs['fichier_langue'] = _T('langonet:message_nok_champ_obligatoire');
14                }
15        }
16        if (_request('dossier_scan') == '0') {
17                $erreurs['dossier_scan'] = _T('langonet:message_nok_champ_obligatoire');
18        }
19        return $erreurs;
20}
21
22function formulaires_langonet_verifier_traiter() {
23
24        // Recuperation des champs du formulaire
25        //   $verification -> type de verification
26        //                   'definition' ou 'utilisation'
27        //   $rep          -> nom du repertoire parent de lang/
28        //                    'langonet' pour 'langonet/lang/'
29        //                    correspond generalement au 'nom' du plugin
30        //   $module       -> prefixe du fichier de langue
31        //                    'langonet' pour 'langonet_fr.php'
32        //                    parfois different du 'nom' du plugin
33        //   $langue       -> index du nom de langue
34        //                    'fr' pour 'langonet_fr.php'
35        //   $ou_langue    -> chemin vers le fichier de langue a verifier
36        //                    'plugins/auto/langonet/lang'
37        //   $ou_fichier   -> racine de l'arborescence a verifier
38        //                    'plugins/auto/langonet'
39        $verification = _request('verification');
40        $ou_fichier = _request('dossier_scan');
41        if ($verification != 'fonction_l') {
42                $retour_select_langue = explode(':', _request('fichier_langue'));
43                $rep = $retour_select_langue[0];
44                $module = $retour_select_langue[1];
45                $langue = $retour_select_langue[2];
46                $ou_langue = $retour_select_langue[3];
47
48                // Chargement de la fonction de verification
49                $langonet_verifier_items = charger_fonction('langonet_verifier_items','inc');
50       
51                // Verification et formatage des resultats pour affichage
52                $retour = array();
53                $resultats = $langonet_verifier_items($rep, $module, $langue, $ou_langue, $ou_fichier, $verification);
54        }
55        else {
56                // Chargement de la fonction de verification
57                $langonet_verifier_items = charger_fonction('langonet_verifier_l','inc');
58       
59                // Verification et formatage des resultats pour affichage
60                $retour = array();
61                $resultats = $langonet_verifier_items($ou_fichier);
62        }
63
64        // Traitement des résultats
65        if ($resultats['erreur']) {
66                $retour['message_erreur'] = $resultats['erreur'];
67        }
68        else {
69                $retour = formater_resultats($verification, $resultats);
70        }
71        $retour['editable'] = true;
72        return $retour;
73}
74
75/**
76 * Formatage des resultats pour affichage dans le formulaire
77 *
78 * @param string $verification
79 * @param string $resultats
80 * @return array
81 */
82
83// $resultats    => tableau des resultats (11 sous-tableaux) :
84//                    ["module"] => intitule module
85//                    ["ou_fichier"] => rep plugin
86//                    ["langue"] => nom fichier de lang
87//                    ["item_non"][] => intitule item
88//                    ["fichier_non"][item][fichier utilisant][num de la ligne][] => extrait ligne
89//                    ["item_non_mais_nok"][] => intitule item
90//                    ["fichier_non_mais_nok"][item][fichier utilisant][num de la ligne][] => extrait ligne
91//                    ["definition_non_mais_nok"][item][] => nom fichier de lang
92//                    ["item_non_mais"][] => intitule item
93//                    ["fichier_non_mais"][item][fichier utilisant][num de la ligne][] => extrait ligne
94//                    ["definition_non_mais"][item][] => nom fichier de lang
95//                    ["item_peut_etre"][] => intitule partiel item
96//                    ["fichier_peut_etre"][item][fichier utilisant][num de la ligne][] => extrait ligne
97// $verification => type de verification effectuee (definition ou utilisation)
98function formater_resultats($verification, $resultats) {
99
100        // On initialise le tableau des textes resultant contenant les index:
101        // - ["message_ok"]["resume"] : le message de retour ok fournissant le fichier des resultats
102        // - ["message_ok"]["resultats"] : le texte des résultats
103        // - ["message_erreur"] : le message d'erreur si on a erreur de traitement pendant l'execution
104        $retour = array();
105
106        $texte = array('non' => '', 'non_mais' => '', 'non_mais_nok' => '', 'peut_etre' => '');
107        if ($verification == 'definition') {
108                // Liste des items du module en cours de verification
109                // et non definis avec certitude dans le fichier idoine
110                if (count($resultats['item_non']) > 0) {
111                        $texte['non'] .= '<div class="error">'  . "\n";
112                        if (count($resultats['item_non']) == 1) {
113                                $texte['non'] .= _T('langonet:message_ok_non_definis_1', array('module' => $resultats['module'], 'ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
114                        }
115                        else {
116                                $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";
117                        }
118                        $texte['non'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
119                        $texte['non'] .= afficher_lignes('non', $resultats['fichier_non']);
120                        $texte['non'] .= "</div>\n</div>\n";
121                }
122                else {
123                        $texte['non'] .= '<div class="success">' . "\n";
124                        $texte['non'] .= _T('langonet:message_ok_non_definis_0', array('module' => $resultats['module'], 'ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
125                        $texte['non'] .= "</div>\n";
126                }
127
128                // Liste des items n'appartenant pas au module en cours de verification
129                // et non definis avec certitude dans le fichier idoine
130                if (count($resultats['item_non_mais_nok']) > 0) {
131                        $texte['non_mais_nok'] .= '<div class="error">'  . "\n";
132                        if (count($resultats['item_non_mais_nok']) == 1) {
133                                $texte['non_mais_nok'] .= _T('langonet:message_ok_nonmaisnok_definis_1', array('ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
134                        }
135                        else {
136                                $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";
137                        }
138                        $texte['non_mais_nok'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
139                        $texte['non_mais_nok'] .= afficher_lignes('non_mais_nok', $resultats['fichier_non_mais_nok'], $resultats['definition_non_mais_nok']);
140                        $texte['non_mais_nok'] .= "</div>\n</div>\n";
141                }
142
143                // Liste des items n'appartenant pas au module en cours de verification
144                // mais definis dans le module idoine
145                if (count($resultats['item_non_mais']) > 0) {
146                        $texte['non_mais'] .= '<div class="notice">' . "\n";
147                        if (count($resultats['item_non_mais']) == 1) {
148                                $texte['non_mais'] .= _T('langonet:message_ok_nonmais_definis_1', array('ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
149                        }
150                        else {
151                                $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";
152                        }
153                        $texte['non_mais'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
154                        $texte['non_mais'] .= afficher_lignes('non_mais', $resultats['fichier_non_mais'], $resultats['definition_non_mais']);
155                        $texte['non_mais'] .= "</div>\n</div>\n";
156                }
157                if ((count($resultats['item_non_mais'])+count($resultats['item_non_mais_nok'])) == 0) {
158                        $texte['non_mais'] .= '<div class="success">' . "\n";
159                        $texte['non_mais'] .= _T('langonet:message_ok_nonmais_definis_0', array('ou_fichier' => $resultats['ou_fichier'], 'module' => $resultats['module'])) . "\n";
160                        $texte['non_mais'] .= "</div>\n";
161                }
162
163                // Liste des items non definis sans certitude car utilises dans un contexte variable
164                if (count($resultats['item_peut_etre']) > 0) {
165                        $texte['peut_etre'] .= '<div class="notice">' . "\n";
166                        if (count($resultats['item_peut_etre']) == 1) {
167                                $texte['peut_etre'] .= _T('langonet:message_ok_definis_incertains_1', array('langue' => $resultats['langue'])) . "\n";
168                        }
169                        else {
170                                $texte['peut_etre'] .= _T('langonet:message_ok_definis_incertains_n', array('nberr' => count($resultats['item_peut_etre']), 'langue' => $resultats['langue'])) . "\n";
171                        }
172                        $texte['peut_etre'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
173                        $texte['peut_etre'] .= afficher_lignes('peut_etre', $resultats['fichier_peut_etre']);
174                        $texte['peut_etre'] .= "</div>\n</div>\n";
175                }
176                else {
177                        $texte['peut_etre'] .= '<div class="success">' . "\n";
178                        $texte['peut_etre'] .= _T('langonet:message_ok_definis_incertains_0', array('module' => $resultats['module'])) . "\n";
179                        $texte['peut_etre'] .= "</div>\n";
180                }
181        }
182
183        // Verification de type "Utilisation"
184        else if ($verification == 'utilisation') {
185                // Liste des items non utilises avec certitude
186                if (count($resultats['item_non']) > 0) {
187                        $texte['non'] .= '<div class="error">'  . "\n";
188                        if (count($resultats['item_non']) == 1) {
189                                $texte['non'] .= _T('langonet:message_ok_non_utilises_1', array('ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
190                        }
191                        else {
192                                $texte['non'] .= _T('langonet:message_ok_non_utilises_n', array('nberr' => count($resultats['item_non']), 'ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
193                        }
194                        $texte['non'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
195                        asort($resultats['item_non'], SORT_STRING);
196                        foreach($resultats['item_non'] as $_cle => $_item) {
197                                $texte['non'] .= "<div class=\"titrem\">\n" . $_item . "</div>\n";
198                        }
199                        $texte['non'] .= "</div>\n</div>\n";
200                }
201                else {
202                        $texte['non'] .= '<div class="success">' . "\n";
203                        $texte['non'] .= _T('langonet:message_ok_non_utilises_0', array('ou_fichier' => $resultats['ou_fichier'], 'langue' => $resultats['langue'])) . "\n";
204                        $texte['non'] .= "</div>\n";
205                }
206
207                // Liste des items non utilises sans certitude
208                if (count($resultats['item_peut_etre']) > 0) {
209                        $texte['peut_etre'] .= '<div class="notice">' . "\n";
210                        if (count($resultats['item_peut_etre']) == 1) {
211                                $texte['peut_etre'] .= _T('langonet:message_ok_utilises_incertains_1') . "\n";
212                        }
213                        else {
214                                $texte['peut_etre'] .= _T('langonet:message_ok_utilises_incertains_n', array('nberr' => count($resultats['item_peut_etre']))) . "\n";
215                        }
216                        $texte['peut_etre'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
217                        $texte['peut_etre'] .= afficher_lignes('peut_etre', $resultats['fichier_peut_etre']);
218                        $texte['peut_etre'] .= "</div>\n</div>\n";
219                }
220                else {
221                        $texte['peut_etre'] .= '<div class="success">' . "\n";
222                        $texte['peut_etre'] .= _T('langonet:message_ok_utilises_incertains_0', array('module' => $resultats['module'])) . "\n";
223                        $texte['peut_etre'] .= "</div>\n";
224                }
225        }
226
227        // Verification de type "Fonction_L"
228        else {
229                // Liste des cas d'utilisation de la fonction _L()
230                if (count($resultats['item_non']) > 0) {
231                        $texte['non'] .= '<div class="error">'  . "\n";
232                        if (count($resultats['item_non']) == 1) {
233                                $texte['non'] .= _T('langonet:message_ok_fonction_l_1', array('ou_fichier' => $resultats['ou_fichier'])) . "\n";
234                        }
235                        else {
236                                $texte['non'] .= _T('langonet:message_ok_fonction_l_n', array('nberr' => count($resultats['item_non']), 'ou_fichier' => $resultats['ou_fichier'])) . "\n";
237                        }
238                        $texte['non'] .= '<div style="background-color: #fff; margin-top: 10px;">' . "\n";
239                        $texte['non'] .= afficher_lignes('non', $resultats['fichier_non'], $resultats['item_md5']);
240                        $texte['non'] .= "</div>\n</div>\n";
241                }
242                else {
243                        $texte['non'] .= '<div class="success">' . "\n";
244                        $texte['non'] .= _T('langonet:message_ok_fonction_l_0', array('ou_fichier' => $resultats['ou_fichier'])) . "\n";
245                        $texte['non'] .= "</div>\n";
246                }
247        }
248
249        // Generation du fichier de log contenant le texte complet des resultats
250        $ok = creer_log($verification, $resultats, $texte, $log_fichier);
251        if (!$ok) {
252                $retour['message_erreur'] .= _T('langonet:message_nok_fichier_log');
253                spip_log("echec de creation du fichier $log_fichier", "langonet");
254        }
255        else {
256                // Tout s'est bien passe on renvoie le message ok et les resultats de la verification
257                $retour['message_ok']['resume'] = _T('langonet:message_ok_fichier_log', array('log_fichier' => $log_fichier));
258                $retour['message_ok']['resultats'] = $texte['non'] . $texte['non_mais_nok'] . $texte['non_mais'] . $texte['peut_etre'];
259        }
260        return $retour;
261}
262
263/**
264 * Formate une liste de resultats
265 *
266 * @param string $type
267 * @param array $tableau
268 * @param array $possibles
269 * @return string
270 */
271
272// $type          => le type de resultats (non, non_mais, non_mais_nok, peut_etre)
273// $tableau   => [item][fichier utilisant][num ligne][] => extrait ligne
274// $extra         => [item][] => fichier de langue ou item est defini
275//                        ou [md5(item)] => item, ou l'item est l'argument de _L()
276function afficher_lignes($type, $tableau, $extra=array()) {
277
278        include_spip('inc/layer');
279
280        // Detail des fichiers utilisant les items de langue
281        ksort($tableau);
282        foreach ($tableau as $item => $detail) {
283                if (preg_match(",[a-f0-9]{32},", $item))
284                        // Cas de la verification fonction _L()
285                        $item_affiche = htmlentities($extra[$item]);
286                else
287                        $item_affiche = $item;
288                $liste_lignes .= bouton_block_depliable($item_affiche, false) .
289                                 debut_block_depliable(false) .
290                                 "<p style=\"padding-left:2em;\">\n  ".
291                                 _T('langonet:texte_item_utilise_ou')."\n<br />";       
292                foreach ($tableau[$item] as $fichier => $ligne) {
293                        $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier. "</span><br />\n";
294                        foreach ($tableau[$item][$fichier] as $ligne_n => $ligne_t) {
295                                $L = intval($ligne_n+1);
296                                $T = '... '.htmlentities($ligne_t[0]).' ...';
297                                $liste_lignes .= "\t\t" . '<code class="spip"><span style="padding-left:4em;text-indent: -5em;">L.'. sprintf("%04s", $L) .':</span><span style="padding-left:1em;">'.$T. "</span></code><br />\n";
298                        }
299                }
300                $liste_lignes .= "</p>";
301
302                if ($type != 'non' AND is_array($extra[$item])) {
303                        $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 />";
304                        foreach ($extra[$item] as $fichier_def) {
305                                $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier_def. "</span><br />\n";
306                        }
307                        $liste_lignes .= "</p>\n";
308                }
309                else
310                        if ($type == 'non_mais_nok') {
311                                $liste_lignes .= "<p style=\"padding-left:2em;\">  " . _T('langonet:texte_item_non_defini') . "</p>\n<br />\n";
312                        }
313                $liste_lignes .= fin_block();
314        }
315
316        return $liste_lignes;
317}
318
319/**
320 * Cree le fichier de log avec le texte des resultats
321 *
322 * @param string $verification
323 * @param array $resultats
324 * @param string $texte
325 * @param string &$log_fichier (nom du fichier cree retourne par reference)
326 * @return boolean
327 */
328function creer_log($verification, $resultats, $texte, &$log_fichier) {
329        // Fichier de log dans tmp/langonet/
330        $log_prefixe = ($verification == 'fonction_l') ? str_replace("/", "%", $resultats['ou_fichier']) : basename($resultats['langue'], '.php') . '_';
331        $log_nom = $log_prefixe . $verification[0] . '_' . date("Ymd_His").'.log';
332        $log_rep = sous_repertoire(_DIR_TMP, "langonet");
333        $log_rep = sous_repertoire($log_rep, "verification");
334        $log_rep = sous_repertoire($log_rep, $verification);
335        $log_fichier = $log_rep . $log_nom;
336
337        // Texte du fichier en UTF-8
338        include_spip('inc/langonet_utils');
339        // -- En-tete resumant la verification
340        $log_texte = "/* *****************************************************************************\n" .
341        " * LangOnet : " . 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'))))."\n" .
342        " * *****************************************************************************\n" .
343        " * " . entite2utf(_T('langonet:label_verification')) . " : " . entite2utf(_T('langonet:label_verification_'.$verification)) . "\n";
344        if ($verification != 'fonction_l') {
345                $log_texte .= " * " . entite2utf(_T('langonet:label_module')) . " : " . entite2utf($resultats['module']) . "\n" .
346                " * " . entite2utf(_T('langonet:label_fichier_verifie')) . " : " . entite2utf($resultats['langue']) . "\n";
347        }
348        $log_texte .= " * " . entite2utf(_T('langonet:label_arborescence_scannee')) . " : " . entite2utf($resultats['ou_fichier']) . "\n" .
349        " * *****************************************************************************\n" .
350        " * " . entite2utf(_T('langonet:label_erreur')) . " : " . strval(count($resultats['item_non'])+count($resultats['item_non_mais_nok'])) . "\n";
351        if ($verification != 'fonction_l') {
352                $log_texte .= " * " . entite2utf(_T('langonet:label_avertissement')) . " : " . strval(count($resultats['item_non_mais'])+count($resultats['item_peut_etre'])) . "\n";
353        }
354        $log_texte .= " * *****************************************************************************/\n";
355
356        // -- Texte des resultats: erreur (non definis ou non utilises)
357        $log_texte .= "\n\n/* *****************************************************************************\n" .
358        " * " . entite2utf(_T('langonet:entete_log_erreur_'.$verification)) . "\n" .
359        " * *****************************************************************************/\n" .
360        texte2log($texte['non']);
361
362        // -- Texte des resultats: erreur (non definis mais n'appartenant pas au module en cours de verification)
363        if ($verification == 'definition') {
364                $log_texte .= "\n\n/* *****************************************************************************\n" .
365                " * " . entite2utf(_T('langonet:entete_log_erreur_definition_nonmais')) . "\n" .
366                " * *****************************************************************************/\n" .
367                texte2log($texte['non_mais_nok']);
368        }
369
370        // -- Texte des resultats: avertissement (definis mais dans un autre module)
371        if ($verification == 'definition') {
372                $log_texte .= "\n\n/* *****************************************************************************\n" .
373                " * " . entite2utf(_T('langonet:entete_log_avertissement_nonmais')) . "\n" .
374                " * *****************************************************************************/\n" .
375                texte2log($texte['non_mais']);
376        }
377
378        // -- Texte des resultats: avertissement (non definis ou non utilises sans certitude)
379        if ($verification != 'fonction_l') {
380                $log_texte .= "\n\n/* *****************************************************************************\n" .
381                " * " . entite2utf(_T('langonet:entete_log_avertissement_peutetre_'.$verification)) . "\n" .
382                " * *****************************************************************************/\n" .
383                texte2log($texte['peut_etre']);
384        }
385
386        $ok = ecrire_fichier($log_fichier, $log_texte);
387        return $ok;
388}
389
390// fonction purement utilitaire
391function texte2log($texte) {
392        // On vire les tags
393        $texte_log = strip_tags($texte);
394        // On passe en utf-8
395        $texte_log = entite2utf($texte_log);
396
397        return $texte_log;
398}
399
400?>
Note: See TracBrowser for help on using the repository browser.