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

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

Indentation et formatage

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