source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/base/forms_upgrade.php @ 18013

Last change on this file since 18013 was 18013, checked in by cedric@…, 12 years ago

"Rendre la saisie d'un champ desactivable sans pour autant perdre les infos en base.
Un champ desactive perd automatiquement son caractere obligatoire.
Attention, le support de cette fonction necessite le critere
{saisie!=non}
dans formulaires/forms_structure.html pour ceux qui utilisent un formulaire personalise"

File size: 15.6 KB
Line 
1<?php
2/*
3 * forms
4 * Gestion de formulaires editables dynamiques
5 *
6 * Auteurs :
7 * Antoine Pitrou
8 * Cedric Morin
9 * Renato
10 * (c) 2005,2006 - Distribue sous licence GNU/GPL
11 *
12 */
13       
14        $GLOBALS['forms_base_version'] = 0.40;
15        function Forms_structure2table($row,$clean=false){
16                $id_form=$row[id_form];
17                // netoyer la structure precedente en table
18                if ($clean){
19                        spip_query("DELETE FROM spip_forms_champs WHERE id_form="._q($id_form));
20                        spip_query("DELETE FROM spip_forms_champs_choix WHERE id_form="._q($id_form));
21                }
22               
23                $structure = unserialize($row['structure']);
24                if ($structure) { //  precaution pour cas tordus
25                        $rang = 1;
26                        foreach($structure as $cle=>$val){
27                                $champ = $val['code'];
28                                $titre = $val['nom'];
29                                $type = $val['type'];
30                                $obligatoire = $val['obligatoire'];
31                                $type_ext = $val['type_ext'];
32                                $extra_info = isset($type_ext['id_groupe']) ? $type_ext['id_groupe']:'';
33                                $extra_info = isset($type_ext['taille']) ? $type_ext['taille']:$extra_info;
34                                $obligatoire = $val['obligatoire'];
35                                spip_query("INSERT INTO spip_forms_champs (id_form,rang,champ,titre,type,obligatoire,extra_info)
36                                        VALUES("._q($id_form).","._q($rang++).","._q($champ).","._q($titre).","._q($type).","._q($obligatoire).","._q($extra_info).")");
37                                if ($type=='select' OR $type=='multiple'){
38                                        $rangchoix = 1;
39                                        foreach($type_ext as $choix=>$titre){
40                                                spip_query("INSERT INTO spip_forms_champs_choix (id_form,champ,choix,titre,rang)
41                                                        VALUES("._q($id_form).","._q($champ).","._q($choix).","._q($titre).","._q($rangchoix++).")");
42                                        }
43                                }
44                        }
45                }
46        }
47        function Forms_allstructure2table($clean=false){
48                $res = spip_query("SELECT * FROM spip_forms");
49                while ($row=spip_fetch_array($res))
50                        Forms_structure2table($row,$clean);
51        }
52
53        function Forms_upgrade(){
54                $version_base = $GLOBALS['forms_base_version'];
55                $current_version = 0.0;
56                if (   (isset($GLOBALS['meta']['forms_base_version']) )
57                                && (($current_version = $GLOBALS['meta']['forms_base_version'])==$version_base))
58                        return;
59
60                include_spip('base/forms');
61                if ($current_version==0.0){
62                        include_spip('base/create');
63                        include_spip('base/abstract_sql');
64                        // attention on vient peut etre d'une table spip-forms 1.8
65                        $res = spip_query("SHOW FULL COLUMNS FROM spip_forms");
66                        if ($row = spip_fetch_array($res))
67                                $current_version=0.1;
68                        else {
69                                creer_base();
70                                ecrire_meta('forms_base_version',$current_version=$version_base);
71                                ecrire_meta('forms_et_tables',serialize(array('associer_donnees_articles'=>0,'associer_donnees_rubriques'=>0,'associer_donnees_auteurs'=>0)));
72                        }
73                }
74                if ($current_version<0.11){
75                        include_spip('base/create');
76                        include_spip('base/abstract_sql');
77                        creer_base();
78                        $query = "ALTER TABLE spip_forms CHANGE `email` `email` TEXT NOT NULL ";
79                        $res = spip_query($query);
80                        $query = "SELECT * FROM spip_forms";
81                        $res = spip_query($query);
82                        while ($row = spip_fetch_array($res)){
83                                $email = $row['email'];
84                                $id_form = $row['id_form'];
85                                if (unserialize($email)==FALSE){
86                                        $email=addslashes(serialize(array('defaut'=>$email)));
87                                        $query = "UPDATE spip_forms SET email='$email' WHERE id_form=$id_form";
88                                        spip_query($query);
89                                }
90                        }
91                        ecrire_meta('forms_base_version',$current_version=0.11);
92                }
93                if ($current_version<0.12){
94                        include_spip('base/create');
95                        include_spip('base/abstract_sql');
96                        creer_base();
97                        spip_query("ALTER TABLE spip_forms CHANGE `descriptif` `descriptif` TEXT");
98                        spip_query("ALTER TABLE spip_forms CHANGE `schema` `schema` TEXT");
99                        spip_query("ALTER TABLE spip_forms CHANGE `email` `email` TEXT");
100                        spip_query("ALTER TABLE spip_forms CHANGE `texte` `texte` TEXT");
101                        ecrire_meta('forms_base_version',$current_version=0.12);
102                }
103                if ($current_version<0.13){
104                        spip_query("ALTER TABLE spip_forms CHANGE `schema` `structure` TEXT");
105                        ecrire_meta('forms_base_version',$current_version=0.13);
106                }
107                if ($current_version<0.14){
108                        spip_query("ALTER TABLE spip_reponses ADD `id_article_export` BIGINT( 21 ) NOT NULL AFTER `id_auteur` ");
109                        ecrire_meta('forms_base_version',$current_version=0.14);
110                }
111                if ($current_version<0.15){
112                        spip_query("ALTER TABLE spip_reponses ADD `url` VARCHAR(255) NOT NULL AFTER `id_article_export` ");
113                        ecrire_meta('forms_base_version',$current_version=0.15);
114                }
115                // maj en version 0.16 annulee et remplacee par 0.17
116                if ($current_version<0.17){
117                        // virer les tables temporaires crees manuellement sur les serveurs ou ca foirait
118                        spip_query("DROP TABLE spip_forms_champs");
119                        spip_query("DROP TABLE spip_forms_champs_choix");
120                       
121                        // virer les tables vides crees lors dun creer base precedent avec spip_forms_donnees dans la definition
122                        spip_query("DROP TABLE spip_forms_donnees");
123                        spip_query("DROP TABLE spip_forms_donnees_champs");
124                        // renommer les tables qui changent de nom, pour recuperer les donees
125                        spip_query("ALTER TABLE spip_reponses RENAME spip_forms_donnees");
126                        spip_query("ALTER TABLE spip_reponses_champs RENAME spip_forms_donnees_champs");
127                        // creer toutes les nouvelles tables
128                        include_spip('base/forms');
129                        include_spip('base/create');
130                        include_spip('base/abstract_sql');
131                        creer_base();
132                        Forms_allstructure2table();
133
134                spip_query("ALTER TABLE spip_forms DROP structure");
135                spip_query("ALTER TABLE spip_forms CHANGE sondage type_form VARCHAR(255) NOT NULL");
136                        spip_query("ALTER TABLE spip_forms ADD moderation VARCHAR(10) DEFAULT 'posteriori' NOT NULL AFTER texte");
137                        spip_query("ALTER TABLE spip_forms ADD public ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER moderation");
138                        spip_query("UPDATE spip_forms SET public='non'"); // par securite
139                        spip_query("UPDATE spip_forms SET type_form='sondage', public='oui' WHERE type_form='public'");
140                        spip_query("UPDATE spip_forms SET type_form='sondage', public='non' WHERE type_form='prot'");
141                        spip_query("UPDATE spip_forms SET type_form='', public='non' WHERE type_form='non'");
142                       
143                        spip_query("ALTER TABLE spip_forms_donnees CHANGE id_reponse id_donnee BIGINT( 21 ) NOT NULL AUTO_INCREMENT");
144                        spip_query("ALTER TABLE spip_forms_donnees_champs CHANGE id_reponse id_donnee BIGINT( 21 ) NOT NULL");
145                        spip_query("ALTER TABLE spip_forms_donnees_champs DROP INDEX id_reponse ,ADD INDEX id_donnee (id_donnee) ");
146
147                        spip_query("ALTER TABLE spip_forms_champs ADD specifiant ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER extra_info");
148                        spip_query("ALTER TABLE spip_forms_champs ADD public ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER specifiant");
149                        spip_query("ALTER TABLE spip_forms_champs ADD aide text AFTER public");
150                        spip_query("ALTER TABLE spip_forms_champs ADD html_wrap text AFTER aide");
151                        spip_query("UPDATE spip_forms_champs SET specifiant='non', public='non'"); // par securite
152
153                        spip_query("ALTER TABLE spip_forms_donnees CHANGE statut confirmation VARCHAR(10) NOT NULL");
154                        spip_query("ALTER TABLE spip_forms_donnees ADD statut VARCHAR(10) NOT NULL AFTER confirmation");
155                        spip_query("UPDATE spip_forms_donnees SET statut='publie'"); // par securite
156                        ecrire_meta('forms_base_version',$current_version=0.17);
157                }
158                if ($current_version<0.18){
159                        spip_query("ALTER TABLE spip_forms ADD linkable ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER public");
160                       
161                        // init la valeur par defaut de extra_info sur les champs select (aurait du etre fait en 0.17
162                        $res = spip_query("SELECT * FROM spip_forms_champs WHERE type='select'");
163                        while ($row = spip_fetch_array($res)){
164                                if (!in_array($row['extra_info'],array('liste','radio'))){
165                                        $extra_info = 'liste';
166                                        $row2 = spip_fetch_array(spip_query("SELECT COUNT(choix) as n FROM spip_forms_champs_choix WHERE id_form="._q($row['id_form'])." AND champ="._q($row['champ'])));
167                                        if ($row2 && $row2['n']<6) $extra_info='radio';
168                                        spip_query("UPDATE spip_forms_champs SET extra_info='$extra_info' WHERE id_form="._q($row['id_form'])." AND champ="._q($row['champ']));
169                                }
170                        }
171                        ecrire_meta('forms_base_version',$current_version=0.18);
172                }
173                if ($current_version<0.19){
174                        spip_query("ALTER TABLE spip_forms ADD html_wrap text AFTER linkable");
175                        ecrire_meta('forms_base_version',$current_version=0.19);
176                }
177                if ($current_version<0.20){
178                        spip_query("ALTER TABLE spip_forms_champs CHANGE champ champ varchar(100) NOT NULL");
179                        spip_query("ALTER TABLE spip_forms_champs_choix CHANGE champ champ varchar(100) NOT NULL");
180                        // on rappelle creer base car la creation de forms_champs et forms_champs_choix a pu echouer sur mysql 3.23
181                        include_spip('base/create');
182                        include_spip('base/abstract_sql');
183                        creer_base();
184                        ecrire_meta('forms_base_version',$current_version=0.20);
185                }
186                if ($current_version<0.21){
187                        spip_query("ALTER TABLE spip_forms ADD forms_obligatoires VARCHAR(255) DEFAULT '' AFTER type_form");
188                        spip_query("ALTER TABLE spip_forms ADD modifiable ENUM('non', 'oui') DEFAULT 'non' AFTER type_form");
189                        spip_query("ALTER TABLE spip_forms ADD multiple ENUM('non', 'oui') DEFAULT 'non' AFTER type_form");
190                        ecrire_meta('forms_base_version',$current_version=0.21);
191                }
192                if ($current_version<0.22){
193                        // creer toutes la nouvelle table spip_documents_donnees
194                        include_spip('base/forms');
195                        include_spip('base/create');
196                        include_spip('base/abstract_sql');
197                        creer_base();
198                        ecrire_meta('documents_donnee','oui');
199                        ecrire_meta('forms_base_version',$current_version=0.22);
200                }
201                if ($current_version<0.23){
202                        spip_query("ALTER TABLE spip_forms ADD documents ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER linkable");
203                        ecrire_meta('forms_base_version',$current_version=0.23);
204                }
205                if ($current_version<0.24){
206                        spip_query("ALTER TABLE spip_forms_donnees ADD rang bigint(21) NOT NULL AFTER cookie");
207                        $res = spip_query("SELECT id_form FROM spip_forms");
208                        while ($row = spip_fetch_array($res)){
209                                $res2 = spip_query("SELECT id_donnee FROM spip_forms_donnees WHERE id_form=".$row['id_form']." ORDER BY id_donnee");
210                                $rang=1;
211                                while ($row2 = spip_fetch_array($res2)){
212                                        spip_query("UPDATE spip_forms_donnees SET rang=$rang WHERE id_donnee=".$row2['id_donnee']);
213                                        $rang++;
214                                }
215                        }
216                        ecrire_meta('forms_base_version',$current_version=0.24,'non');
217                }
218                if ($current_version<0.25){
219                        include_spip('base/create');
220                        include_spip('base/abstract_sql');
221                        creer_base();
222                        ecrire_meta('forms_base_version',$current_version=0.25,'non');
223                }
224                if ($current_version<0.26){
225                        include_spip('base/create');
226                        include_spip('base/abstract_sql');
227                        creer_base();
228                        echo "forms update @ 0.26<br/>";
229                        ecrire_meta('forms_base_version',$current_version=0.26,'non');
230                }
231                if ($current_version<0.27){
232                        spip_query("ALTER TABLE spip_forms_donnees_articles ADD article_ref ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER id_article");
233                        spip_query("ALTER TABLE spip_forms_donnees_donnees ADD donnee_ref ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER id_donnee");
234                        include_spip('base/create');
235                        include_spip('base/abstract_sql');
236                        creer_base();
237                        echo "forms update @ 0.27<br/>";
238                        ecrire_meta('forms_base_version',$current_version=0.27,'non');
239                }
240                if ($current_version<0.29){
241                        include_spip('base/create');
242                        include_spip('base/abstract_sql');
243                        creer_base();
244                        spip_query("ALTER TABLE spip_forms_donnees ADD bgch bigint(21) NOT NULL AFTER rang");
245                        spip_query("ALTER TABLE spip_forms_donnees ADD bdte bigint(21) NOT NULL AFTER bgch");
246                        spip_query("ALTER TABLE spip_forms_donnees ADD niveau bigint(21) DEFAULT '0' NOT NULL AFTER bdte");
247                        echo "forms update @ 0.29<br/>";
248                        ecrire_meta('forms_base_version',$current_version=0.29,'non');
249                }
250                if ($current_version<0.31){
251                        spip_query("ALTER TABLE spip_forms_champs ADD listable ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER specifiant");
252                        echo "forms update @ 0.31<br/>";
253                        ecrire_meta('forms_base_version',$current_version=0.31,'non');
254                }
255                if ($current_version<0.32){
256                        spip_query("ALTER TABLE spip_forms_champs CHANGE listable listable_admin ENUM('non', 'oui') DEFAULT 'oui' NOT NULL");
257                        $res = spip_query("ALTER TABLE spip_forms_champs ADD listable ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER listable_admin");
258                        if ($res)
259                                spip_query("UPDATE spip_forms_champs SET listable=specifiant"); // valeur par defaut pour iso fonctionnalite cote public
260                        echo "forms update @ 0.32<br/>";
261                        ecrire_meta('forms_base_version',$current_version=0.32,'non');
262                }
263                if ($current_version<0.33){
264                        spip_query("ALTER TABLE spip_forms_donnees_champs CHANGE valeur valeur TEXT NOT NULL");
265                        echo "forms update @ 0.33<br/>";
266                        ecrire_meta('forms_base_version',$current_version=0.33,'non');
267                }
268                if ($current_version<0.34){
269                        spip_query("ALTER TABLE spip_forms_donnees_champs DROP INDEX champ , ADD UNIQUE champ ( champ ( 128 ) , id_donnee , valeur ( 128 ) )"); 
270                        echo "forms update @ 0.34<br/>";
271                        ecrire_meta('forms_base_version',$current_version=0.34,'non');
272                }
273                if ($current_version<0.35){
274                        spip_query("ALTER TABLE spip_forms ADD arborescent ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER documents");
275                        echo "forms update @ 0.35<br/>";
276                        ecrire_meta('forms_base_version',$current_version=0.35,'non');
277                }
278                if ($current_version<0.36){
279                        include_spip('base/create');
280                        include_spip('base/abstract_sql');
281                        creer_base();
282                        echo "forms update @ 0.36<br/>";
283                        ecrire_meta('forms_base_version',$current_version=0.36,'non');
284                }
285                if ($current_version<0.37){
286                        spip_query("ALTER TABLE spip_forms_champs ADD taille bigint(21) NOT NULL NULL AFTER type");
287                        echo "forms update @ 0.37<br/>";
288                        ecrire_meta('forms_base_version',$current_version=0.37,'non');
289                }
290                if ($current_version<0.38){
291                        ecrire_meta('forms_et_tables',serialize(array('associer_donnees_articles'=>1,'associer_donnees_rubriques'=>0,'associer_donnees_auteurs'=>0)));
292                        echo "forms update @ 0.38<br/>";
293                        ecrire_meta('forms_base_version',$current_version=0.38,'non');                 
294                }
295                if ($current_version<0.39){
296                        spip_query("ALTER TABLE `spip_forms_articles` DROP INDEX `id_form`");
297                        spip_query("ALTER TABLE `spip_forms_articles` ADD PRIMARY KEY ( `id_form` , `id_article` )");
298                        spip_query("ALTER TABLE `forms_donnees_articles` DROP INDEX `id_donnee`");
299                        spip_query("ALTER TABLE `forms_donnees_articles` ADD PRIMARY KEY ( `id_donnee` , `id_article` )");
300                        spip_query("ALTER TABLE `spip_forms_rubriques` DROP INDEX `id_donnee`");
301                        spip_query("ALTER TABLE `spip_forms_rubriques` ADD PRIMARY KEY ( `id_donnee` , `id_rubrique` )");
302                        spip_query("ALTER TABLE `forms_donnees_donnees` DROP INDEX `id_donnee`");
303                        spip_query("ALTER TABLE `forms_donnees_donnees` ADD PRIMARY KEY ( `id_donnee` , `id_donnee_liee` )");
304                        spip_query("ALTER TABLE `forms_donnees_auteurs` DROP INDEX `id_donnee`");
305                        spip_query("ALTER TABLE `forms_donnees_auteurs` ADD PRIMARY KEY ( `id_donnee` , `id_auteur` )");
306                        echo "forms update @ 0.39<br/>";
307                        ecrire_meta('forms_base_version',$current_version=0.39,'non');
308                }
309                if ($current_version<0.40){
310                        spip_query("ALTER TABLE spip_forms_champs ADD saisie ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER public");
311                        echo "forms update @ 0.40<br/>";
312                        ecrire_meta('forms_base_version',$current_version=0.40,'non');
313                }
314
315                ecrire_metas();
316        }
317       
318        function Forms_vider_tables() {
319                spip_query("DROP TABLE spip_forms");
320                spip_query("DROP TABLE spip_forms_champs");
321                spip_query("DROP TABLE spip_forms_champs_choix");
322                spip_query("DROP TABLE spip_forms_donnees");
323                spip_query("DROP TABLE spip_forms_donnees_champs");
324                spip_query("DROP TABLE spip_forms_donnees_donnees");
325                spip_query("DROP TABLE spip_forms_articles");
326                spip_query("DROP TABLE spip_forms_donnees_articles");
327                spip_query("DROP TABLE spip_forms_documents_donnees");
328                effacer_meta('forms_base_version');
329                ecrire_metas();
330        }
331       
332        function Forms_install($action){
333                global $forms_base_version;
334                switch ($action){
335                        case 'test':
336                                return (isset($GLOBALS['meta']['forms_base_version']) AND ($GLOBALS['meta']['forms_base_version']>=$forms_base_version));
337                                break;
338                        case 'install':
339                                Forms_upgrade();
340                                break;
341                        case 'uninstall':
342                                Forms_vider_tables();
343                                break;
344                }
345        }       
346?>
Note: See TracBrowser for help on using the repository browser.