[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / formidable_1_0 / traiter / enregistrement.php
1 <?php
2
3 // Sécurité
4 if (!defined("_ECRIRE_INC_VERSION")) return;
5
6 function traiter_enregistrement_dist($args, $retours){
7 include_spip('inc/formidable');
8 include_spip('base/abstract_sql');
9 $options = $args['options'];
10 $formulaire = $args['formulaire'];
11 $id_formulaire = intval($formulaire['id_formulaire']);
12 $saisies = unserialize($formulaire['saisies']);
13 $saisies = saisies_lister_par_nom($saisies);
14
15 // La personne a-t-elle un compte ?
16 global $auteur_session;
17 $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
18
19 // traitement de l'anonymisation
20 if ($options['anonymiser'] == 'on') {
21 // mod de l'id_auteur
22 $variables_anonymisation =
23 $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
24 $id = eval("return $variables_anonymisation;");
25 $id_auteur = formidable_scramble($id);
26 }
27 // On cherche le cookie et sinon on le crée
28 $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
29 if (isset($_COOKIE[$nom_cookie]))
30 $cookie = $_COOKIE[$nom_cookie];
31 else {
32 include_spip("inc/acces");
33 $cookie = creer_uniqid();
34 }
35
36 // On regarde si c'est une modif d'une réponse existante
37 $id_formulaires_reponse = intval(_request('deja_enregistre_'.$id_formulaire));
38
39 // Si la moderation est a posteriori ou que la personne est un boss, on publie direct
40 if ($options['moderation'] == 'posteriori' or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire'=>$id_formulaire, 'nouveau_statut'=>'publie')))
41 $statut='publie';
42 else
43 $statut = 'prop';
44
45 // Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
46 if (!$id_formulaires_reponse){
47 $id_formulaires_reponse = sql_insertq(
48 'spip_formulaires_reponses',
49 array(
50 'id_formulaire' => $id_formulaire,
51 'id_auteur' => $id_auteur,
52 'cookie' => $cookie,
53 'ip' => $GLOBALS['ip'],
54 'date' => 'NOW()',
55 'statut' => $statut
56 )
57 );
58 // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
59 if (!$options['multiple'] or $options['modifiable']){
60 include_spip("inc/cookie");
61 // Expiration dans 30 jours
62 spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
63 }
64 }
65
66 // Si l'id n'a pas été créé correctement alors erreur
67 if (!($id_formulaires_reponse > 0)){
68 $retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
69 }
70 // Sinon on continue à mettre à jour
71 else{
72 $champs = array();
73 $insertions = array();
74 foreach($saisies as $nom => $saisie){
75 // On ne prend que les champs qui ont effectivement été envoyés par le formulaire
76 if (($valeur = _request($nom)) !== null){
77 $champs[] = $nom;
78 $insertions[] = array(
79 'id_formulaires_reponse' => $id_formulaires_reponse,
80 'nom' => $nom,
81 'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
82 );
83 }
84 }
85
86 // S'il y a bien des choses à modifier
87 if ($champs){
88 // On supprime d'abord les champs
89 sql_delete(
90 'spip_formulaires_reponses_champs',
91 array(
92 'id_formulaires_reponse = '.$id_formulaires_reponse,
93 sql_in('nom', $champs)
94 )
95 );
96
97 // Puis on insère les nouvelles valeurs
98 sql_insertq_multi(
99 'spip_formulaires_reponses_champs',
100 $insertions
101 );
102 }
103 }
104
105 return $retours;
106 }
107
108 function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){
109 include_spip('inc/saisies');
110 include_spip('base/abstract_sql');
111 $comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
112
113 // Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
114 if ($comparaison['supprimees']){
115 // On récupère les réponses du formulaire
116 $reponses = sql_allfetsel(
117 'id_formulaires_reponse',
118 'spip_formulaires_reponses',
119 'id_formulaire = '.$id_formulaire
120 );
121 $reponses = array_map('reset', $reponses);
122
123 // Tous les noms de champs à supprimer
124 $noms = array_keys($comparaison['supprimees']);
125
126 // On supprime
127 sql_delete(
128 'spip_formulaires_reponses_champs',
129 array(
130 sql_in('id_formulaires_reponse', $reponses),
131 sql_in('nom', $noms)
132 )
133 );
134 }
135 }
136
137 ?>