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

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

necessite n'est pas un plugin manquant.

File size: 10.8 KB
Line 
1<?php
2
3
4function ieconfig_saisies_import() {
5        // Etape de selection du fichier
6        if (!_request('_code_yaml') or _request('annuler') or _request('importer')) {
7                $saisies = array (
8                        array(
9                                'saisie' => 'fieldset',
10                                'options' => array(
11                                        'nom' => 'ieconfig_import_choix_fichier',
12                                        'label' => '<:ieconfig:label_ieconfig_import_choix_fichier:>',
13                                        'icone' => 'img/ieconfig-import.png'
14                                ),
15                                'saisies' => array(
16                                        array(
17                                                'saisie' => 'input',
18                                                'options' => array(
19                                                        'type' => 'file',
20                                                        'nom' => 'ieconfig_import_fichier',
21                                                        'label' => '<:ieconfig:label_ieconfig_import_fichier:>',
22                                                        'explication' => '<:ieconfig:explication_ieconfig_import_fichier:>'
23                                                )
24                                        ),
25                                        array(
26                                                'saisie' => 'selection',
27                                                'options' => array(
28                                                        'type' => 'selection',
29                                                        'nom' => 'ieconfig_import_local',
30                                                        'label' => '<:ieconfig:label_ieconfig_import_local:>',
31                                                        'explication' => '<:ieconfig:explication_ieconfig_import_local:>',
32                                                        'cacher_option_intro' => 'oui',
33                                                        'datas' => ieconfig_config_locales()
34                                                )
35                                        )
36                                )
37                        )
38                );
39        // Options d'importations
40        } else {
41                include_spip('inc/yaml');
42                $config = yaml_decode(_request('_code_yaml'));
43                $texte_explication = '<b>'._T('ieconfig:texte_nom').'</b> '._T_ou_typo($config['nom']);
44                if ($config['description']!= '')
45                        $texte_explication .= '<br /><b>'._T('ieconfig:texte_description').'</b> '._T_ou_typo($config['description']);
46                // On identifie les entrées ne correspondant pas à un plugin
47                // Convention : les clés du tableau de config correspondent aux préfixes des plugins
48                $entrees = $config;
49                unset($entrees['nom']);
50                unset($entrees['description']);
51                unset($entrees['necessite']);
52                unset($entrees['spip_contenu']);
53                unset($entrees['spip_interactivite']);
54                $entrees = array_map('strtolower',array_keys($entrees));
55                $plugins = array_map('strtolower',array_keys(unserialize($GLOBALS['meta']['plugin'])));
56                $plugins_manquants = array_diff($entrees,$plugins);
57                if (count($plugins_manquants)>0)
58                        $texte_explication .= '<p class="reponse_formulaire reponse_formulaire_erreur">'._T('ieconfig:texte_plugins_manquants',array('plugins' => implode(', ',$plugins_manquants))).'</p>';
59               
60                $saisies = array(
61                        array(
62                                'saisie' => 'explication',
63                                'options' => array(
64                                        'nom' => 'import_details',
65                                        'texte' => $texte_explication
66                                )
67                        )
68                );
69                // Le fichier contient-il une configuration des contenus du site
70                if (isset($config['spip_contenu'])) {
71                        $texte_explication = _T('ieconfig:texte_spip_contenu_import_explication');
72                        $i = 0;
73                        foreach($config['spip_contenu'] as $meta => $valeur)
74                                if ($GLOBALS['meta'][$meta] != $valeur) {
75                                        $texte_explication .= '<br />&raquo; '.$meta.' : '.$GLOBALS['meta'][$meta].' -> '.$valeur;
76                                        $i++;
77                                }
78                        if ($i>0)
79                                $saisies_spip_contenu = array(
80                                        array(
81                                                'saisie' => 'fieldset',
82                                                'options' => array(
83                                                        'nom' => 'spip_contenu',
84                                                        'label' => '<:spip:onglet_contenu_site:>',
85                                                        'icone' => 'images/racine-site-24.gif'
86                                                ),
87                                                'saisies' => array(
88                                                        array(
89                                                                'saisie' => 'explication',
90                                                                'options' => array(
91                                                                        'nom' => 'spip_contenu_explication',
92                                                                        'texte' => $texte_explication
93                                                                )
94                                                        ),
95                                                        array(
96                                                                'saisie' => 'oui_non',
97                                                                'options' => array(
98                                                                        'nom' => 'spip_contenu_importer',
99                                                                        'label' => '<:ieconfig:label_importer:>',
100                                                                        'defaut' => '',
101                                                                )
102                                                        )
103                                                )
104                                        )
105                                );
106                        else
107                                $saisies_spip_contenu = array(
108                                        array(
109                                                'saisie' => 'fieldset',
110                                                'options' => array(
111                                                        'nom' => 'spip_contenu',
112                                                        'label' => '<:spip:onglet_contenu_site:>',
113                                                        'icone' => 'images/racine-site-24.gif'
114                                                ),
115                                                'saisies' => array(
116                                                        array(
117                                                                'saisie' => 'explication',
118                                                                'options' => array(
119                                                                        'nom' => 'spip_contenu_explication',
120                                                                        'texte' => '<:ieconfig:texte_configuration_identique:>'
121                                                                )
122                                                        )
123                                                )
124                                        )
125                                );
126                        $saisies = array_merge($saisies,$saisies_spip_contenu);
127                }
128                // Le fichier contient-il une configuration pour l'onglet interactivité
129                if (isset($config['spip_interactivite'])) {
130                        $texte_explication = _T('ieconfig:texte_spip_interactivite_import_explication');
131                        $i = 0;
132                        foreach($config['spip_interactivite'] as $meta => $valeur)
133                                if ($GLOBALS['meta'][$meta] != $valeur) {
134                                        $texte_explication .= '<br />&raquo; '.$meta.' : '.$GLOBALS['meta'][$meta].' -> '.$valeur;
135                                        $i++;
136                                }
137                        if ($i>0)
138                                $saisies_spip_interactivite = array(
139                                        array(
140                                                'saisie' => 'fieldset',
141                                                'options' => array(
142                                                        'nom' => 'spip_interactivite',
143                                                        'label' => '<:spip:onglet_interactivite:>',
144                                                        'icone' => 'images/forum-interne-24.gif'
145                                                ),
146                                                'saisies' => array(
147                                                        array(
148                                                                'saisie' => 'explication',
149                                                                'options' => array(
150                                                                        'nom' => 'spip_interactivite_explication',
151                                                                        'texte' => $texte_explication
152                                                                )
153                                                        ),
154                                                        array(
155                                                                'saisie' => 'oui_non',
156                                                                'options' => array(
157                                                                        'nom' => 'spip_interactivite_importer',
158                                                                        'label' => '<:ieconfig:label_importer:>',
159                                                                        'defaut' => '',
160                                                                )
161                                                        )
162                                                )
163                                        )
164                                );
165                        else
166                                $saisies_spip_interactivite = array(
167                                        array(
168                                                'saisie' => 'fieldset',
169                                                'options' => array(
170                                                        'nom' => 'spip_interactivite',
171                                                        'label' => '<:spip:onglet_interactivite:>',
172                                                        'icone' => 'images/forum-interne-24.gif'
173                                                ),
174                                                'saisies' => array(
175                                                        array(
176                                                                'saisie' => 'explication',
177                                                                'options' => array(
178                                                                        'nom' => 'spip_interactivite_explication',
179                                                                        'texte' => '<:ieconfig:texte_configuration_identique:>'
180                                                                )
181                                                        )
182                                                )
183                                        )
184                                );
185                        $saisies = array_merge($saisies,$saisies_spip_interactivite);
186                }
187               
188                // On passe via le pipeline ieconfig
189                $saisies = pipeline('ieconfig',array(
190                        'args' => array(
191                                'action' => 'form_import',
192                                'config' => $config
193                        ),
194                        'data' => $saisies
195                ));
196               
197                // Gestion des plugins utilisant le pipeline ieconfig_metas
198                foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){
199                        if(isset($config[$prefixe]))
200                                $saisies[] = array(
201                                        'saisie' => 'fieldset',
202                                        'options' => array(
203                                                'nom' => $prefixe,
204                                                'label' => isset($data['titre']) ? $data['titre'] : $prefixe,
205                                                'icone' => isset($data['icone']) ? $data['icone'] : ''
206                                        ),
207                                        'saisies' => array(
208                                                array(
209                                                        'saisie' => 'oui_non',
210                                                        'options' => array(
211                                                                'nom' => 'import_'.$prefixe,
212                                                                'label' => _T('ieconfig:label_importer'),
213                                                                'defaut' => ''
214                                                        )
215                                                )
216                                        )
217                                );
218                }
219        }
220        return $saisies;
221}
222
223function formulaires_ieconfig_import_charger_dist() {
224        include_spip('inc/saisies');
225        $saisies = ieconfig_saisies_import();
226        $contexte = array(
227                '_saisies' => $saisies,
228        );
229        if (_request('_code_yaml') and !_request('annuler') and !_request('importer'))
230                $contexte['_code_yaml'] = _request('_code_yaml');
231        return array_merge(saisies_charger_champs($saisies),$contexte);
232}
233
234function formulaires_ieconfig_import_verifier_dist() {
235        $erreurs = array();
236        // Etape de selection du fichier
237        if (!_request('_code_yaml')) {
238                // On a rien transmis et pas de fichier local
239                if (!_request('ieconfig_import_local') AND $_FILES['ieconfig_import_fichier']['name']=='')
240                        $erreurs['message_erreur'] = _T('ieconfig:message_erreur_fichier_import_manquant');
241        }
242        // Options d'import
243        else {
244                include_spip('inc/saisies');
245                $erreurs = saisies_verifier(ieconfig_saisies_import());
246        }
247        return $erreurs;
248}
249
250function formulaires_ieconfig_import_traiter_dist() {
251        // Si on est à l'étape de sélection d'un fichier de configuration
252        // On place le code YAML dans le contexte
253        if (!_request('_code_yaml')) {
254                if ($_FILES['ieconfig_import_fichier']['name']!='')
255                        $fichier = $_FILES['ieconfig_import_fichier']['tmp_name'];
256                else
257                        $fichier = _request('ieconfig_import_local');
258                lire_fichier($fichier, $code_yaml);
259                set_request('_code_yaml',$code_yaml);
260        }
261        // Si on valide l'import
262        elseif (_request('importer') && _request('_code_yaml')) {
263                include_spip('inc/yaml');
264                $config = yaml_decode(_request('_code_yaml'));
265               
266                // Le fichier contient-il une configuration des contenus du site à importer
267                if (isset($config['spip_contenu']) && _request('spip_contenu_importer')=='on') {
268                        foreach($config['spip_contenu'] as $nom => $valeur)
269                                ecrire_meta($nom,$valeur);
270                }
271               
272                // Le fichier contient-il une configuration pour l'ongler interactivité
273                if (isset($config['spip_interactivite']) && _request('spip_interactivite_importer')=='on') {
274                        foreach($config['spip_interactivite'] as $nom => $valeur)
275                                ecrire_meta($nom,$valeur);
276                }
277               
278                // On passe via le pipeline ieconfig
279                $message_erreur = pipeline('ieconfig',array(
280                        'args' => array(
281                                'action' => 'import',
282                                'config' => $config
283                        ),
284                        'data' => ''
285                ));
286               
287                // Gestion des plugins utilisant le pipeline ieconfig_metas
288                foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){
289                        if(_request('import_'.$prefixe)=='on' && isset($config[$prefixe])) {
290                                if(isset($data['metas_brutes']))
291                                        foreach(explode(',',$data['metas_brutes']) as $meta)
292                                                if (isset($config[$prefixe][$meta]))
293                                                        ecrire_meta($meta,$config[$prefixe][$meta]);
294                                if(isset($data['metas_serialize']))
295                                        foreach(explode(',',$data['metas_serialize']) as $meta)
296                                                if (isset($config[$prefixe][$meta]))
297                                                        ecrire_meta($meta,serialize($config[$prefixe][$meta]));
298                        }
299                }
300               
301                ecrire_metas();
302               
303                if ($message_erreur!='')
304                        return array('message_erreur' => $message_erreur);
305                else
306                        return array('message_ok' => _T('ieconfig:message_ok_import'));
307        }
308}
309
310// Renvoie la liste des fichiers de configurations présents dans un sous-répertoires ieconfig/
311function ieconfig_config_locales() {
312        static $liste_config = null;
313       
314        if (is_null($liste_config)){
315                include_spip('inc/yaml');
316                $liste_config = array();
317                $match = ".+[.]yaml$";
318                foreach (array_merge(find_all_in_path('ieconfig/', $match),find_all_in_path('tmp/ieconfig/', $match)) as $fichier => $chemin) {
319                        $config = yaml_decode_file($chemin);
320                        // On regarde s'il y a un necessite
321                        $ok = true;
322                        if (isset($config['necessite'])) {
323                                if (!is_array($config['necessite']))
324                                        $config['necessite'] = array($config['necessite']);
325                                foreach($config['necessite'] as $plugin)
326                                        if (!defined('_DIR_PLUGIN_'.strtoupper($plugin)))
327                                                $ok = false;
328                        }
329                        //on vérifie s'il y a un champs nom
330                        if ($ok) {
331                                if (isset($config['nom']))
332                                        $liste_config[$chemin] = _T_ou_typo($config['nom']);
333                                else
334                                        $liste_config[$chemin] = $fichier;
335                        }
336                }
337        }
338        return $liste_config;
339}
340
341
342?>
Note: See TracBrowser for help on using the repository browser.