source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/action/forms_edit.php @ 7651

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

"on ne pouvait plus modifier le titre"

File size: 8.4 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 * © 2005,2006 - Distribue sous licence GNU/GPL
11 *
12 */
13include_spip('inc/forms');
14include_spip('inc/forms_edit');
15include_spip('inc/forms_type_champs');
16if (!include_spip('inc/autoriser'))
17        include_spip('inc/autoriser_compat');
18// TODO : charger la bonne langue !
19function Forms_ordonne_champs($id_form){
20        if (strlen($ordre = _request('ordre'))){
21                $ordre = explode("&",$ordre);
22                $rang = 1;$ok = true;
23                $replace = "";
24                foreach($ordre as $item){
25                        $item = explode("=",$item);
26                        $item = explode("-",$item[1]);
27                        array_shift($item);
28                        if (($c=array_shift($item))!=$id_form) $ok=false;
29                        $champ = implode("-",$item);
30                        $update[]="UPDATE spip_forms_champs SET rang="._q($rang++)." WHERE id_form="._q($id_form)." AND champ="._q($champ);
31                }
32                if ($ok)
33                        foreach($update as $q)
34                                spip_query($q);
35        }
36}
37
38function Forms_update_edition_champ($id_form,$champ) {
39        $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ));
40        if ($row = spip_fetch_array($res)){
41                $type = $row['type'];
42                $extra_info = "";
43                if ($type == 'url')
44                        if ($champ_verif=_request('champ_verif')) $extra_info = $champ_verif;
45                if ($type == 'mot') {
46                        if ($id_groupe = intval(_request('groupe_champ')))
47                                $extra_info = $id_groupe;
48                }
49                if ($type == 'fichier') {
50                        $extra_info = intval(_request('taille_champ'));
51                }
52                if ($type=='select'){
53                        $extra_info = _request('format_liste');
54                }
55                spip_query("UPDATE spip_forms_champs SET extra_info="._q($extra_info)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
56                if ($type == 'select' || $type == 'multiple') {
57                        $res2 = spip_query("SELECT choix FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
58                        while ($row2 = spip_fetch_array($res2)){
59                                if ($titre = _request($row2['choix']))
60                                        spip_query("UPDATE spip_forms_champs_choix SET titre="._q($titre)." WHERE id_form="._q($id_form)." AND champ="._q($champ)." AND choix="._q($row2['choix']));
61                        }
62                        if (strlen($ordre = _request('ordre'))){
63                                $ordre = explode("&",$ordre);
64                                $rang = 1;$ok = true;
65                                $replace = "";
66                                foreach($ordre as $item){
67                                        $item = explode("=",$item);
68                                        $item = explode("-",$item[1]);
69                                        if (($c=array_shift($item))!=$champ) $ok=false;
70                                        $choix = implode("-",$item);
71                                        $update[]="UPDATE spip_forms_champs_choix SET rang="._q($rang++)." WHERE id_form="._q($id_form)." AND champ="._q($champ)." AND choix="._q($choix);
72                                }
73                                if ($ok)
74                                        foreach($update as $q)
75                                                spip_query($q);
76                        }
77                }
78        }
79}
80
81function Forms_update($id_form){
82        $titre = _request('titre');
83        $descriptif = _request('descriptif');
84        $email = _request('email');
85        $champconfirm = _request('champconfirm');
86        $texte = _request('texte');
87        $type_form = _request('type_form');
88        $moderation = _request('moderation');
89        $public = _request('public');
90        $html_wrap = _request('html_wrap');
91
92        $modif_champ = _request('modif_champ');
93        $ajout_champ = _request('ajout_champ');
94        $nom_champ = _request('nom_champ');
95        $champ_obligatoire = _request('champ_obligatoire');
96        $champ_public = _request('champ_public');
97        $champ_specifiant = _request('champ_specifiant');
98        $aide_champ = _request('aide_champ');
99        $wrap_champ = _request('wrap_champ');
100        $supp_choix = _request('supp_choix');
101        $supp_champ = _request('supp_champ');
102        $ordonne_champs = _request('ordonne_champs');
103       
104        //
105        // Modifications des donnees de base du formulaire
106        //
107       
108        $nouveau_champ = $champ_visible = $ajout_choix = NULL;
109        // creation
110        if ($id_form == 'new' && $titre) {
111                spip_query("INSERT INTO spip_forms (titre) VALUES ("._q($titre).")");
112                $id_form = spip_insert_id();
113        }
114        // maj
115        if (intval($id_form) && $titre) {
116                $query = "UPDATE spip_forms SET ".
117                        "titre="._q($titre).", ".
118                        "descriptif="._q($descriptif).", ".
119                        "type_form="._q($type_form).", ".
120                        "email="._q(serialize($email)).", ".
121                        "champconfirm="._q($champconfirm).", ".
122                        "texte="._q($texte).", ".
123                        "moderation="._q($moderation).", ".
124                        "public="._q($public).", ".
125                        "html_wrap="._q($html_wrap)." ".
126                        "WHERE id_form="._q($id_form);
127                $result = spip_query($query);
128        }
129        // lecture
130        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
131        if ($row = spip_fetch_array($result)) {
132                $id_form = $row['id_form'];
133                $titre = $row['titre'];
134                $descriptif = $row['descriptif'];
135                $type_form = $row['type_form'];
136                $moderation = $row['moderation'];
137                $public = $row['public'];
138                $email = unserialize($row['email']);
139                $champconfirm = $row['champconfirm'];
140                $html_wrap = $row['html_wrap'];
141                $texte = $row['texte'];
142        }
143       
144        if ($id_form) {
145                $champ_visible = NULL;
146                // Ajout d'un champ
147                if (($type = $ajout_champ) && Forms_type_champ_autorise($type)) {
148                        $titre = _T("forms:nouveau_champ");
149                        include_spip('inc/charsets');
150                        $titre = unicode2charset(html2unicode($titre));
151                        $champ = Forms_insere_nouveau_champ($id_form,$type,$titre);
152                        $champ_visible = $nouveau_champ = $champ;
153                }
154                // Modif d'un champ
155                if ($champ = $modif_champ) {
156                        if ($row = spip_fetch_array(spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ)))) {
157                                if (_request('switch_select_multi')){
158                                        if ($row['type']=='select') $newtype = 'multiple';
159                                        if ($row['type']=='multiple') $newtype = 'select';
160                                        $newchamp = Forms_nouveau_champ($id_form,$newtype);
161                                        spip_query("UPDATE spip_forms_champs SET type="._q($newtype).", champ="._q($newchamp)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
162                                        spip_query("UPDATE spip_forms_champs_choix SET champ="._q($newchamp)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
163                                        $champ = $newchamp;
164                                        $champ_visible = $champ;
165                                }
166                                else {
167                                        spip_query("UPDATE spip_forms_champs SET titre="._q($nom_champ).", obligatoire="._q($champ_obligatoire)
168                                                .", specifiant="._q($champ_specifiant).", public="._q($champ_public)
169                                                .", aide="._q($aide_champ).", html_wrap="._q($wrap_champ)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
170                                        Forms_update_edition_champ($id_form, $champ);
171                                        // switch select to multi ou inversement, apres avoir fait les mises a jour
172                                }
173                                if (_request('ajout_choix')) {
174                                        $titre = _T("forms:nouveau_choix");
175                                        include_spip('inc/charsets');
176                                        $titre = unicode2charset(html2unicode($titre));
177                                        $ajout_choix = Forms_insere_nouveau_choix($id_form,$champ,$titre);
178                                }
179                        }
180                }
181                // Cas particulier : suppression d'un choix
182                // hum (id_form,choix) est il unique ? oui
183                if ($choix = $supp_choix){
184                        if ($row = spip_fetch_array(spip_query("SELECT champ FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND choix="._q($choix)))) {
185                                spip_query("DELETE FROM spip_forms_champs_choix WHERE choix="._q($choix)." AND id_form="._q($id_form)." AND champ="._q($row['champ']));
186                        }
187                }
188                // Suppression d'un champ
189                if ($champ = $supp_champ) {
190                        spip_query("DELETE FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
191                        spip_query("DELETE FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ));
192                }
193                if ($id_form==intval($ordonne_champs)){
194                        Forms_ordonne_champs($id_form);
195                }
196        }
197        return array($id_form,$champ_visible,$nouveau_champ,$ajout_choix);
198}
199
200function action_forms_edit(){
201        global $auteur_session;
202        $arg = _request('arg');
203        $hash = _request('hash');
204        $id_auteur = $auteur_session['id_auteur'];
205        $redirect = str_replace("&amp;","&",urldecode(_request('redirect')));
206        //$redirect = parametre_url($redirect,'var_ajaxcharset',''); // si le redirect sert, pas d'ajax !
207        if ($redirect==NULL) $redirect="";
208        if (!include_spip("inc/securiser_action"))
209                include_spip("inc/actions");
210        if (verifier_action_auteur("forms_edit-$arg",$hash,$id_auteur)==TRUE) {
211                $arg=explode("-",$arg);
212                $id_form = $arg[0];
213                if ((intval($id_form) && autoriser('modifier','form',$id_form))
214                        || (($id_form=='new') && (autoriser('creer','form'))) ) {
215                        list($id_form,$champ_visible,$nouveau_champ,$ajout_choix) = Forms_update($id_form);
216                        if ($redirect) $redirect = parametre_url($redirect,"id_form",$id_form);
217                        if ($redirect && $champ_visible) $redirect = parametre_url($redirect,"champ_visible",$champ_visible);
218                        if ($redirect && $nouveau_champ) $redirect = parametre_url($redirect,"nouveau_champ",$nouveau_champ);
219                        if ($redirect && $ajout_choix) $redirect = parametre_url($redirect,"ajout_choix",$ajout_choix);
220                }
221        }
222        if ($redirect)
223                redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
224}
225
226?>
Note: See TracBrowser for help on using the repository browser.