source: trunk/spip/esqueleto-redcta/plugins/cfg/inc/cfg.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: 9.7 KB
Line 
1<?php
2
3/*
4 * Plugin CFG pour SPIP
5 * (c) toggg 2007, distribue sous licence GNU/GPL
6 * Documentation et contact: http://www.spip-contrib.net/
7 *
8 */
9
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12
13
14// Renvoie la liste des configurations disponibles dans le path
15// ou dans le dossier donne en argument
16function liste_cfg($dir='') {
17        // Faire la liste des elements qui ont un cfg ; ca peut etre des plugins
18        // mais aussi des squelettes ou n'importe quoi
19        $liste = array();
20        // tous les repertoires
21        if (!$dir){
22                foreach (creer_chemin() as $dir) {
23                        $liste = array_merge($liste, preg_files($d=$dir.'fonds/', $d.'cfg_[^/]*[.]html$'));
24                }
25        // ou seulement celui demande
26        } else {       
27                $dir = rtrim(rtrim($dir),'/').'/';
28                $liste = preg_files($d=$dir.'fonds/', $d.'cfg_[^/]*[.]html$');
29        }
30
31        if ($liste) {
32                $l = array();
33                foreach($liste as $cfg) {
34                        $fonds = substr(basename($cfg,'.html'),4);
35                        $l[$fonds] = $cfg;
36                }
37                ksort($l);
38                return $l;
39        }
40}
41
42// Renvoie une icone avec un lien vers la page de configuration d'un repertoire
43// donne
44function icone_lien_cfg($dir) {
45        $ret = '';
46        if ($onglets = lister_onglets_cfg($dir)){
47                foreach ($onglets as $fonds=>$ong){
48                        if ($ong['afficher'])
49                                $ret .= '<a href="'.$ong['url'].'">'
50                                        .'<img src="'._DIR_PLUGIN_CFG.'cfg-16.png"
51                                                width="16" height="16"
52                                                alt="'._T('icone_configuration_site').' '.$fonds.'"
53                                                title="'._T('icone_configuration_site').' '.$fonds.'"
54                                        /></a>';                                       
55                }
56        }
57
58        return $ret;
59}
60
61
62
63// retourne un tableau contenant une liste de fonds cfg et leurs parametres
64// d'onglet (oui/non/titre_parent), plus quelques autres parametres (url, titre, icone),
65// pour un repertoire donne (sinon tout le path)
66function lister_onglets_cfg($dir=''){
67        $onglets = array();
68       
69        // scruter les onglets affichables
70        if ($l = liste_cfg($dir)) {
71                foreach($l as $fonds => $cfg) {
72
73                        if (!isset($onglets[$fonds])) 
74                                $onglets[$fonds] = array();
75                        $args = array();
76                        $args['afficher'] = false;
77                       
78                        // On va chercher la config cible
79                        // et on regarde ses donnees pour faire l'onglet
80                        // seulement si l'onglet doit etre affiche
81                        include_spip('inc/cfg');
82                        $tmp = new cfg($fonds);
83
84                        if ($tmp->autoriser()){
85                                $args['onglet'] = $tmp->form->param['onglet'];
86                                $args['url'] = generer_url_ecrire('cfg', 'cfg='.$fonds);
87                                // titre
88                                if (!$args['titre'] = $tmp->form->param['titre'])
89                                        $args['titre'] = $fonds;
90                                // icone       
91                                $path = dirname(dirname($cfg)); 
92                                $args['icone'] = '';
93                                if ($tmp->form->param['icone'])
94                                        $args['icone'] = $path.'/'.$tmp->form->param['icone'];
95                                else if (file_exists($path.'/plugin.xml'))
96                                        $args['icone'] = 'plugin-24.gif';
97                                else
98                                        $args['icone'] = _DIR_PLUGIN_CFG.'cfg-doc-22.png';     
99                               
100                                // l'afficher ?
101                                if ($tmp->form->param['onglet'] == 'oui')
102                                        $args['afficher'] = true;
103                        }
104                       
105                        $onglets[$fonds] = array_merge($args, $onglets[$fonds]); // conserver les donnees deja presentes ('enfant_actif')
106                }
107        }
108        return $onglets;       
109}
110       
111
112
113
114// la classe cfg represente une page de configuration
115class cfg
116{
117        var $form; // la classe cfg_formulaire
118       
119        function cfg($nom, $cfg_id = '', $opt = array()) {
120                include_spip('inc/cfg_formulaire');
121                $this->form = &new cfg_formulaire($nom, $cfg_id, $opt);
122        }
123
124        function autoriser()  {return $this->form->autoriser(); }
125        function traiter()  {return $this->form->traiter();}
126       
127        function get_titre(){ return $this->form->param['titre'];}
128        function get_nom()  { return $this->form->param['nom'];}
129        function get_boite(){ 
130                if (!(($titre = $this->form->param['titre']) && ($boite = $this->form->param['boite']))){
131                        $boite=($titre)?$titre: _T('icone_configuration_site') . ' ' . $this->form->param['nom'];
132                }
133                return $boite;
134        }
135        // pour pouvoir tester si la presentation des formulaires doit etre appliquee ou non
136        // m'est avis que ca devrait virer cette 'presentation=auto'...
137        // c'est comme 'rediriger', il n'y a que le plugin 'autorite' qui l'utilise
138        function get_presentation() { return $this->form->param['presentation'];        }
139       
140        //
141        // Affiche la boite d'info
142        // des liens vers les autres fonds CFG
143        // definis par la variable liens
144        // <!-- liens*=moncfg -->
145        // s'il y a une chaine de langue 'moncfg', le texte sera traduit
146        //
147        // Ou
148        // <!-- liens*=prefixe_plugin:moncfg -->
149        // pour utiliser la chaine de langue de prefixe_plugin
150        //
151        function liens()
152        {
153                $return = '';
154                // liens simples
155                foreach ($this->form->param['liens'] as $lien) {
156                        $nom = _T($lien);
157                        $lien =  array_pop(explode(':',$lien)); // ne garder que la derniere partie de la chaine de langue
158                        $return .= ($l = $this->generer_lien($lien, $nom)) ? "<li>$l</li>\n" : "";
159                }
160                return ($return)?"<ul>$return</ul>":'';
161        }
162
163
164        //
165        // Affiche un lien vers le fond dont le nom ($lien)
166        // est passe en parametre
167        // a condition que le fichier fonds/cfg_$lien.html existe
168        //
169        function generer_lien($lien, $nom='')
170        {
171                // nom est une chaine, pas une cle de tableau.
172                if (empty($nom) OR !is_string($nom)) $nom = $lien;
173                if (!find_in_path('fonds/cfg_'.$lien.'.html')) return "";
174               
175                // si c'est le lien actif, pas de <a>
176                if (_request('cfg') == $lien) 
177                        return "$nom\n";
178                else
179                        return "<a href='" . generer_url_ecrire("cfg","cfg=$lien") . "'>$nom</a>\n"; // &cfg_id= <-- a ajouter ?
180        }
181       
182       
183        //
184        // Les liens multi sont appelles par
185        // liens_multi*=nom_du_fond
186        // a condition que le fichier fonds/cfg_$lien.html existe
187        //
188        function liens_multi(){
189                // liens multiples
190                foreach ($this->form->param['liens_multi'] as $lien) {
191                        $nom = _T($lien);
192                        $lien =  array_pop(explode(':',$lien)); // ne garder que la derniere partie de la chaine de langue
193                        $return .= ($l = $this->generer_lien_multi($lien, $nom)) ? "<li>$l</li>\n" : "";
194                }
195                return ($return)?"<ul>$return</ul>":'';
196        }
197       
198        function generer_lien_multi($lien, $nom=''){
199                // nom est une chaine, pas une cle de tableau.
200                if (empty($nom) OR !is_string($nom)) $nom = $lien;
201                if (!find_in_path('fonds/cfg_'.$lien.'.html')) return "";
202               
203                $dedans = '';
204                if (($exi = lire_config($lien)) && is_array($exi)) {
205                        foreach ($exi as $compte => $info) {
206                                $lid = $lien . "_" . $compte;
207                                $dedans .= "\n<p><label for='$lid'>$compte</label>\n"
208                                                .  "<input type='image' id='$lid' name='cfg_id' value='$compte' "
209                                                .  "src='../dist/images/triangle.gif' style='vertical-align: text-top;'/></p>\n";
210                        }
211                }
212                // On ajoute un bouton 'nouveau'
213                return    "<form method='post' action='".generer_url_ecrire('')."'><div>\n"
214                                . "<h4>$nom</h4>\n"
215                                . "<input type='hidden' name='exec' value='cfg' />\n"
216                                . "<input type='hidden' name='cfg' value='$lien' />\n"
217                                . "<label for='$lien" . "_'>" . _T('cfg:nouveau') . "</label>\n"
218                                . "<input type='image' id='$lien" . "_' name='nouveau' value='1' "
219                                . "src='../dist/images/creer.gif' style='vertical-align: text-top;'/></p>\n" 
220                                . $dedans
221                                . "\n</div></form>\n";
222       
223        }
224               
225        //
226        // Affiche la liste des onglets de CFG
227        //
228        // Recupere les fonds CFG et analyse ceux-ci
229        // - si onglet=oui : affiche l'onglet (valeur par defaut)
230        // - si onglet=non : n'affiche pas l'onglet
231        // - si onglet=fond_cfg_parent : n'affiche pas l'onglet, mais 'exposera'
232        // l'element parent indique (sous entendu que
233        // le parent n'a pas 'onglet=non' sinon rien ne sera expose...
234        //
235        function barre_onglets(){
236               
237                // determiner les onglets a cacher et a mettre en surbrillance
238                if ($onglets = lister_onglets_cfg()){
239                        foreach ($onglets as $fonds=>$ong){
240                                $o = $ong['onglet'];
241
242                                // onglet actif
243                                if ($o == 'oui')       
244                                        $onglets[$fonds]['actif'] = ($fonds == _request('cfg'));
245                                // rendre actif un parent si l'enfant est actif (onglet=nom_du_parent
246                                // (/!\ ne pas le desactiver s'il a deja ete mis actif)
247                                if ($o && $o!='oui' && $o!='non'){
248                                        if (!isset($onglets[$o])) 
249                                                $onglets[$o]=array();
250                                       
251                                        if (!isset($onglets[$o]['enfant_actif'])) 
252                                                $onglets[$o]['enfant_actif']=false;
253                                               
254                                        $onglets[$o]['enfant_actif'] = ($onglets[$o]['enfant_actif'] OR $fonds == _request('cfg'));
255                                }
256                        }
257                }
258
259                // retourner le code des onglets selectionnes
260                $res = "";
261                if ($onglets) {
262                        $res = debut_onglet();
263                        $n = -1;
264                        foreach ($onglets as $titre=>$args){
265                                if ($args['afficher']){
266                                        // Faire des lignes s'il y en a effectivement plus de 6
267                                        if (!(++$n%6) && ($n>0))
268                                                $res .= fin_onglet().debut_onglet();
269                                               
270                                        $res .= onglet(
271                                                        $args['titre'], 
272                                                        $args['url'], 
273                                                        'cfg', 
274                                                        ($args['actif'] || $args['enfant_actif']), 
275                                                        $args['icone']);
276                                }       
277                        }
278                       
279                        $res .= fin_onglet();
280                       
281                }
282                return $res;
283        }
284       
285
286        // affiche le descriptif du formulaire
287        function descriptif(){
288                if ($d = $this->form->param['descriptif'])
289                        return propre($d);     
290        }
291       
292        // affiche le message en cas d'acces interdit
293        function acces_refuse(){
294                include_spip('inc/minipres');
295                return minipres(_T('info_acces_refuse'), 
296                        $this->form->param['refus']
297                                ? $this->form->param['refus']
298                                : " (cfg {$this->form->param[nom]} - {$this->form->vue} - {$this->form->param[cfg_id]})");
299        }
300       
301        // afficher les messages de cfg
302        function messages(){
303                $m = $this->form->messages; $messages = array();
304                if (count($m['message_ok']))            $messages[] = join('<br />', $m['message_ok']);
305                if (count($m['message_erreur']))        $messages[] = join('<br />', $m['message_erreur']);
306                if (count($m['erreurs']))                       $messages[] = join('<br />', $m['erreurs']);
307               
308                if ($messages = trim(join('<br />', $messages))) {
309                        return propre($messages);
310                }
311                return '';
312        }
313       
314        // affichage du formulaire (ou a defaut du texte 'choisir le module a configurer')
315        function formulaire() {
316                $retour = "";   
317                if (!$formulaire = $this->form->formulaire()) {
318                        // Page appellee sans formulaire valable
319                        $retour .= "<img src='"._DIR_PLUGIN_CFG.'cfg.png'."' style='float:right' alt='' />\n";
320                        $retour .=  "<h3>" . _T("cfg:choisir_module_a_configurer") . "</h3>";
321                } else {
322                        $retour .= $formulaire;
323                }
324                return $retour;
325        }
326}
327
328?>
Note: See TracBrowser for help on using the repository browser.