source: spip-zone/_plugins_/trad-lang/trunk/inc/tradlang_verifier_langue_base.php @ 97009

Last change on this file since 97009 was 97009, checked in by kent1@…, 6 years ago

lignes plus courtes

File size: 4.1 KB
Line 
1<?php
2/**
3 * Trad-lang v2
4 * Plugin SPIP de traduction de fichiers de langue
5 * © Florent Jugla, Fil, kent1
6 *
7 */
8
9if (!defined('_ECRIRE_INC_VERSION')) {
10        return;
11}
12
13/**
14 * Fonction de vérification de la concordance d'une langue x par rapport à la langue mère
15 *
16 * @param string $module
17 *              Le nom du module
18 * @param string $langue
19 *              La langue à comparer
20 */
21function inc_tradlang_verifier_langue_base_dist($module, $langue) {
22        /**
23         * Quelle est la langue mère
24         */
25        $langue_mere = sql_getfetsel('lang_mere', 'spip_tradlang_modules', 'module = ' . sql_quote($module));
26
27        $trad_langue_mere_id = $trad_langue_cible_id = $trad_langue_cible_id_attic = array();
28
29        /**
30         * On crée trois tableaux:
31         * -* l'ensemble des id de la langue mère non supprimés
32         * -* l'ensemble des id de la langue cible non supprimés
33         * -* l'ensemble des id de la langue cible qui ont été supprimés par le passé
34         * (dans le cas où l'on doit en récupérer)
35         */
36        $trad_langue_meres = sql_allfetsel('id', 'spip_tradlangs', 'module = ' . sql_quote($module) . ' AND lang = ' . sql_quote($langue_mere) . ' AND statut !="attic"', '', 'id');
37        foreach ($trad_langue_meres as $trad_langue_mere) {
38                $trad_langue_mere_id[] = $trad_langue_mere['id'];
39        }
40        $trad_langue_cibles  = sql_allfetsel('id', 'spip_tradlangs', 'module = ' . sql_quote($module) . ' AND lang = ' . sql_quote($langue).' AND statut !="attic"', '', 'id');
41        foreach ($trad_langue_cibles as $trad_langue_cible) {
42                $trad_langue_cible_id[] = $trad_langue_cible['id'];
43        }
44
45        $trad_langue_cibles_attic  = sql_allfetsel('id', 'spip_tradlangs', 'module=' . sql_quote($module) . ' AND lang = ' . sql_quote($langue) . ' AND statut ="attic"', '', 'id');
46        foreach ($trad_langue_cibles_attic as $trad_langue_cible_attic) {
47                $trad_langue_cible_id_attic[] = $trad_langue_cible_attic['id'];
48        }
49
50        $inserees = $supprimees = $recuperees = 0;
51
52        /**
53         * $diff1 est l'ensemble des chaines manquantes dans la langue cible
54         * et donc à insérer
55         *
56         * On met dans un tableau les chaines en question si on a au moins un résultat
57         */
58        $diff1 = array_diff($trad_langue_mere_id, $trad_langue_cible_id);
59        if (count($diff1) > 0) {
60                $diff1_array = sql_allfetsel('*', 'spip_tradlangs', 'module = ' . sql_quote($module) . ' AND lang = ' . sql_quote($langue_mere) . ' AND ' . sql_in('id', $diff1));
61        }
62
63        /**
64         * $diff2 est l'ensemble des chaines en trop dans la langue fille
65         * et donc à supprimer
66         */
67        $diff2 = array_diff($trad_langue_cible_id, $trad_langue_mere_id);
68
69        /**
70         * Si on a des éléments dans les diffs, on applique les modifications
71         */
72        if ((count($diff1) > 0) or (count($diff2) > 0)) {
73                if (isset($diff1_array) and is_array($diff1_array)) {
74                        foreach ($diff1_array as $key => $array) {
75                                /**
76                                 * La chaine était préalablement supprimée
77                                 * Elle a le statut "attic"
78                                 * On la récupère donc en lui donnant le statut "MODIF"
79                                 */
80                                if (in_array($array['id'], $trad_langue_cible_id_attic)) {
81                                        $titre = $array['id'].' : '.$array['module'].' - '.$langue;
82                                        sql_updateq('spip_tradlangs', array('statut' => 'MODIF', 'titre' => $titre), 'id = ' . sql_quote($array['id']).' AND lang='.sql_quote($langue).' AND statut="attic"');
83                                        $recuperees++;
84                                } else {
85                                        $array['orig'] = 0;
86                                        $array['lang'] = $langue;
87                                        $array['titre'] = $array['id'].' : '.$array['module'].' - '.$langue;
88                                        $array['statut'] = 'NEW';
89                                        unset($array['maj']);
90                                        unset($array['id_tradlang']);
91                                        unset($array['traducteur']);
92                                        $id_tradlang = sql_insertq('spip_tradlangs', $array);
93                                        $inserees++;
94                                }
95                        }
96                }
97                /**
98                 * On donne le statut attic aux chaînes en trop
99                 * On incrémente le nombre de chaînes supprimées
100                 */
101                if (count($diff2) > 0) {
102                        foreach ($diff2 as $key => $id) {
103                                sql_updateq('spip_tradlangs', array('statut' => 'attic'), 'id = ' . sql_quote($id).' AND lang = ' . sql_quote($langue).' AND module = '.sql_quote($module));
104                                $supprimees++;
105                        }
106                }
107        } else {
108                return array('0','0','0');
109        }
110
111        include_spip('inc/invalideur');
112        suivre_invalideur('1');
113        spip_log("insert => $inserees - suppressions => $supprimees - recuperations => $recuperees", 'bilan.'._LOG_ERREUR);
114        return array($inserees,$supprimees,$recuperees);
115}
Note: See TracBrowser for help on using the repository browser.