source: spip-zone/_plugins_/champs_extras2/core/inc/cextras_gerer.php @ 32248

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

Trier les tables extras (plus pratique dans l'interface de saisie d'un champ).

File size: 6.7 KB
Line 
1<?php
2if (!defined("_ECRIRE_INC_VERSION")) return;
3
4include_spip('inc/cextras');
5
6// retourne la liste des objets valides utilisables par le plugin
7// (dont on peut afficher les champs dans les formulaires)
8function cextras_objets_valides(){
9       
10        $objets = array();
11       
12        $objets_extensibles = pipeline("objets_extensibles", array(
13                'article'     => _T('cextras:table_article'),
14                'auteur'      => _T('cextras:table_auteur'),
15                'breve'       => _T('cextras:table_breve'),
16                'groupes_mot' => _T('cextras:table_groupes_mot'),
17                'mot'         => _T('cextras:table_mot'),
18                'rubrique'    => _T('cextras:table_rubrique'),
19                'site'        => _T('cextras:table_site')
20        ));
21        ksort($objets_extensibles);
22       
23        foreach ($objets_extensibles as $objet => $traduction) {
24                $objets[$objet] = array(
25                        'table' => table_objet_sql($objet), 
26                        'type' => objet_type($objet), 
27                        'nom' => $traduction,
28                );
29        }
30
31        return $objets;
32}
33
34// retourne la liste des types de formulaires de saisie
35// utilisables par les champs extras
36// (crayons appelle cela des 'controleurs')
37function cextras_types_formulaires(){
38        $types = array();
39
40        foreach(_chemin() as $dir) {
41                if (@is_dir($s = $dir.'extra-saisies/')) {
42                        foreach(preg_files($s, '.*.html$') as $saisie) {
43                                $type = basename($saisie,'.html');
44                                $types[$type] = array(
45                                        'nom' => _T('cextras:type', array('type' => $type))
46                                );
47                        }
48                }
49        }
50        return $types;
51}
52
53
54/**
55 * Installe des champs extras et
56 * gere en meme temps la mise a jour de la meta
57 * du plugin concernant la base de donnee
58 */
59function installer_champs_extras($champs, $nom_meta_base_version, $version_cible) {
60        $current_version = 0.0;
61        if ((!isset($GLOBALS['meta'][$nom_meta_base_version]))
62        || (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
63                // cas d'une installation
64                if ($current_version==0.0){
65                        creer_champs_extras($champs);
66                        ecrire_meta($nom_meta_base_version,$current_version=$version_cible,'non');
67                }
68        }       
69}
70
71/**
72 * Cree en base les champs extras demandes
73 * @param $champs : objet ChampExtra ou tableau d'objets ChampExtra
74 */
75function creer_champs_extras($champs) {
76        if (!$champs) {
77                return;
78        }
79       
80        if (!is_array($champs)) 
81                $champs = array($champs);
82                               
83        // on recupere juste les differentes tables a mettre a jour
84        $tables = array();
85        foreach ($champs as $c){ 
86                if ($table = table_objet_sql($c->table)) {
87                        $tables[$table] = $table;
88                }
89        }       
90
91        // on met a jour les tables trouvees
92        if ($tables) {
93                // recharger les tables principales et auxiliaires
94                include_spip('base/serial');
95                include_spip('base/auxiliaires');
96                global $tables_principales, $tables_auxiliaires;
97                base_serial($tables_principales);
98                base_auxiliaires($tables_auxiliaires);
99               
100                // inclure les champs extras declares ALORS que le pipeline
101                // n'est pas encore actif : important lorsqu'on active
102                // en meme temps CE2 et un plugin dependant
103                // et non l'un apres l'autre
104                if (!defined('_CHAMPS_EXTRAS_DECLARES')) {
105                        include_spip('base/cextras');
106                        $tables_principales = cextras_declarer_tables_principales($tables_principales);
107                }
108
109                // executer la mise a jour
110                include_spip('base/create');
111                maj_tables($tables);
112        }
113}
114
115/**
116 * Desinstaller des champs extras
117 * et gerer la suppression de la meta du plugin concernant
118 * la base de donnee
119 */
120function desinstaller_champs_extras($champs, $nom_meta_base_version) {
121        vider_champs_extras($champs);
122        effacer_meta($nom_meta_base_version);   
123}
124
125/**
126 * Supprime les champs extras
127 * @param $champs : objet ChampExtra ou tableau d'objets ChampExtra
128 */
129function vider_champs_extras($champs) {
130        if (!is_array($champs)) 
131                $champs = array($champs);
132               
133        // on efface chaque champ trouve
134        foreach ($champs as $c){ 
135                if ($table = table_objet_sql($c->table) and $c->champ and $c->sql) {
136                        sql_alter("TABLE $table DROP $c->champ");
137                }
138        }       
139}
140
141
142
143/**
144 *
145 * Rechercher les champs non declares mais existants
146 * dans la base de donnee en cours
147 * (code d'origine : _fil_)
148 *
149 */
150
151// liste les tables et les champs que le plugin et spip savent gerer
152function extras_champs_utilisables($connect='') {
153        $tout = extras_champs_anormaux($connect);
154        $objets = cextras_objets_valides();
155
156        $tables_utilisables = array();
157        foreach ($objets as $o){$tables_utilisables[] = $o['table'];}
158        foreach ($tout as $table=>$champs) {
159                if (!in_array($table, $tables_utilisables)) {
160                        unset($tout[$table]);
161                }
162        }
163        return $tout;
164}
165
166// Liste les champs anormaux par rapport aux definitions de SPIP
167// (aucune garantie que $connect autre que la connexion principale fasse quelque chose)
168function extras_champs_anormaux($connect='') {
169        // recuperer les tables et champs accessibles
170        $tout = extras_base($connect);
171
172        // recuperer les champs SPIP connus
173        include_spip('base/auxiliaires');
174        include_spip('base/serial');
175        $tables_spip = array_merge($GLOBALS['tables_principales'], $GLOBALS['tables_auxiliaires']);
176
177        // chercher ce qui est different
178        $ntables = array();
179        $nchamps = array();
180        foreach ($tout as $table => $champs) {
181                if (!isset($tables_spip[$table]['field'])) {
182                        $nchamps[$table] = $champs;
183                } else {
184                        foreach($champs as $champ => $desc) {
185                                if (!isset($tables_spip[$table]['field'][$champ])) {
186                                        $nchamps[$table][$champ] = $desc;
187                                }
188                        }
189                }
190        }
191
192        unset($tout);
193        if($nchamps) {
194                $tout = $nchamps;
195        } else {
196                $tout = array();
197        }
198
199        return $tout;
200}
201
202// etablit la liste de tous les champs de toutes les tables du connect donne
203// ignore la table 'spip_test'
204function extras_base($connect='') {
205        $champs = array();
206        foreach (extras_tables($connect) as $table) {
207                if ($table != 'spip_test') {
208                        $champs[$table] = extras_champs($table, $connect);
209                }
210        }
211        return $champs;
212}
213
214// liste les tables dispos ans la connexion $connect
215function extras_tables($connect='') {
216        $a = array();
217        if ($s = sql_showbase(null, $connect)) {
218                while ($t = sql_fetch($s, $connect)) {
219                                $a[] = array_pop($t);
220                }
221        }
222        return $a;
223}
224
225
226// liste les champs dispos dans la table $table de la connexion $connect
227function extras_champs($table, $connect) {
228        $desc = sql_showtable($table, null, $connect);
229        if (is_array($desc['field'])) {
230                return $desc['field'];
231        } else {
232                return array();
233        }
234}
235
236
237/** fonctions non utilisees du futur defunt plugin extras2 **
238
239// Liste les connexions disponibles dans config/
240function extras_connexions() {
241        $connexions = array();
242        foreach(preg_files(_DIR_CONNECT.'.*[.]php$') as $fichier) {
243                if (lire_fichier($fichier, $contenu)
244                AND strpos($contenu, 'spip_connect_db')
245                )
246                        $connexions[] = basename($fichier, '.php');
247        }
248
249        return $connexions;
250}
251
252
253// etablit la liste de tous les champs de toutes les tables de toutes les bases dispos
254function extras_tout() {
255        $champs = array();
256        foreach(extras_connexions() as $connect)
257                foreach (extras_tables($connect) as $table)
258                        $champs[$connect][$table] = extras_champs($table, $connect);
259
260        return $champs;
261}
262*/
263?>
Note: See TracBrowser for help on using the repository browser.