source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/action/forms_edit.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: 10.1 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        $documents_mail = _request('documents_mail');
107        $html_wrap = _request('html_wrap');
108
109        $modif_champ = _request('modif_champ');
110        $ajout_champ = _request('ajout_champ');
111        $nom_champ = _request('nom_champ');
112        $champ_obligatoire = _request('champ_obligatoire');
113        $champ_public = _request('champ_public');
114        $champ_specifiant = _request('champ_specifiant');
115        $champ_listable_admin = _request('champ_listable_admin');
116        $champ_listable = _request('champ_listable');
117        $champ_saisie = _request('champ_saisie');
118        $taille_champ = _request('taille_champ');
119        $aide_champ = _request('aide_champ');
120        $wrap_champ = _request('wrap_champ');
121        $supp_choix = _request('supp_choix');
122        $supp_champ = _request('supp_champ');
123        $ordonne_champs = _request('ordonne_champs');
124
125        //
126        // Modifications des donnees de base du formulaire
127        //
128
129        $nouveau_champ = $champ_visible = $ajout_choix = NULL;
130        // creation
131        if ($id_form == 'new' && $titre) {
132                spip_query("INSERT INTO spip_forms (titre) VALUES ("._q($titre).")");
133                $id_form = spip_insert_id();
134        }
135        // maj
136        if (intval($id_form) && $titre) {
137                $query = "UPDATE spip_forms SET ".
138                        "titre="._q($titre).", ".
139                        "descriptif="._q($descriptif).", ".
140                        "type_form="._q($type_form).", ".
141                        "modifiable="._q($modifiable).", ".
142                        "multiple="._q($multiple).", ".
143                        "forms_obligatoires="._q($forms_obligatoires).", ".
144                        "email="._q(serialize($email)).", ".
145                        "champconfirm="._q($champconfirm).", ".
146                        "texte="._q($texte).", ".
147                        "moderation="._q($moderation).", ".
148                        "public="._q($public).", ".
149                        "linkable="._q($linkable?$linkable:'non').", ".
150                        "documents="._q($documents?$documents:'non').", ".
151                        "documents_mail="._q($documents_mail?$documents_mail:'non').", ".
152                        "html_wrap="._q($html_wrap)." ".
153                        "WHERE id_form="._q($id_form);
154                $result = spip_query($query);
155        }
156        // lecture
157        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
158        if ($row = spip_fetch_array($result)) {
159                $id_form = $row['id_form'];
160                $titre = $row['titre'];
161                $descriptif = $row['descriptif'];
162                $type_form = $row['type_form'];
163                $modifiable = $row['modifiable'];
164                $multiple = $row['multiple'];
165                $forms_obligatoires = $row['forms_obligatoires'];
166                $moderation = $row['moderation'];
167                $public = $row['public'];
168                $linkable = $row['linkable'];
169                $documents = $row['documents'];
170                $documents_mail = $row['documents_mail'];
171                $email = unserialize($row['email']);
172                $champconfirm = $row['champconfirm'];
173                $html_wrap = $row['html_wrap'];
174                $texte = $row['texte'];
175        }
176
177        if ($id_form) {
178                $champ_visible = NULL;
179                // Ajout d'un champ
180                if (($type = $ajout_champ) && Forms_type_champ_autorise($type)) {
181                        $titre = _T("forms:nouveau_champ");
182                        include_spip('inc/charsets');
183                        $titre = unicode2charset(html2unicode($titre));
184                        $champ = Forms_insere_nouveau_champ($id_form,$type,$titre);
185                        $champ_visible = $nouveau_champ = $champ;
186                }
187                // Modif d'un champ
188                if ($champ = $modif_champ) {
189                        if ($row = spip_fetch_array(spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ)))) {
190                                if (_request('switch_select_multi')){
191                                        if ($row['type']=='select') $newtype = 'multiple';
192                                        if ($row['type']=='multiple') $newtype = 'select';
193                                        $newchamp = Forms_nouveau_champ($id_form,$newtype);
194                                        spip_query("UPDATE spip_forms_champs SET type="._q($newtype).", champ="._q($newchamp)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
195                                        spip_query("UPDATE spip_forms_champs_choix SET champ="._q($newchamp)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
196                                        $champ = $newchamp;
197                                        $champ_visible = $champ;
198                                }
199                                else {
200                                        spip_query("UPDATE spip_forms_champs SET titre="._q($nom_champ).", obligatoire="._q($champ_saisie=='non'?'non':$champ_obligatoire)
201                                                .", specifiant="._q($champ_specifiant)
202                                                .", listable="._q($champ_listable).", listable_admin="._q($champ_listable_admin)
203                                                .", public="._q($champ_public).", saisie="._q($champ_saisie=='non'?'non':'oui')
204                                                .($taille_champ!==NULL?", taille="._q($taille_champ):"")
205                                                .", aide="._q($aide_champ).", html_wrap="._q($wrap_champ)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
206                                        Forms_update_edition_champ($id_form, $champ);
207                                        // switch select to multi ou inversement, apres avoir fait les mises a jour
208                                }
209                                if (_request('ajout_choix')) {
210                                        $titre = _T("forms:nouveau_choix");
211                                        include_spip('inc/charsets');
212                                        $titre = unicode2charset(html2unicode($titre));
213                                        $ajout_choix = Forms_insere_nouveau_choix($id_form,$champ,$titre);
214                                }
215                        }
216                }
217                // Cas particulier : suppression d'un choix
218                // hum (id_form,choix) est il unique ? oui
219                if ($choix = $supp_choix){
220                        if ($row = spip_fetch_array(spip_query("SELECT champ FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND choix="._q($choix)))) {
221                                spip_query("DELETE FROM spip_forms_champs_choix WHERE choix="._q($choix)." AND id_form="._q($id_form)." AND champ="._q($row['champ']));
222                        }
223                }
224                // Suppression d'un champ
225                if ($champ = $supp_champ) {
226                        spip_query("DELETE FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
227                        spip_query("DELETE FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ));
228                }
229                if ($id_form==intval($ordonne_champs)){
230                        Forms_ordonne_champs($id_form);
231                }
232        }
233        return array($id_form,$champ_visible,$nouveau_champ,$ajout_choix);
234}
235
236function action_forms_edit(){
237        global $auteur_session;
238        $arg = _request('arg');
239        $hash = _request('hash');
240        $id_auteur = $auteur_session['id_auteur'];
241        $redirect = str_replace("&amp;","&",urldecode(_request('redirect')));
242        //$redirect = parametre_url($redirect,'var_ajaxcharset',''); // si le redirect sert, pas d'ajax !
243        if ($redirect==NULL) $redirect="";
244        if (!include_spip("inc/securiser_action"))
245                include_spip("inc/actions");
246        if (verifier_action_auteur("forms_edit-$arg",$hash,$id_auteur)==TRUE) {
247                $arg=explode("-",$arg);
248                $id_form = $arg[0];
249                if ((intval($id_form) && autoriser('modifier','form',$id_form))
250                        || (($id_form=='new') && (autoriser('creer','form'))) ) {
251                        list($id_form,$champ_visible,$nouveau_champ,$ajout_choix) = Forms_update($id_form);
252                        if ($redirect) $redirect = parametre_url($redirect,"id_form",$id_form);
253                        if ($redirect && $champ_visible) $redirect = parametre_url($redirect,"champ_visible",$champ_visible);
254                        if ($redirect && $nouveau_champ) $redirect = parametre_url($redirect,"nouveau_champ",$nouveau_champ);
255                        if ($redirect && $ajout_choix) $redirect = parametre_url($redirect,"ajout_choix",$ajout_choix);
256                }
257        }
258        if ($redirect)
259                redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
260}
261
262?>
Note: See TracBrowser for help on using the repository browser.