source: spip-zone/_plugins_/trad-lang/trunk/inc/salvatore_lecteur.php @ 119740

Last change on this file since 119740 was 119740, checked in by Cerdic, 7 months ago

pas d'espace sur les operateurs de comparaison dans le sql

  • Property svn:eol-style set to native
File size: 20.3 KB
Line 
1<?php
2
3/*
4    This file is part of Salvatore, the translation robot of Trad-lang (SPIP)
5
6    Salvatore is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    Trad-Lang is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with Trad-Lang; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20    Copyright 2003-2015
21        Florent Jugla <florent.jugla@eledo.com>,
22        Philippe Riviere <fil@rezo.net>,
23        Chryjs <chryjs!@!free!.!fr>,
24                kent1 <kent1@arscenic.info>
25*/
26
27
28include_spip('base/abstract_sql');
29include_spip('inc/charsets');
30include_spip('inc/filtres');
31include_spip('inc/texte');
32include_spip('inc/xml');
33include_spip('inc/lang_liste');
34include_spip('inc/session');
35
36/**
37 * @param array $liste_sources
38 * @param string $dir_modules
39 * @throws Exception
40 */
41function salvatore_lire($liste_sources, $dir_modules = null){
42        include_spip('inc/salvatore');
43        salvatore_init();
44
45        // on va modifier a la base, il faut qu'elle soit a jour
46        salvatore_verifier_base_upgradee();
47
48        if (is_null($dir_modules)){
49                $dir_modules = _DIR_SALVATORE_MODULES;
50        }
51        salvatore_check_dir($dir_modules);
52        $refresh_time = time()-_SALVATORE_LECTEUR_REFRESH_DELAY;
53
54        $tradlang_verifier_langue_base = charger_fonction('tradlang_verifier_langue_base', 'inc', true);
55        $tradlang_verifier_bilans = charger_fonction('tradlang_verifier_bilans', 'inc', true);
56        $invalider = false;
57
58        foreach ($liste_sources as $source){
59                salvatore_log("\n<info>--- Module " . $source['module'] . " | " . $source['dir_module'] . " | " . $source['url'] . "</info>");
60
61                $module = $source['module'];
62                $dir_module = $dir_modules . $source['dir_module'];
63
64                if ($autre_gestionnaire = salvatore_verifier_gestionnaire_traduction($dir_module, $module)){
65                        salvatore_fail("[Lecteur] Erreur sur $module", "Erreur : import impossible, le fichier est traduit autre part : $autre_gestionnaire\n");
66                }
67
68                /**
69                 * on doit absolument charger la langue principale en premier (a cause des MD5)
70                 */
71                $fichier_lang_principal = $dir_module . '/' . $module . '_' . $source['lang'] . '.php';
72                $liste_fichiers_lang = glob($dir_module . '/' . $module . '_*.php');
73                $liste_fichiers_lang = array_diff($liste_fichiers_lang, [$fichier_lang_principal]);
74
75                if (!in_array($fichier_lang_principal, $liste_fichiers_lang)){
76                        salvatore_fail("[Lecteur] Erreur sur $module", "|-- Pas de fichier lang principal $fichier_lang_principal : import impossible pour ce module");
77                }
78
79                /**
80                 * On regarde quelle est la date de dernière modification du fichier de langue principale
81                 */
82                $last_update = filemtime($fichier_lang_principal);
83
84                if ($row_module = salvatore_retrouver_tradlang_module($dir_module, $module)) {
85                        $id_tradlang_module = intval($row_module['id_tradlang_module']);
86                        /**
87                         * Si la langue mere a changée, on la modifie
88                         */
89                        if ($row_module['lang_mere']!==$source['lang']){
90                                sql_updateq('spip_tradlang_modules', array('lang_mere' => $source['lang']), 'id_tradlang_module=' . intval($id_tradlang_module));
91                                $last_update = time();
92                        }
93                        /**
94                         * Si le dir_module a change, on le met a jour
95                         */
96                        if ($row_module['dir_module']!==$source['dir_module']){
97                                sql_updateq('spip_tradlang_modules', array('dir_module' => $source['dir_module']), 'id_tradlang_module=' . intval($id_tradlang_module));
98                                $last_update = time();
99                        }
100                }
101
102                $langues_a_jour = array();
103
104                if (!$row_module or $last_update>$refresh_time){
105                        $priorite = '';
106                        $modifs = 0;
107                        if (defined('_TRAD_PRIORITE_DEFAUT')){
108                                $priorite = _TRAD_PRIORITE_DEFAUT;
109                        }
110
111                        /**
112                         * Si le module n'existe pas... on le crée
113                         */
114                        if (!$row_module or !$id_tradlang_module = intval($row_module['id_tradlang_module'])){
115                                $insert = [
116                                        'module' => $source['module'],
117                                        'dir_module' => $source['dir_module'],
118                                        'nom_mod' => $source['module'],
119                                        'lang_prefix' => $source['module'],
120                                        'lang_mere' => $source['lang'],
121                                        'priorite' => $priorite,
122                                ];
123                                $id_tradlang_module = sql_insertq('spip_tradlang_modules', $insert);
124                                /**
125                                 * Si insertion echoue on fail
126                                 */
127                                if (!intval($id_tradlang_module)){
128                                        salvatore_fail("[Lecteur] Erreur sur $module", "Echec insertion dans spip_tradlang_modules " .