source: spip-zone/_plugins_/_stable_/cfg2/core/inc/cfg_config.php @ 26913

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

CFG, version 2, en développement potentiel. (NE PAS UTILISER, merci !)

File size: 5.2 KB
Line 
1<?php
2/*
3 * Plugin CFG pour SPIP
4 * (c) toggg, marcimat 2009, distribue sous licence GNU/GPL
5 *
6 * Definitions des fonctions lire_config, ecrire_config et effacer_config.
7 */
8
9
10
11//
12// en l'absence du nom de depot (gauche des ::) cette fonction prendra comme suit :
13// metapack si / present, sinon meta
14//
15function inc_cfg_analyse_args_dist($args) {
16        if (strpos($args, '::') !== false) {
17                return explode('::', $args, 2);
18        } elseif (strpos($args, '/') !== false) {
19                return array('metapack', $args);
20        }
21        return array('meta', $args);
22}
23
24
25// charge le depot qui va bien en fonction de l'argument demande
26// exemples :
27// - meta::description
28// - metapack::prefixe_plugin
29// - metapack::prefixe/casier/champ
30// raccourcis :
31// - description
32// - prefixe_plugin/
33// - prefixe/casier/champ
34function cfg_charger_depot($args){
35        static $analyse = false;
36        if ($analyse === false) {
37                $analyse = charger_fonction('cfg_analyse_args', 'inc');
38        }
39       
40        list($depot, $args) = $analyse($args);
41
42        $depot = new cfg_depot($depot);
43        $depot->charger_args($args);
44        return $depot;
45}
46
47
48// cette classe charge les fonctions de lecture et ecriture d'un depot (dans depots/)
49//
50// Ces depots ont une version qui evoluera en fonction si des changements d'api apparaissent
51
52// version 2 (fonctions)
53// - charger_args
54// - lire, ecrire, effacer
55class cfg_depot{
56       
57        var $nom;
58        var $depot;
59       
60        //
61        // Constructeur de la classe
62        // 'depot' est le nom du fichier php stocke dans /depots/{depot}.php
63        // qui contient une classe 'cfg_depot_{depot}'
64        //
65        // $params est un tableau de parametres passes a la classe cfg_depot_{depot} qui peut contenir :
66        // 'champs' => array(
67        //              'nom'=>array(
68        //                      'balise' => 'select|textarea|input', // nom de la balise
69        //                      'type' => 'checkbox|hidden|text...', // type d'un input
70        //                      'tableau' => bool, // est-ce un champ tableau name="champ[]" ?
71        //                      'cfg' => 'xx',   // classe css commencant par css_xx
72        //                      'id' => y, // cle du tableau 'champs_id' (emplacement qui possede ce champ)
73        //              ),
74        // 'champs_id' => array(
75        //              cle => 'nom' // nom d'un champ de type id
76        //              ),
77        //      'param' => array(
78        //              'parametre_cfg' => 'valeur' // les parametres <!-- param=valeur --> passes dans les formulaires cfg
79        //              ),
80        //      'val' => array(
81        //              'nom' => 'valeur' // les valeurs des champs sont stockes dedans
82        //              )
83        //      );
84        //
85        //
86        function cfg_depot($depot='metapack', $params=array()){
87                if (!isset($params['param'])) {
88                        $params['param'] = array();
89                }
90               
91                include_spip('depots/'.$depot);
92                if (class_exists($class = 'cfg_depot_'.$depot)) {
93                        $this->depot = &new $class($params);
94                } else {
95                        die("CFG ne trouve pas le d&eacute;pot $depot");
96                }
97               
98                $this->version = $this->depot->version;
99                $this->nom = $depot;
100        }
101       
102        // ajoute les parametres transmis dans l'objet du depot
103        function add_params($params){
104                foreach ($params as $o=>$v) {
105                        $this->depot->$o = $v;
106                }       
107        }
108       
109        function lire($params = array()){
110                $this->add_params($params);
111                return $this->depot->lire(); // array($ok, $val, $messages)
112        }
113               
114        function ecrire($params = array()){
115                $this->add_params($params);
116                return $this->depot->ecrire(); // array($ok, $val, $messages)
117        }
118       
119        function effacer($params = array()){
120                $this->add_params($params);
121                return $this->depot->effacer(); // array($ok, $val, $messages)
122        }       
123       
124        function lire_config($unserialize=true){
125                list($ok, $s) = $this->depot->lire($unserialize);
126                if ($ok && ($nom = $this->nom_champ())) {
127                        return $s[$nom];
128                } elseif ($ok) {
129                        return $s;     
130                } 
131        }
132       
133        function ecrire_config($valeur){
134                if ($nom = $this->nom_champ()) {
135                        $this->depot->val = array($nom=>$valeur);
136                } else {
137                        $this->depot->val = $valeur;
138                }
139                list($ok, $s) =  $this->depot->ecrire();
140                return $ok;     
141        }
142       
143        function effacer_config(){
144                if ($nom = $this->nom_champ()){
145                        $this->depot->val[$nom] = false;
146                } else {
147                        $this->depot->val = null;       
148                }
149                list($ok, $s) =  $this->depot->effacer();
150                return $ok;     
151
152        }       
153       
154        function nom_champ(){
155                if (count($this->depot->champs)==1){
156                        foreach ($this->depot->champs as $nom=>$def){
157                                return $nom;   
158                        }
159                }
160                return false;                   
161        }
162       
163        // charge les arguments d'un lire/ecrire/effacer_config
164        // dans le depot : lire_config($args = 'metapack::prefixe/casier/champ');
165        function charger_args($args){
166                if (method_exists($this->depot, 'charger_args')){
167                        return $this->depot->charger_args($args);       
168                }
169                return false;
170        }
171}
172
173
174
175
176// lire_config() permet de recuperer une config depuis le php
177// memes arguments que la balise (forcement)
178// $cfg: la config, lire_config('montruc') est un tableau
179// lire_config('montruc/sub') est l'element "sub" de cette config
180// comme la balise pour ~, ~id_auteur ou table:id
181// $def: un defaut optionnel
182
183// $unserialize est mis par l'histoire, et affecte le depot 'meta'
184function lire_config($cfg='', $def=null, $unserialize=true) {
185        $depot = cfg_charger_depot($cfg);
186        $r = $depot->lire_config($unserialize);
187        if (is_null($r)) return $def;
188        return $r;
189}
190
191
192
193//
194//
195// ecrire_config($chemin, $valeur)
196// permet d'enregistrer une configuration
197//
198//
199function ecrire_config($cfg='', $valeur=null){
200        $depot = cfg_charger_depot($cfg);
201        return $depot->ecrire_config($valeur);
202}
203
204
205//
206// effacer_config($chemin)
207// permet de supprimer une config
208//
209function effacer_config($cfg=''){
210        $depot = cfg_charger_depot($cfg);
211        return $depot->effacer_config();       
212}
213
214
215
216?>
Note: See TracBrowser for help on using the repository browser.