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

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

Backport de la fonction d'importation depuis le fork d'IEconfig

File size: 4.3 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($chemin);
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 (in_array($prefixe, $import_metas) && isset($config[$prefixe])) {
37                                $config_importee .= $prefixe . ' ';
38                                if (isset($data['metas_brutes'])) {
39                                        foreach (explode(',', $data['metas_brutes']) as $meta) {
40                                                // On teste le cas ou un prefixe est indique (dernier caractere est *)
41                                                if (substr($meta, -1) == '*') {
42                                                        $p = substr($meta, 0, -1);
43                                                        foreach ($config[$prefixe] as $m => $v) {
44                                                                if (substr($m, 0, strlen($p)) == $p) {
45                                                                        if (($option === 'ecrase') OR ($option === 'fusion')) {
46                                                                                ecrire_config($m);
47                                                                        }
48                                                                        if ($option === 'fusion_inv') {
49                                                                                if (is_null(lire_config($m . '/'))) {
50                                                                                        ecrire_config($m . '/', $v);
51                                                                                }
52                                                                        }
53                                                                }
54                                                        }
55                                                } elseif (isset($config[$prefixe][$meta])) {
56                                                        if (($option === 'ecrase') OR ($option === 'fusion')) {
57                                                                ecrire_config($meta . '/', $config[$prefixe][$meta]);
58                                                        }
59                                                        if ($option === 'fusion_inv') {
60                                                                if (is_null(lire_config($meta . '/'))) {
61                                                                        ecrire_config($meta . '/', $config[$prefixe][$meta]);
62                                                                }
63                                                        }
64                                                }
65                                        }
66                                }
67                                if (isset($data['metas_serialize'])) {
68                                        foreach (explode(',', $data['metas_serialize']) as $meta) {
69                                                // On teste le cas ou un prefixe est indique (dernier caractere est *)
70                                                if (substr($meta, -1) == '*') {
71                                                        $p = substr($meta, 0, -1);
72                                                        foreach ($config[$prefixe] as $m => $v) {
73                                                                if (substr($m, 0, strlen($p)) == $p) {
74                                                                        $import = array();
75                                                                        if ($option === 'ecrase') {
76                                                                                $import = $v;
77                                                                        }
78                                                                        if ($option === 'fusion') {
79                                                                                $import = array_merge(lire_config($m . '/'), $v);
80                                                                        }
81                                                                        if ($option === 'fusion_inv') {
82                                                                                $import_plus = array_diff_key($v, lire_config($meta . '/'));
83                                                                                $import_base = array_diff_key(lire_config($meta . '/'), $import_plus);
84                                                                                $import = (array_merge($import_plus, $import_base));
85                                                                        }
86                                                                        ksort($import);
87                                                                        ecrire_config($m . '/', serialize($import));
88                                                                }
89                                                        }
90                                                } elseif (isset($config[$prefixe][$meta])) {
91                                                        $import = array();
92                                                        if ($option === 'ecrase') {
93                                                                $import = $config[$prefixe][$meta];
94                                                        }
95                                                        if ($option === 'fusion') {
96                                                                $import = array_merge(lire_config($meta . '/'), $config[$prefixe][$meta]);
97                                                        }
98                                                        if ($option === 'fusion_inv') {
99                                                                $import_plus = array_diff_key($config[$prefixe][$meta], lire_config($meta . '/'));
100                                                                $import_base = array_diff_key(lire_config($meta . '/'), $import_plus);
101                                                                $import = (array_merge($import_plus, $import_base));
102                                                        }
103                                                        ksort($import);
104                                                        ecrire_config($meta . '/', serialize($import));
105                                                }
106                                        }
107                                }
108                        }
109                }
110
111                if ($message_erreur != '') {
112                        return array('message_erreur' => $message_erreur);
113                } else {
114                        return array('message_ok' => _T('ieconfig:message_ok_import'));
115                }
116}
117
Note: See TracBrowser for help on using the repository browser.