source: spip-zone/_squelettes_/soyezcreateurs_net/trunk/plugins/soyezcreateurs/formulaires/ieconfig_import_specifique_couleurs.php @ 111021

Last change on this file since 111021 was 111021, checked in by riedel.nobuyuki@…, 2 years ago

Implémentation de la possibilité d'importer des configurations ieconfig propre au site (sauvegardé dans ../ieconfig) dans la section squelette->Configurations rapides de SoyezCréateurs?

Possibilité d'importer des configuration relative :

  • aux jeux de couleurs sans les polices
  • aux jeux de polices sans les couleurs
  • à l'aspect général du site (onglet principal et Positionnement)

NB : les fichiers doivent suivre un nommage bien précis pour être proposé à l'import.
Ils doivent commencer par :

  • soyezcreateurs_couleurs pour les jeux de couleurs
  • soyezcreateurs_police pour les jeux de polices
  • soyezcreateurs_layout pour l'apparence du site

Ils doivent être dans le fichier ieconfig de SoyezCréateurs?

NNB La phase de test n'est pas complète, des beug peuvent existés et seront corrigés dès que détectés

File size: 8.6 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7function ieconfig_saisies_import_specifique_couleurs($section) {
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' => '<:soyezcreateursprive:ieconfig_import_spe_'.$section.':>',
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_specifique_couleurs($section),
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_specifique_couleurs_charger_dist($section) {
128        include_spip('inc/saisies');
129        $saisies = ieconfig_saisies_import_specifique_couleurs($section);
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__specifique_couleursverifier_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_specifique_couleurs($section));
152        }
153
154        return $erreurs;
155}
156
157function formulaires_ieconfig_import_specifique_couleurs_traiter_dist($section) {
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_specifique_couleurs($section) {
240        $liste_config = null;
241        if (is_null($liste_config)) {
242                include_spip('inc/yaml');
243                $liste_config = array();
244                $match = 'soyezcreateurs_'.$section.'.+[.]yaml$';
245                foreach (array_merge(find_all_in_path('ieconfig/', $match)) as $fichier => $chemin) {
246                        $config = yaml_decode_file($chemin);
247                        // On regarde s'il y a un necessite
248                        $ok = true;
249                        if (isset($config['necessite'])) {
250                                if (!is_array($config['necessite'])) {
251                                        $config['necessite'] = array($config['necessite']);
252                                }
253                                foreach ($config['necessite'] as $plugin) {
254                                        if (!defined('_DIR_PLUGIN_' . strtoupper($plugin))) {
255                                                $ok = false;
256                                        }
257                                }
258                        }
259                        //on vérifie s'il y a un champs nom
260                        if ($ok) {
261                                if (isset($config['nom'])) {
262                                        $liste_config[$chemin] = _T_ou_typo($config['nom']);
263                                } else {
264                                        $liste_config[$chemin] = $fichier;
265                                }
266                        }
267                }
268        }
269
270        return $liste_config;
271}
Note: See TracBrowser for help on using the repository browser.