source: spip-zone/_squelettes_/soyezcreateurs_net/trunk/plugins/soyezcreateurs/soyezcreateurs_fonctions_ieconfig.php @ 111452

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

[SoyezCréateurs?] Activation rapide du mode Cognac fonctionnelle !

File size: 4.1 KB
Line 
1<?php
2
3/*
4 *   +----------------------------------+
5 *    Fonctions relatives à ieconfig
6 *   +----------------------------------+
7 *    Date : Juin-juillet 2018
8 *    Auteur :  RIEDELAndreas
9*/
10
11
12/*Fonction permettant une importation de configuration en spécifiant le chemin du fichier et l'action à accomplir
13/*@param $chemin : chemin du fichier à importer
14/*@param $option : option à appliquer
15/*Type d'option :
16/*      - 'rien' : Ne rien faire
17/*      - 'ecrasement' : Écraser complètement la configuraion actuel, les paramètres non renseigné dans le fichier d'importation sont remis à default
18/*      - 'fusion' : Fusionner la configuration actuelle avec le fichier d'importation, les paramètres non renseignés dans le fichier d'importation sont conservés
19/*      - 'fusion_inv' : Fusionner la configuration actuelle avec le fichier d'importation, les paramètres renseignés dans le fichier d'importation sont ignorés s'il sont présent dans la configuration actuelle
20*/
21function sc_ieconfig_importer_fichier($chemin, $option = 'ecrase') {
22        include_spip('inc/yaml');
23        $config = yaml_decode_file(find_in_path($chemin.'.yaml'));
24       
25        // On passe via le pipeline ieconfig
26        $message_erreur = pipeline('ieconfig', array(
27                'args' => array(
28                        'action' => 'import',
29                        'config' => $config,
30                ),
31                'data' => '',
32        ));
33
34        // Gestion des plugins utilisant le pipeline ieconfig_metas
35        foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data) {
36                if (isset($data['metas_brutes'])) {
37                        foreach (explode(',', $data['metas_brutes']) as $meta) {
38                                // On teste le cas ou un prefixe est indique (dernier caractere est *)
39                                if (substr($meta, -1) == '*') {
40                                        $p = substr($meta, 0, -1);
41                                        foreach ($config[$prefixe] as $m => $v) {
42                                                if (substr($m, 0, strlen($p)) == $p) {
43                                                        if (($option === 'ecrase') OR ($option === 'fusion')) {
44                                                                ecrire_config($m);
45                                                        }
46                                                        if ($option === 'fusion_inv') {
47                                                                if (is_null(lire_config($m . '/'))) {
48                                                                        ecrire_config($m . '/', $v);
49                                                                }
50                                                        }
51                                                }
52                                        }
53                                } elseif (isset($config[$prefixe][$meta])) {
54                                        if (($option === 'ecrase') OR ($option === 'fusion')) {
55                                                ecrire_config($meta . '/', $config[$prefixe][$meta]);
56                                        }
57                                        if ($option === 'fusion_inv') {
58                                                if (is_null(lire_config($meta . '/'))) {
59                                                        ecrire_config($meta . '/', $config[$prefixe][$meta]);
60                                                }
61                                        }
62                                }
63                        }
64                }
65                if (isset($data['metas_serialize'])) {
66                        foreach (explode(',', $data['metas_serialize']) as $meta) {
67                                // On teste le cas ou un prefixe est indique (dernier caractere est *)
68                                if (substr($meta, -1) == '*') {
69                                        $p = substr($meta, 0, -1);
70                                        foreach ($config[$prefixe] as $m => $v) {
71                                                if (substr($m, 0, strlen($p)) == $p) {
72                                                        $import = array();
73                                                        if ($option === 'ecrase') {
74                                                                $import = $v;
75                                                        }
76                                                        if ($option === 'fusion') {
77                                                                $import = array_merge(lire_config($m . '/'), $v);
78                                                        }
79                                                        if ($option === 'fusion_inv') {
80                                                                $import_plus = array_diff_key($v, lire_config($meta . '/'));
81                                                                $import_base = array_diff_key(lire_config($meta . '/'), $import_plus);
82                                                                $import = (array_merge($import_plus, $import_base));
83                                                        }
84                                                        ksort($import);
85                                                        ecrire_config($m . '/', serialize($import));
86                                                }
87                                        }
88                                } elseif (isset($config[$prefixe][$meta])) {
89                                        $import = array();
90                                        if ($option === 'ecrase') {
91                                                $import = $config[$prefixe][$meta];
92                                        }
93                                        if ($option === 'fusion') {
94                                                $import = array_merge(lire_config($meta . '/'), $config[$prefixe][$meta]);
95                                        }
96                                        if ($option === 'fusion_inv') {
97                                                $import_plus = array_diff_key($config[$prefixe][$meta], lire_config($meta . '/'));
98                                                $import_base = array_diff_key(lire_config($meta . '/'), $import_plus);
99                                                $import = (array_merge($import_plus, $import_base));
100                                        }
101                                        ksort($import);
102                                        ecrire_config($meta . '/', serialize($import));
103                                }
104                        }
105                }
106        }
107
108        if ($message_erreur != '') {
109                return array('message_erreur' => $message_erreur);
110        } else {
111                return array('message_ok' => _T('ieconfig:message_ok_import'));
112        }
113}
114
Note: See TracBrowser for help on using the repository browser.