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

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

Le dépot 18013 mettait systématiquement le champ_saisie à rien au lieu de oui (sa valeur par défaut).

Du coup, toute validation dans le mode édition rendait le champ de formulaire non visible au public.

File size: 9.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 * 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 == 'texte')
44                        if ($champ_barre_typo=_request('champ_barre_typo')) $extra_info = $champ_barre_typo;
45                if ($type == 'monnaie')
46                        if ($unite=_request('unite_monetaire')!==NULL) $extra_info = $unite;
47                if ($type == 'url')
48                        if ($champ_verif=_request('champ_verif')) $extra_info = $champ_verif;
49                if ($type == 'mot') {
50                        if ($id_groupe = intval(_request("groupe_$champ")))
51                                $extra_info = $id_groupe;
52                }
53                if ($type == 'joint') {
54                        if ($type_table = _request('type_table'))
55                                $extra_info = $type_table;
56                }
57                if ($type == 'fichier') {
58                        $extra_info = intval(_request('taille_champ'));
59                }
60                if ($type=='select'){
61                        $extra_info = _request('format_liste');
62                }
63                if ($type == 'password')
64                        if ($champ_confirmer_pass=_request('champ_confirmer_pass')) $extra_info = $champ_confirmer_pass;
65                $extra_info = pipeline('forms_update_edition_champ',array('args'=>array('row'=>$row),'data'=>$extra_info));
66                spip_query("UPDATE spip_forms_champs SET extra_info="._q($extra_info)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
67                if ($type == 'select' || $type == 'multiple') {
68                        $res2 = spip_query("SELECT choix FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
69                        while ($row2 = spip_fetch_array($res2)){
70                                if ($titre = _request($row2['choix']))
71                                        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']));
72                        }
73                        if (strlen($ordre = _request('ordre'))){
74                                $ordre = explode("&",$ordre);
75                                $rang = 1;$ok = true;
76                                $replace = "";
77                                foreach($ordre as $item){
78                                        $item = explode("=",$item);
79                                        $item = explode("-",$item[1]);
80                                        if (($c=array_shift($item))!=$champ) $ok=false;
81                                        $choix = implode("-",$item);
82                                        $update[]="UPDATE spip_forms_champs_choix SET rang="._q($rang++)." WHERE id_form="._q($id_form)." AND champ="._q($champ)." AND choix="._q($choix);
83                                }
84                                if ($ok)
85                                        foreach($update as $q)
86                                                spip_query($q);
87                        }
88                }
89        }
90}
91
92function Forms_update($id_form){
93        $titre = _request('titre');
94        $descriptif = _request('descriptif');
95        $email = _request('email');
96        $champconfirm = _request('champconfirm');
97        $texte = _request('texte');
98        $type_form = _request('type_form');
99        $modifiable = _request('modifiable');
100        $multiple = _request('multiple');
101        $forms_obligatoires = _request('forms_obligatoires');
102        $moderation = _request('moderation');
103        $public = _request('public');
104        $linkable = _request('linkable');
105        $documents = _request('documents');
106        $html_wrap = _request('html_wrap');
107
108        $modif_champ = _request('modif_champ');
109        $ajout_champ = _request('ajout_champ');
110        $nom_champ = _request('nom_champ');
111        $champ_obligatoire = _request('champ_obligatoire');
112        $champ_public = _request('champ_public');
113        $champ_specifiant = _request('champ_specifiant');
114        $champ_listable_admin = _request('champ_listable_admin');
115        $champ_listable = _request('champ_listable');
116        $champ_saisie = _request('champ_saisie');
117        $taille_champ = _request('taille_champ');
118        $aide_champ = _request('aide_champ');
119        $wrap_champ = _request('wrap_champ');
120        $supp_choix = _request('supp_choix');
121        $supp_champ = _request('supp_champ');
122        $ordonne_champs = _request('ordonne_champs');
123       
124        //
125        // Modifications des donnees de base du formulaire
126        //
127       
128        $nouveau_champ = $champ_visible = $ajout_choix = NULL;
129        // creation
130        if ($id_form == 'new' && $titre) {
131                spip_query("INSERT INTO spip_forms (titre) VALUES ("._q($titre).")");
132                $id_form = spip_insert_id();
133        }
134        // maj
135        if (intval($id_form) && $titre) {
136                $query = "UPDATE spip_forms SET ".
137                        "titre="._q($titre).", ".
138                        "descriptif="._q($descriptif).", ".
139                        "type_form="._q($type_form).", ".
140                        "modifiable="._q($modifiable).", ".
141                        "multiple="._q($multiple).", ".
142                        "forms_obligatoires="._q($forms_obligatoires).", ".
143                        "email="._q(serialize($email)).", ".
144                        "champconfirm="._q($champconfirm).", ".
145                        "texte="._q($texte).", ".
146                        "moderation="._q($moderation).", ".
147                        "public="._q($public).", ".
148                        "linkable="._q($linkable?$linkable:'non').", ".
149                        "documents="._q($documents?$documents:'non').", ".
150                        "html_wrap="._q($html_wrap)." ".
151                        "WHERE id_form="._q($id_form);
152                $result = spip_query($query);
153        }
154        // lecture
155        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
156        if ($row = spip_fetch_array($result)) {
157                $id_form = $row['id_form'];
158                $titre = $row['titre'];
159                $descriptif = $row['descriptif'];
160                $type_form = $row['type_form'];
161                $modifiable = $row['modifiable'];
162                $multiple = $row['multiple'];
163                $forms_obligatoires = $row['forms_obligatoires'];
164                $moderation = $row['moderation'];
165                $public = $row['public'];
166                $linkable = $row['linkable'];
167                $documents = $row['documents'];
168                $email = unserialize($row['email']);
169                $champconfirm = $row['champconfirm'];
170                $html_wrap = $row['html_wrap'];
171                $texte = $row['texte'];
172        }
173       
174        if ($id_form) {
175                $champ_visible = NULL;
176                // Ajout d'un champ
177                if (($type = $ajout_champ) && Forms_type_champ_autorise($type)) {
178                        $titre = _T("forms:nouveau_champ");
179                        include_spip('inc/charsets');
180                        $titre = unicode2charset(html2unicode($titre));
181                        $champ = Forms_insere_nouveau_champ($id_form,$type,$titre);
182                        $champ_visible = $nouveau_champ = $champ;
183                }
184                // Modif d'un champ
185                if ($champ = $modif_champ) {
186                        if ($row = spip_fetch_array(spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ)))) {
187                                if (_request('switch_select_multi')){
188                                        if ($row['type']=='select') $newtype = 'multiple';
189                                        if ($row['type']=='multiple') $newtype = 'select';
190                                        $newchamp = Forms_nouveau_champ($id_form,$newtype);
191                                        spip_query("UPDATE spip_forms_champs SET type="._q($newtype).", champ="._q($newchamp)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
192                                        spip_query("UPDATE spip_forms_champs_choix SET champ="._q($newchamp)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
193                                        $champ = $newchamp;
194                                        $champ_visible = $champ;
195                                }
196                                else {
197                                        spip_query("UPDATE spip_forms_champs SET titre="._q($nom_champ).", obligatoire="._q($champ_saisie=='non'?'non':$champ_obligatoire)
198                                                .", specifiant="._q($champ_specifiant)
199                                                .", listable="._q($champ_listable).", listable_admin="._q($champ_listable_admin)
200                                                .", public="._q($champ_public).", saisie="._q($champ_saisie=='non'?'non':'oui')
201                                                .($taille_champ!==NULL?", taille="._q($taille_champ):"")
202                                                .", aide="._q($aide_champ).", html_wrap="._q($wrap_champ)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
203                                        Forms_update_edition_champ($id_form, $champ);
204                                        // switch select to multi ou inversement, apres avoir fait les mises a jour
205                                }
206                                if (_request('ajout_choix')) {
207                                        $titre = _T("forms:nouveau_choix");
208                                        include_spip('inc/charsets');
209                                        $titre = unicode2charset(html2unicode($titre));
210                                        $ajout_choix = Forms_insere_nouveau_choix($id_form,$champ,$titre);
211                                }
212                        }
213                }
214                // Cas particulier : suppression d'un choix
215                // hum (id_form,choix) est il unique ? oui
216                if ($choix = $supp_choix){
217                        if ($row = spip_fetch_array(spip_query("SELECT champ FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND choix="._q($choix)))) {
218                                spip_query("DELETE FROM spip_forms_champs_choix WHERE choix="._q($choix)." AND id_form="._q($id_form)." AND champ="._q($row['champ']));
219                        }
220                }
221                // Suppression d'un champ
222                if ($champ = $supp_champ) {
223                        spip_query("DELETE FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
224                        spip_query("DELETE FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ));
225                }
226                if ($id_form==intval($ordonne_champs)){
227                        Forms_ordonne_champs($id_form);
228                }
229        }
230        return array($id_form,$champ_visible,$nouveau_champ,$ajout_choix);
231}
232
233function action_forms_edit(){
234        global $auteur_session;
235        $arg = _request('arg');
236        $hash = _request('hash');
237        $id_auteur = $auteur_session['id_auteur'];
238        $redirect = str_replace("&amp;","&",urldecode(_request('redirect')));
239        //$redirect = parametre_url($redirect,'var_ajaxcharset',''); // si le redirect sert, pas d'ajax !
240        if ($redirect==NULL) $redirect="";
241        if (!include_spip("inc/securiser_action"))
242                include_spip("inc/actions");
243        if (verifier_action_auteur("forms_edit-$arg",$hash,$id_auteur)==TRUE) {
244                $arg=explode("-",$arg);
245                $id_form = $arg[0];
246                if ((intval($id_form) && autoriser('modifier','form',$id_form))
247                        || (($id_form=='new') && (autoriser('creer','form'))) ) {
248                        list($id_form,$champ_visible,$nouveau_champ,$ajout_choix) = Forms_update($id_form);
249                        if ($redirect) $redirect = parametre_url($redirect,"id_form",$id_form);
250                        if ($redirect && $champ_visible) $redirect = parametre_url($redirect,"champ_visible",$champ_visible);
251                        if ($redirect && $nouveau_champ) $redirect = parametre_url($redirect,"nouveau_champ",$nouveau_champ);
252                        if ($redirect && $ajout_choix) $redirect = parametre_url($redirect,"ajout_choix",$ajout_choix);
253                }
254        }
255        if ($redirect)
256                redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
257}
258
259?>
Note: See TracBrowser for help on using the repository browser.