source: spip-zone/_plugins_/_stable_/cfg2/extensions/depots/depots/php.php @ 26929

Last change on this file since 26929 was 26929, checked in by marcimat@…, 10 years ago

Allons un peu plus vers la séparation :

  • déplacement des dépots php, table et tablepack
  • suppression du parametre 'inline'
  • les extensions par les classes css ou par les paramètres sont supprimées (mis dans compat)
File size: 4.7 KB
Line 
1<?php
2
3/*
4 * Plugin CFG pour SPIP
5 * (c) toggg, marcimat 2009, distribue sous licence GNU/GPL
6 *
7 * classe cfg_php: storage dans un fichier php
8 */
9
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12/*
13 * Ce depot accepte un parametre supplementaire dans les formulaires CFG :
14 * - fichier : c'est l'adresse du fichier (depuis la racine de spip), sinon ca prend /local/cfg/nom.php
15 */
16
17// cfg_php retrouve et met a jour les donnees d'un fichier php
18class cfg_depot_php
19{
20        var $champs = array();
21        var $champs_id = array();
22        var $val = array();
23        var $param = array();
24        var $messages = array('message_ok'=>array(), 'message_erreur'=>array(), 'erreurs'=>array());
25       
26        var $_arbre = array();
27       
28        // version du depot
29        var $version = 2;
30       
31       
32        function cfg_depot_php($params=array()) {
33                foreach ($params as $o=>$v) {
34                        $this->$o = $v;
35                }
36        }
37       
38        // calcule l'emplacement du fichier
39        function get_fichier(){
40                static $fichier = array();
41                $cle = $this->param['nom'] . ' - ' . $this->param['fichier'];
42                if (isset($fichier[$cle])) 
43                        return $fichier[$cle];
44               
45                if (!$this->param['fichier']) 
46                        $f = _DIR_VAR . 'cfg/' . $this->param['nom'] . '.php'; 
47                else
48                        $f = _DIR_RACINE . $this->param['fichier'];
49
50                include_spip('inc/flock');
51                return $fichier[$cle] = sous_repertoire(dirname($f)) . basename($f);
52        }
53       
54       
55        // charge la base (racine) et le point de l'arbre sur lequel on se trouve (ici)
56        function charger($lire=false){
57                $fichier = $this->get_fichier();
58
59                // inclut une variable $cfg
60        if (!@include $fichier) {
61                if ($lire) return false;
62                $this->_base = array();
63        } elseif (!$cfg OR !is_array($cfg)) {
64                $this->_base = array();
65        } else {
66                $this->_base = $cfg;   
67        }
68
69        $this->_ici = &$this->_base;
70        $this->_ici = &$this->monte_arbre($this->_ici, $this->param['nom']);
71        $this->_ici = &$this->monte_arbre($this->_ici, $this->param['casier']);
72        $this->_ici = &$this->monte_arbre($this->_ici, $this->param['cfg_id']); 
73        return true;
74        }
75       
76        // recuperer les valeurs.
77        function lire() {
78                if (!$this->charger(true)){
79                        return array(true, null); // pas de chargement = pas de valeur encore enregistrees
80                }
81               
82        // utile ??
83        if ($this->param['cfg_id']) {
84                $cles = explode('/', $this->param['cfg_id']);
85                        foreach ($this->champs_id as $i => $name) {
86                                $this->_ici[$name] = $cles[$i];
87                    }
88        }
89            return array(true, $this->_ici);
90        }
91
92
93        // ecrit chaque enregistrement pour chaque champ
94        function ecrire() {
95                if (!$this->charger()){
96                        return array(false, $this->val);       
97                }
98
99                foreach ($this->champs as $name => $def) {
100                        if (isset($def['id'])) continue;
101                        $this->_ici[$name] = $this->val[$name];
102                }
103               
104                if (!$this->ecrire_fichier($this->_base)){
105                        return array(false, $this->val);
106                }
107               
108                return array(true, $this->_ici);       
109        }
110       
111       
112        // supprime chaque enregistrement pour chaque champ
113        function effacer(){
114                if (!$this->charger()){
115                        return array(false, $this->val);       
116                }
117
118                // pas de champ, on supprime tout
119                if (!$this->champs)
120                        return array($this->ecrire_fichier(), array());
121                       
122        // effacer les champs
123        foreach ($this->champs as $name => $def) {
124                        if (isset($def['id'])) continue;
125                        unset($this->_ici[$name]);
126                }
127               
128                // supprimer les dossiers vides
129                for ($i = count($this->_arbre); $i--; ) {
130                        if ($this->_arbre[$i][0][$this->_arbre[$i][1]]) {
131                                break;
132                        }
133                        unset($this->_arbre[$i][0][$this->_arbre[$i][1]]);
134                }
135
136                return array($this->ecrire_fichier($this->_base), $this->_ici);
137        }
138       
139       
140        function ecrire_fichier($contenu=array()){
141                $fichier = $this->get_fichier();
142
143                if (!$contenu) {
144                        return supprimer_fichier($fichier);
145                }
146
147$contenu = '<?php
148/**************
149* Config ecrite par cfg le ' . date('r') . '
150*
151* NE PAS EDITER MANUELLEMENT !
152***************/
153
154$cfg = ' . var_export($contenu, true) . ';
155?>
156';
157                return ecrire_fichier($fichier, $contenu);
158        }
159       
160        // charger les arguments de
161        // - lire_config(php::nom/casier/champ)
162        // - lire_config(php::adresse/fichier.php:nom/casier/champ)
163        function charger_args($args){
164                list($fichier, $args) = explode(':',$args);
165                if (!$args) {
166                        $args = $fichier;
167                        $fichier = _DIR_VAR . 'cfg/' . $fichier . '.php';       
168                }
169
170                $arbre = explode('/',$args);
171                $this->param['nom'] = array_shift($arbre);
172                if ($champ = array_pop($arbre))
173                        $this->champs = array($champ=>true);
174                $this->param['casier'] = implode('/',$arbre);
175                return true;   
176        }
177       
178       
179        // se positionner dans le tableau arborescent
180        function & monte_arbre(&$base, $chemin){
181                if (!$chemin) {
182                        return $base;
183                }
184                if (!is_array($chemin)) {
185                        $chemin = explode('/', $chemin);
186                }
187                if (!is_array($base)) {
188                        $base = array();
189                }
190               
191                foreach ($chemin as $dossier) {
192                        if (!isset($base[$dossier])) {
193                                $base[$dossier] = array();
194                        }
195                        $this->_arbre[] = array(&$base, $dossier);
196                        $base = &$base[$dossier];
197                }
198               
199                return $base;
200        }
201}
202
203?>
Note: See TracBrowser for help on using the repository browser.