source: spip-zone/_plugins_/noizetier/trunk/noizetier_ieconfig.php @ 111236

Last change on this file since 111236 was 111236, checked in by real3t@…, 3 years ago

Le champ rang est devenu rang_noisette.
Ça faisait planter l'exportation dans IEConfig

File size: 8.7 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7/**
8 * Pipeline ieconfig pour l'import/export de configuration.
9 *
10 * @param array $flux
11 *
12 * @return array
13 */
14function noizetier_ieconfig($flux)
15{
16        $action = $flux['args']['action'];
17
18        // Formulaire d'export
19        if ($action == 'form_export') {
20                $saisies = array(
21                        array(
22                                'saisie' => 'fieldset',
23                                'options' => array(
24                                        'nom' => 'noizetier_export',
25                                        'label' => '<:noizetier:noizetier:>',
26                                        'icone' => 'noizetier-24.png',
27                                ),
28                                'saisies' => array(
29                                        array(
30                                                'saisie' => 'explication',
31                                                'options' => array(
32                                                        'nom' => 'noizetier_export_explication',
33                                                        'texte' => '<:noizetier:ieconfig_noizetier_export_explication:>',
34                                                ),
35                                        ),
36                                        array(
37                                                'saisie' => 'oui_non',
38                                                'options' => array(
39                                                        'nom' => 'noizetier_export_option',
40                                                        'label' => '<:noizetier:ieconfig_noizetier_export_option:>',
41                                                        'defaut' => '',
42                                                ),
43                                        ),
44                                ),
45                        ),
46                );
47                $flux['data'] = array_merge($flux['data'], $saisies);
48        }
49
50        // Tableau d'export
51        if ($action == 'export' && _request('noizetier_export_option') == 'on') {
52                include_spip('noizetier_fonctions');
53                $flux['data']['noizetier'] = noizetier_ieconfig_exporter();
54        }
55
56        // Formulaire d'import
57        if ($action == 'form_import' && isset($flux['args']['config']['noizetier'])) {
58                $texte_explication = '';
59                if (isset($flux['args']['config']['noizetier']['noisettes'])) {
60                        $texte_explication .= _T('noizetier:formulaire_liste_pages_config');
61                        $pages = array();
62                        foreach ($flux['args']['config']['noizetier']['noisettes'] as $noisette) {
63                                $pages[] = $noisette['type'].'-'.$noisette['composition'];
64                        }
65                        $pages = array_unique($pages);
66                        foreach ($pages as $page) {
67                                $texte_explication .= '<br />&raquo; '.rtrim($page, '-');
68                        }
69                }
70                if (isset($flux['args']['config']['noizetier']['noizetier_compositions'])) {
71                        $texte_explication .= '<br />'._T('noizetier:formulaire_liste_compos_config');
72                        foreach ($flux['args']['config']['noizetier']['noizetier_compositions'] as $type => $compositions) {
73                                foreach ($compositions as $composition => $compo) {
74                                        $texte_explication .= '<br />&raquo; '.$type.'-'.$composition;
75                                }
76                        }
77                }
78                if (isset($flux['args']['config']['noizetier']['noizetier_compositions'])) {
79                        $saisies = array(
80                                array(
81                                        'saisie' => 'fieldset',
82                                        'options' => array(
83                                                'nom' => 'noizetier_export',
84                                                'label' => '<:noizetier:noizetier:>',
85                                                'icone' => 'noizetier-24.png',
86                                        ),
87                                        'saisies' => array(
88                                                array(
89                                                        'saisie' => 'explication',
90                                                        'options' => array(
91                                                                'nom' => 'noizetier_export_explication',
92                                                                'texte' => $texte_explication,
93                                                        ),
94                                                ),
95                                                array(
96                                                        'saisie' => 'selection',
97                                                        'options' => array(
98                                                                'nom' => 'noizetier_type_import',
99                                                                'label' => '<:noizetier:formulaire_type_import:>',
100                                                                'explication' => '<:noizetier:formulaire_type_import_explication:>',
101                                                                'defaut' => '',
102                                                                'option_intro' => '<:noizetier:ieconfig_ne_pas_importer:>',
103                                                                'datas' => array(
104                                                                        'fusion' => '<:noizetier:formulaire_import_fusion:>',
105                                                                        'remplacer' => '<:noizetier:formulaire_import_remplacer:>',
106                                                                ),
107                                                        ),
108                                                ),
109                                                array(
110                                                        'saisie' => 'selection',
111                                                        'options' => array(
112                                                                'nom' => 'noizetier_import_compos',
113                                                                'label' => '<:noizetier:formulaire_import_compos:>',
114                                                                'defaut' => 'oui',
115                                                                'cacher_option_intro' => 'oui',
116                                                                'datas' => array(
117                                                                        'oui' => '<:noizetier:oui:>',
118                                                                        'non' => '<:noizetier:non:>',
119                                                                ),
120                                                        ),
121                                                ),
122                                        ),
123                                ),
124                        );
125                } else {
126                        $saisies = array(
127                                array(
128                                        'saisie' => 'fieldset',
129                                        'options' => array(
130                                                'nom' => 'noizetier_export',
131                                                'label' => '<:noizetier:noizetier:>',
132                                                'icone' => 'noizetier-24.png',
133                                        ),
134                                        'saisies' => array(
135                                                array(
136                                                        'saisie' => 'explication',
137                                                        'options' => array(
138                                                                'nom' => 'noizetier_export_explication',
139                                                                'texte' => $texte_explication,
140                                                        ),
141                                                ),
142                                                array(
143                                                        'saisie' => 'selection',
144                                                        'options' => array(
145                                                                'nom' => 'noizetier_type_import',
146                                                                'label' => '<:noizetier:formulaire_type_import:>',
147                                                                'explication' => '<:noizetier:formulaire_type_import_explication:>',
148                                                                'defaut' => '',
149                                                                'option_intro' => '<:noizetier:ieconfig_ne_pas_importer:>',
150                                                                'datas' => array(
151                                                                        'fusion' => '<:noizetier:formulaire_import_fusion:>',
152                                                                        'remplacer' => '<:noizetier:formulaire_import_remplacer:>',
153                                                                ),
154                                                        ),
155                                                ),
156                                                array(
157                                                        'saisie' => 'hidden',
158                                                        'options' => array(
159                                                                'nom' => 'noizetier_import_compos',
160                                                                'defaut' => 'non',
161                                                        ),
162                                                ),
163                                        ),
164                                ),
165                        );
166                }
167                $flux['data'] = array_merge($flux['data'], $saisies);
168        }
169
170        // Import de la configuration
171        if ($action == 'import' && isset($flux['args']['config']['noizetier']) && _request('noizetier_type_import') != '') {
172                include_spip('noizetier_fonctions');
173                if (!noizetier_ieconfig_importer(_request('noizetier_type_import'), _request('noizetier_import_compos'), $flux['args']['config']['noizetier'])) {
174                        $flux['data'] .= _T('noizetier:ieconfig_probleme_import_config').'<br />';
175                }
176        }
177
178        return($flux);
179}
180
181
182// --------------------------------------------------------------------
183// ------------------------- API IMPORT/EXPORT ------------------------
184// --------------------------------------------------------------------
185
186/**
187 * Retourne le tableau des noisettes et des compositions du noizetier pour les exports.
188 *
189 * @return
190 **/
191function noizetier_ieconfig_exporter() {
192        $data = array();
193
194        // On calcule le tableau des noisettes
195        // TODO : a modifier pour les objets non ?
196        $data['noisettes'] = sql_allfetsel(
197                'type, composition, bloc, type_noisette, parametres, css',
198                'spip_noisettes',
199                '1',
200                '',
201                'type, composition, bloc, rang_noisette'
202        );
203
204        // On remet au propre les parametres
205        foreach ($data['noisettes'] as $cle => $noisette) {
206                $data['noisettes'][$cle]['parametres'] = unserialize($noisette['parametres']);
207        }
208
209        // On recupere les compositions du noizetier
210        // TODO : a supprimer car elles sont dans la table des pages
211        $noizetier_compositions = unserialize($GLOBALS['meta']['noizetier_compositions']);
212        if (is_array($noizetier_compositions) and count($noizetier_compositions) > 0) {
213                $data['noizetier_compositions'] = $noizetier_compositions;
214        }
215
216        $data = pipeline('noizetier_config_export', $data);
217
218        return $data;
219}
220
221/**
222 * Importe une configuration de noisettes et de compositions.
223 *
224 * @param string  $type_import
225 * @param string  $import_compos
226 * @param array $config
227 *
228 * @return bool
229 */
230function noizetier_ieconfig_importer($type_import, $import_compos, $config) {
231        if ($type_import != 'remplacer') {
232                $type_import = 'fusion';
233        }
234        if ($import_compos != 'oui') {
235                $import_compos = 'non';
236        }
237
238        $config = pipeline('noizetier_config_import', $config);
239
240        // On s'occupe deja des noisettes
241        $noisettes = $config['noisettes'];
242        include_spip('base/abstract_sql');
243        if (is_array($noisettes) and count($noisettes) > 0) {
244                $noisettes_insert = array();
245                $rang = 1;
246                $page = '';
247
248                if ($type_import == 'remplacer') {
249                        sql_delete('spip_noisettes', '1');
250                }
251
252                foreach ($noisettes as $noisette) {
253                        $type = $noisette['type'];
254                        $composition = $noisette['composition'];
255                        if ($type.'-'.$composition != $page) {
256                                $page = $type.'-'.$composition;
257                                $rang = 1;
258                                if ($type_import == 'fusion') {
259                                        $rang = sql_getfetsel('rang_noisette', 'spip_noisettes', 'type='.sql_quote($type).' AND composition='.sql_quote($composition), '', 'rang DESC') + 1;
260                                }
261                        } else {
262                                $rang = $rang + 1;
263                        }
264                        $noisette['rang_noisette'] = $rang;
265                        $noisette['parametres'] = serialize($noisette['parametres']);
266                        $noisettes_insert[] = $noisette;
267                }
268
269                $ok = sql_insertq_multi('spip_noisettes', $noisettes_insert);
270        }
271
272        // On s'occupe des compositions du noizetier
273        // TODO : à modifier car les compositions sont dans la table des pages
274        if ($import_compos == 'oui') {
275                include_spip('inc/meta');
276                $compos_importees = $config['noizetier_compositions'];
277                if (is_array($compos_importees) and count($compos_importees) > 0) {
278                        if ($type_import == 'remplacer') {
279                                effacer_meta('noizetier_compositions');
280                        } else {
281                                $noizetier_compositions = unserialize($GLOBALS['meta']['noizetier_compositions']);
282                        }
283
284                        if (!is_array($noizetier_compositions)) {
285                                $noizetier_compositions = array();
286                        }
287
288                        foreach ($compos_importees as $type => $compos_type) {
289                                foreach ($compos_type as $composition => $info_compo) {
290                                        $noizetier_compositions[$type][$composition] = $info_compo;
291                                }
292                        }
293
294                        ecrire_meta('noizetier_compositions', serialize($noizetier_compositions));
295                        ecrire_metas();
296                }
297        }
298
299        // On invalide le cache
300        include_spip('inc/invalideur');
301        suivre_invalideur('noizetier-import-config');
302
303        return $ok;
304}
Note: See TracBrowser for help on using the repository browser.