source: spip-zone/_plugins_/kconf/kconf_install.php @ 107913

Last change on this file since 107913 was 29648, checked in by shazaam@…, 12 years ago

1er depot plugin kconf, personnalisation avancee

File size: 7.9 KB
Line 
1<?php
2
3function kconf_install($req) {
4        $kconf_base_version = "0.2";
5        if ($req=='test') { // vrai si installe
6                spip_log($GLOBALS['meta']["kconf_base_version"]);
7                return (isset($GLOBALS['meta']["kconf_base_version"]) 
8                          AND version_compare($GLOBALS['meta']["kconf_base_version"],$kconf_base_version,'>='));
9        }
10        if ($req=='install') {
11                kconf_upgrade($GLOBALS['meta']["kconf_base_version"],$kconf_base_version);
12        }
13        if ($req=='uninstall') {
14                kconf_vider_tables();
15        }
16}
17
18function kconf_upgrade($kconf_base_version,$version_cible) {
19        include_spip('inc/kconf_utils');
20        include_spip('public/kconf_balise_admin');
21        if (!$kconf_base_version) {
22                $res = spip_query("SHOW FULL COLUMNS FROM spip_kconfs");
23                if ($row = spip_fetch_array($res))
24                        $kconf_base_version="0.1";
25                else {
26                        kconf_creer_tables();
27                        spip_log("Installation toute fraîche de kconf faite !");
28                }
29        }
30        if ($kconf_base_version=="0.1") {
31                spip_log("besoin d'upgrade ********");
32                include_spip('base/create');
33                // prend la base en mémoire
34                $req = sql_select('id_rubrique, valeurs','spip_kconfs');
35                while ($row = sql_fetch($req)) {
36                        $id = intval($row['id_rubrique']);
37                        $valeurs[$id] = unserialize($row['valeurs']);
38                }
39                $kconf_chemin = $valeurs[0]['kconf_chemin'];
40                // efface et prend la nouvelle
41                sql_drop_table('spip_kconfs');
42                kconf_creer_tables();
43                global $kconf;
44
45                // remplis kconf avec les valeurs par defaut des fichiers
46                if (!is_dir("../$kconf_chemin")) {
47                        spip_log('kca:probleme_dossier '.$kconf_chemin);
48                } else {
49                        $skels = preg_files(_DIR_RACINE."$kconf_chemin", '.html$');
50                        $parametrer = charger_fonction('parametrer', 'public');
51                        foreach ($skels as $skel) {
52                                $skel = preg_replace("/.html$/","",basename($skel));
53                                $type = ($skel=="rubrique") ? "public" : "prive";
54                                spip_log("on va lancer $skel");
55                                $t = time();
56                                $GLOBALS['var_mode']='recalcul';
57                                $envs['date'] = date('Y-m-d H:i:s', $t);
58                                $envs['id_rubrique'] = 0;
59                                $envs['kconf']['page'] = array('fichier'=>$skel,'type'=>$type,"I"=>'rubrique',"id_objet"=>0, 'O'=>'o');
60                                $envs['kconf']['contexte'] = array("I"=>'rubrique',"id_objet"=>0, 'O'=>'o');
61                                $parametrer(_DIR_RACINE.$kconf_chemin.$skel, $envs,'kconf');
62                                sql_insertq('spip_kconfs' ,array('fichier'=>"$skel", 'id_objet'=>0, 'objet'=>'rubrique', 'type'=>$type, 'mtime'=>'NOW()', "valeur"=>serialize($kconf['fichiers'][$skel]['valeur']) ));
63                        }
64                }
65
66                // remplis kconf avec les valeurs en base
67                foreach ($valeurs as $id => $vals) {
68                        $type = $id ? 'public' : 'prive';
69//                      spip_log("pour rubrique $id:");
70                        foreach ($vals as $clef => $val) {
71//                              spip_log("$clef => $val,");
72                                if ($kconf['i']['rubrique']['o'][0]['clefs'][$clef]['defaut']!=$val) {
73                                        $kconf['i']['rubrique']['o'][$id]['clefs'][$clef]['valeur'] = $val;
74                                        $kconf['i']['rubrique']['o'][$id]['clefs'][$clef]['type'] = $type;
75                                }
76                        }
77                        kconf_enregistre('rubrique',$id,'o');
78                }
79//              spip_log(var_export($kconf,true).", $kconf_chemin");
80
81                effacer_meta('kconf');
82                ecrire_metas();
83                $kconf_base_version = "0.2"; // OUF
84        }
85       
86        kconf_nettoyage();
87        ecrire_meta('kconf_base_version',$version_cible);
88        ecrire_metas();
89        spip_log("Mise à jour de kconf fait !");
90}
91
92function kconf_vider_tables() {
93        include_spip('base/abstract_sql');
94        include_spip('base/kconf_base');
95        foreach (array_keys(kconf_declarer_tables_auxiliaires(kconf_declarer_tables_principales(array()))) as $table)
96                sql_drop_table($table);
97        effacer_meta('kconf_base_version');
98        ecrire_metas();
99        spip_log("désinstallation de kconf fait !");
100}
101
102function kconf_creer_tables() {
103        include_spip('base/create');
104        creer_base();
105        include_spip('base/abstract_sql');
106        sql_insertq('spip_kconfs' ,array('fichier'=>'kconf', 'id_objet'=>0, 'objet'=>'rubrique', 'type'=>'prive', 'mtime'=>'NOW()'));
107}
108
109
110/*
111rubrique => toutes les rubriques (alias de rubrique-0) (public)
112racine => les rubriques racine (alias de rubrique=0) (protege)
113kconf => alias de rubrique==0 (prive)
114rubrique-2 => la rubrique 2 et toute la hiérarchie (public)
115rubrique=2 => la rubrique 2 et juste ses enfants (protege)
116rubrique==2 => la rubrique 2 (prive)
117article => tous les articles
118article-2 => les articles de la rubrique 2 et toute la hiérarchie (public)
119article=2 => les articles de la rubrique 2 (protege)
120article==2 => l'article 2 (prive)
121
122
123$id_hierarchie represente le chemin jusqu'a la racine incluant la rubrique et 0
1243 types: prive, protege, public
125
126trouver une valeur pour un article:
127if (isset($ka[$id_article]['bla']['valeur'])) {
128        $val = $ka[$id_article]['bla']['valeur'];
129} else {
130        if (!isset($ka[$id_article]['hierarchie'])
131                $ka[$id_article]['hierarchie'] = recuperer_hierarchie($id_article);
132        foreach ($ka[$id_article]['hierarchie'] as $i => $id_rubrique) {
133                if (!isset($kar[$id_rubrique])) {
134                        charger_hierarchie($kar,array_splice($ka[$id_article]['hierarchie'],$k));
135                }
136                if (isset($kar[$id_rubrique]['bla']['valeur'])) {
137                        $type = $kar[$id_rubrique]['bla']['type'];
138                        if (($type=='protege' && $i==1) || $type=='public') {
139                                $val = $kar[$id_rubrique]['bla']['valeur'];
140                                $cascade = $id_rubrique;
141                        }
142                }
143        }
144}
145if (!$val) return false;
146return array($val,$cascade),
147
148trouver une valeur pour une rubrique:
149if (isset($kr[$id_rubrique]['bla']['valeur'])) {
150        $val = $kr[$id_rubrique]['bla']['valeur'];
151} else {
152        if (!isset($kr[$id_rubrique]['hierarchie'])
153                $kr[$id_rubrique]['hierarchie'] = recuperer_hierarchie($id_rubrique);
154        foreach ($kr[$id_rubrique]['hierarchie'] as $i => $id_rubrique) {
155                if (!isset($kr[$id_rubrique])) {
156                        charger_hierarchie($kr,array_splice($kr[$id_rubrique]['hierarchie'],$k));
157                }
158                if (isset($kr[$id_rubrique]['bla']['valeur'])) {
159                        $type = $kr[$id_rubrique]['bla']['type'];
160                        if (($type=='protege' && $i==1) || $type=='public') {
161                                $val = $kr[$id_rubrique]['bla']['valeur'];
162                                $cascade = $id_rubrique;
163                        } else {
164                          $error = "prive"
165                        }
166                        break;
167                }
168        }
169}
170if (!$val) return false;
171return array($val,$cascade),
172
173la hierarchie se construit en remontant la chaine des rubriques et en empilant les morceaux qui doivent y être.
174
175$ka['8']['bla']['valeur'] = "hu";
176$ka['8']['bla']['type'] = "prive|public|protege";
177$ka['8']['bla']['defaut'] = "hi";
178
179un kca: bla article 8 - avec article=5 protege
180cherche la cle, si elle n'existe pas
181$kar['5']['bla']['valeur'] = $kar['5']['bla']['defaut'] = $valeur;
182$kar['5']['bla']['type'] = 'protege';
183à ce moment là c'est le calcul de la widget qui donne la $valeur par defaut
184le réenregistrement de cette valeur se fait à la mise à jour du fichier
185le test sur la mise à jour se fait lors de la lecture
186
187une widget recoit nom, les valeurs de la balise, la valeur (si défini)
188elle renvoie la widget et la valeur par defaut
189
190enregistrement, bla article 8 - avec article=5 (protege)
191si pas de type
192 $type = type du parent=protege ? prive : public
193
194
195soit faire un cache dans privé et produire un bouton nettoyer le cache
196soit recalculer les valeurs à chaque recalcul du squelette
197proposer un bouton pour passer de l'un à l'autre
198le cache serait à priori trop couteux lors des updates
199
200kconf.article   .objet = article
201                                                        .conteneur = rubrique
202                                                        .o.id_article.clefs.clef.type
203                                                                                                                                        .valeur
204                                                                                                                                        .defaut (uniquement si il est définit)
205                                                                                                                .parent
206                                                        .c.id_rubrique.clefs.clef.type
207                                                                                                                                                .valeur
208                                                                                                                                                .defaut (uniquement si il est définit)
209                                                                                                                        .parent
210
211dans kconfs on a:
212objet id_objet type fichier mtime valeurs
213 valeurs: array(array('nom de la variable', type de widget, valeur du widget))
214
215
216
217
218// VIEUX
219$ka['8']['bla']['public'] = "ha";
220$kr['5']['bla']['prive'] = "ha";
221$kr['5']['bla']['protege'] = "hi";
222$kr['5']['bla']['public'] = "ho";
223
224#KCONF_ART{bla,2}
225 cherche si bla est défini pour art 2
226  FROM kconf_articles WHERE id_article=2
227 sinon cherche si bla est défini pour les rubriques parentes de 2
228  FROM kconf_artrubs WHERE id_rubrique=$id_hierarchie
229
230#KCONF_RUB{bla,3}
231 cherche si bla est défini pour rub 3
232  FROM kconf_rubriques WHERE id_rubrique=3
233 sinon cherche si bla est défini pour les rubriques parentes de 3
234  FROM kconf_rubriques WHERE id_rubrique=$id_hierarchie
235
236*/
237
238?>
Note: See TracBrowser for help on using the repository browser.