source: spip-zone/_plugins_/ieconfig/trunk/formulaires/ieconfig_import.php @ 99020

Last change on this file since 99020 was 99020, checked in by teddy.spip@…, 4 years ago

Formatage et indentation du code

File size: 8.4 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7function ieconfig_saisies_import() {
8        // Etape de selection du fichier
9        if (!_request('_code_yaml') or _request('annuler') or _request('importer')) {
10                $saisies = array(
11                        array(
12                                'saisie' => 'fieldset',
13                                'options' => array(
14                                        'nom' => 'ieconfig_import_choix_fichier',
15                                        'label' => '<:ieconfig:label_ieconfig_import_choix_fichier:>',
16                                        'icone' => 'img/ieconfig-import.png',
17                                ),
18                                'saisies' => array(
19                                        array(
20                                                'saisie' => 'input',
21                                                'options' => array(
22                                                        'type' => 'file',
23                                                        'nom' => 'ieconfig_import_fichier',
24                                                        'label' => '<:ieconfig:label_ieconfig_import_fichier:>',
25                                                        'explication' => '<:ieconfig:explication_ieconfig_import_fichier:>',
26                                                ),
27                                        ),
28                                        array(
29                                                'saisie' => 'selection',
30                                                'options' => array(
31                                                        'type' => 'selection',
32                                                        'nom' => 'ieconfig_import_local',
33                                                        'label' => '<:ieconfig:label_ieconfig_import_local:>',
34                                                        'explication' => '<:ieconfig:explication_ieconfig_import_local:>',
35                                                        'datas' => ieconfig_config_locales(),
36                                                ),
37                                        ),
38                                ),
39                        ),
40                );
41                // Options d'importations
42        } else {
43                include_spip('inc/yaml');
44                $config = yaml_decode(_request('_code_yaml'));
45                $texte_explication = '<b>' . _T('ieconfig:texte_nom') . '</b> ' . _T_ou_typo($config['nom']);
46                if ($config['description'] != '') {
47                        $texte_explication .= '<br /><b>' . _T('ieconfig:texte_description') . '</b> ' . _T_ou_typo($config['description']);
48                }
49                // On identifie les entrées ne correspondant pas à un plugin
50                // Ou bien non déclarées dans ieconfig_metas
51                // Convention : les clés du tableau de config correspondent aux préfixes des plugins
52                $entrees = $config;
53                unset($entrees['nom']);
54                unset($entrees['description']);
55                unset($entrees['necessite']);
56                $entrees = array_map('strtolower', array_keys($entrees));
57                $plugins = array_map('strtolower', array_keys(unserialize($GLOBALS['meta']['plugin'])));
58                $entrees_prises_en_charge = array_merge(array_keys(pipeline('ieconfig_metas', array())), $plugins);
59                $plugins_manquants = array_diff($entrees, $entrees_prises_en_charge);
60                if (count($plugins_manquants) > 0) {
61                        $texte_explication .= '<p class="reponse_formulaire reponse_formulaire_erreur">' . _T('ieconfig:texte_plugins_manquants', array('plugins' => implode(', ', $plugins_manquants))) . '</p>';
62                }
63
64                $saisies = array(
65                        array(
66                                'saisie' => 'explication',
67                                'options' => array(
68                                        'nom' => 'import_details',
69                                        'texte' => $texte_explication,
70                                ),
71                        ),
72                );
73
74                // Gestion des plugins utilisant le pipeline ieconfig_metas
75                $ieconfig_metas = array();
76                foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data) {
77                        if (isset($config[$prefixe])) {
78                                if (isset($data['icone'])) {
79                                        $icone = chemin_image($data['icone']);
80                                        if (!$icone) {
81                                                $icone = find_in_path($data['icone']);
82                                        }
83                                        if ($icone) {
84                                                $icone = '<img src="' . $icone . '" alt="" style="margin-left:-50px; margin-right:34px;" />';
85                                        }
86                                } else {
87                                        $icone = '';
88                                }
89                                $ieconfig_metas[$prefixe] = $icone . (isset($data['titre']) ? $data['titre'] : $prefixe);
90                        }
91                }
92                if (count($ieconfig_metas) > 0) {
93                        $saisies[] = array(
94                                'saisie' => 'fieldset',
95                                'options' => array(
96                                        'nom' => 'metas_fieldset',
97                                        'label' => _T('ieconfig:label_importer_metas'),
98                                        'icone' => 'config-export-16.png',
99                                ),
100                                'saisies' => array(
101                                        array(
102                                                'saisie' => 'checkbox',
103                                                'options' => array(
104                                                        'nom' => 'import_metas',
105                                                        'label' => _T('ieconfig:label_importer'),
106                                                        'tout_selectionner' => 'oui',
107                                                        'datas' => $ieconfig_metas,
108                                                ),
109                                        ),
110                                ),
111                        );
112                }
113
114                // On passe via le pipeline ieconfig
115                $saisies = pipeline('ieconfig', array(
116                        'args' => array(
117                                'action' => 'form_import',
118                                'config' => $config,
119                        ),
120                        'data' => $saisies,
121                ));
122        }
123
124        return $saisies;
125}
126
127function formulaires_ieconfig_import_charger_dist() {
128        include_spip('inc/saisies');
129        $saisies = ieconfig_saisies_import();
130        $contexte = array(
131                '_saisies' => $saisies,
132        );
133        if (_request('_code_yaml') and !_request('annuler') and !_request('importer')) {
134                $contexte['_code_yaml'] = _request('_code_yaml');
135        }
136
137        return array_merge(saisies_charger_champs($saisies), $contexte);
138}
139
140function formulaires_ieconfig_import_verifier_dist() {
141        $erreurs = array();
142        // Etape de selection du fichier
143        if (!_request('_code_yaml')) {
144                // On a rien transmis et pas de fichier local
145                if (!_request('ieconfig_import_local') and $_FILES['ieconfig_import_fichier']['name'] == '') {
146                        $erreurs['message_erreur'] = _T('ieconfig:message_erreur_fichier_import_manquant');
147                }
148        } // Options d'import
149        else {
150                include_spip('inc/saisies');
151                $erreurs = saisies_verifier(ieconfig_saisies_import());
152        }
153
154        return $erreurs;
155}
156
157function formulaires_ieconfig_import_traiter_dist() {
158        include_spip('inc/config');
159
160        // Si on est à l'étape de sélection d'un fichier de configuration
161        // On place le code YAML dans le contexte
162        if (!_request('_code_yaml')) {
163                if ($_FILES['ieconfig_import_fichier']['name'] != '') {
164                        $dir = sous_repertoire(_DIR_TMP, 'ieconfig');
165                        $hash = md5('ieimport-' . $GLOBALS['visiteur_session']['id_auteur'] . time());
166                        $fichier = $dir . $hash . '-' . $_FILES['ieconfig_import_fichier']['name'];
167                        move_uploaded_file($_FILES['ieconfig_import_fichier']['tmp_name'], $fichier);
168                        lire_fichier($fichier, $code_yaml);
169                        @unlink($fichier);
170                } else {
171                        $fichier = _request('ieconfig_import_local');
172                        lire_fichier($fichier, $code_yaml);
173                }
174                set_request('_code_yaml', $code_yaml);
175        } // Si on valide l'import
176        elseif (_request('importer') && _request('_code_yaml')) {
177                include_spip('inc/yaml');
178                $config = yaml_decode(_request('_code_yaml'));
179
180                // On passe via le pipeline ieconfig
181                $message_erreur = pipeline('ieconfig', array(
182                        'args' => array(
183                                'action' => 'import',
184                                'config' => $config,
185                        ),
186                        'data' => '',
187                ));
188
189                // Gestion des plugins utilisant le pipeline ieconfig_metas
190                $import_metas = _request('import_metas');
191                if (!is_array($import_metas)) {
192                        $import_metas = array();
193                }
194
195                foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data) {
196                        if (in_array($prefixe, $import_metas) && isset($config[$prefixe])) {
197                                if (isset($data['metas_brutes'])) {
198                                        foreach (explode(',', $data['metas_brutes']) as $meta) {
199                                                // On teste le cas ou un prefixe est indique (dernier caractere est *)
200                                                if (substr($meta, -1) == '*') {
201                                                        $p = substr($meta, 0, -1);
202                                                        foreach ($config[$prefixe] as $m => $v) {
203                                                                if (substr($m, 0, strlen($p)) == $p) {
204                                                                        ecrire_config($m . '/', $v);
205                                                                }
206                                                        }
207                                                } elseif (isset($config[$prefixe][$meta])) {
208                                                        ecrire_config($meta . '/', $config[$prefixe][$meta]);
209                                                }
210                                        }
211                                }
212                                if (isset($data['metas_serialize'])) {
213                                        foreach (explode(',', $data['metas_serialize']) as $meta) {
214                                                // On teste le cas ou un prefixe est indique (dernier caractere est *)
215                                                if (substr($meta, -1) == '*') {
216                                                        $p = substr($meta, 0, -1);
217                                                        foreach ($config[$prefixe] as $m => $v) {
218                                                                if (substr($m, 0, strlen($p)) == $p) {
219                                                                        ecrire_config($m . '/', serialize($v));
220                                                                }
221                                                        }
222                                                } elseif (isset($config[$prefixe][$meta])) {
223                                                        ecrire_config($meta . '/', serialize($config[$prefixe][$meta]));
224                                                }
225                                        }
226                                }
227                        }
228                }
229
230                if ($message_erreur != '') {
231                        return array('message_erreur' => $message_erreur);
232                } else {
233                        return array('message_ok' => _T('ieconfig:message_ok_import'));
234                }
235        }
236}
237
238// Renvoie la liste des fichiers de configurations présents dans un sous-répertoires ieconfig/
239function ieconfig_config_locales() {
240        static $liste_config = null;
241
242        if (is_null($liste_config)) {
243                include_spip('inc/yaml');
244                $liste_config = array();
245                $match = '.+[.]yaml$';
246                foreach (array_merge(find_all_in_path('ieconfig/', $match), find_all_in_path(_DIR_TMP . 'ieconfig/', $match)) as $fichier => $chemin) {
247                        $config = yaml_decode_file($chemin);
248                        // On regarde s'il y a un necessite
249                        $ok = true;
250                        if (isset($config['necessite'])) {
251                                if (!is_array($config['necessite'])) {
252                                        $config['necessite'] = array($config['necessite']);
253                                }
254                                foreach ($config['necessite'] as $plugin) {
255                                        if (!defined('_DIR_PLUGIN_' . strtoupper($plugin))) {
256                                                $ok = false;
257                                        }
258                                }
259                        }
260                        //on vérifie s'il y a un champs nom
261                        if ($ok) {
262                                if (isset($config['nom'])) {
263                                        $liste_config[$chemin] = _T_ou_typo($config['nom']);
264                                } else {
265                                        $liste_config[$chemin] = $fichier;
266                                }
267                        }
268                }
269        }
270
271        return $liste_config;
272}
Note: See TracBrowser for help on using the repository browser.