source: trunk/spip/esqueleto-redcta/plugins/cfg/inc/cfg_config.php @ 152

Last change on this file since 152 was 152, checked in by guille, 15 years ago

se agregaron svn_update y cfg para el 2.0

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