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

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

Ajout d'un parametre document_mail aux formulaires permettant la gestion des pièces jointes dans les mails (pas dans le mail de confirmation).
Du coup, increment de forms_base_version et de la version dans plugin.xml

File size: 15.9 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.41;
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                if ($current_version<0.41){
315                        spip_query("ALTER TABLE spip_forms ADD documents_mail ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER documents");
316                        echo "forms update @ 0.41<br/>";
317                        ecrire_meta('forms_base_version',$current_version=0.41,'non');
318                }
319
320                ecrire_metas();
321        }
322
323        function Forms_vider_tables() {
324                spip_query("DROP TABLE spip_forms");
325                spip_query("DROP TABLE spip_forms_champs");
326                spip_query("DROP TABLE spip_forms_champs_choix");
327                spip_query("DROP TABLE spip_forms_donnees");
328                spip_query("DROP TABLE spip_forms_donnees_champs");
329                spip_query("DROP TABLE spip_forms_donnees_donnees");
330                spip_query("DROP TABLE spip_forms_articles");
331                spip_query("DROP TABLE spip_forms_donnees_articles");
332                spip_query("DROP TABLE spip_forms_documents_donnees");
333                effacer_meta('forms_base_version');
334                ecrire_metas();
335        }
336
337        function Forms_install($action){
338                global $forms_base_version;
339                switch ($action){
340                        case 'test':
341                                return (isset($GLOBALS['meta']['forms_base_version']) AND ($GLOBALS['meta']['forms_base_version']>=$forms_base_version));
342                                break;
343                        case 'install':
344                                Forms_upgrade();
345                                break;
346                        case 'uninstall':
347                                Forms_vider_tables();
348                                break;
349                }
350        }
351?>
Note: See TracBrowser for help on using the repository browser.