Newer
Older
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
function traiter_enregistrement_dist($args, $retours){

kent1@arscenic.info
a validé
include_spip('inc/formidable');
include_spip('base/abstract_sql');
$options = $args['options'];
$formulaire = $args['formulaire'];
$id_formulaire = $args['id_formulaire'];
$saisies = unserialize($formulaire['saisies']);
$saisies = saisies_lister_par_nom($saisies);
// La personne a-t-elle un compte ?
$id_auteur = isset($GLOBALS['visiteur_session']) ? (isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['id_auteur'] : 0) : 0;

kent1@arscenic.info
a validé
// traitement de l'anonymisation
if ($options['anonymiser'] == 'on'){
// mod de l'id_auteur
$variables_anonymisation =
$GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
$id = eval("return $variables_anonymisation;");
$id_auteur = formidable_scramble($id, $id_formulaire);
}
// On cherche le cookie et sinon on le crée
$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
if (isset($_COOKIE[$nom_cookie]))
$cookie = $_COOKIE[$nom_cookie];
else {
include_spip("inc/acces");
$cookie = creer_uniqid();
}
// On regarde si c'est une modif d'une réponse existante
$id_formulaires_reponse = $args['id_formulaires_reponse'];
// recherche d'éventuelles anciennes réponses
$reponses = formidable_verifier_reponse_formulaire(
$id_formulaire,
$options['identification'],
($options['anonymiser'] == 'on')
? $options['anonymiser_variable']
: false

camille.sauvage@espci.fr
a validé
);

kent1@arscenic.info
a validé
// pas d'id_formulaires_reponse : on cherche une éventuelle réponse en base
if ($id_formulaires_reponse == false) {
$traitements_formulaire = unserialize($formulaire['traitements']);
if (isset($traitements_formulaire['enregistrement'])) {
$options = $traitements_formulaire['enregistrement'];
if (isset($options['multiple']) && $options['multiple'] == ''
&& isset($options['modifiable']) && $options['modifiable'] == 'on'

camille.sauvage@espci.fr
a validé
&& is_array($reponses) && count($reponses) > 0) {

kent1@arscenic.info
a validé
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
$id_formulaires_reponse = max($reponses);
}
}
} else {
// vérifier que l'auteur est bien l'auteur de la réponse, si non, on invalide l'id_formulaires_reponse
if (in_array($id_formulaires_reponse, $reponses) == false) $id_formulaires_reponse = false;
}
// Si la moderation est a posteriori ou que la personne est un boss, on publie direct
if ($options['moderation'] == 'posteriori' or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire'=>$id_formulaire, 'nouveau_statut'=>'publie')))
$statut='publie';
else
$statut = 'prop';
// Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
if (!$id_formulaires_reponse){
$id_formulaires_reponse = sql_insertq(
'spip_formulaires_reponses',
array(
'id_formulaire' => $id_formulaire,
'id_auteur' => $id_auteur,
'cookie' => $cookie,
'ip' => $args['options']['ip'] == 'on' ? $GLOBALS['ip'] : '',
'date' => 'NOW()',
'statut' => $statut
)
);
// Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
if (!$options['multiple'] or $options['modifiable']){
include_spip("inc/cookie");
// Expiration dans 30 jours
spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
}
} else {
// simple mise à jour du champ maj de la table spip_formulaires_reponses
sql_updateq(
'spip_formulaires_reponses',
array('maj' => 'NOW()'),
"id_formulaires_reponse = $id_formulaires_reponse"
);
}
// Si l'id n'a pas été créé correctement alors erreur
if (!($id_formulaires_reponse > 0)){
$retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
}
// Sinon on continue à mettre à jour
else{
$champs = array();
$insertions = array();
foreach($saisies as $nom => $saisie){
// On ne prend que les champs qui ont effectivement été envoyés par le formulaire
if (($valeur = _request($nom)) !== null){
$champs[] = $nom;
$insertions[] = array(
'id_formulaires_reponse' => $id_formulaires_reponse,
'nom' => $nom,
'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
);
}
}
// S'il y a bien des choses à modifier
if ($champs){
// On supprime d'abord les champs
sql_delete(
'spip_formulaires_reponses_champs',
array(
'id_formulaires_reponse = '.$id_formulaires_reponse,
sql_in('nom', $champs)
)
);
// Puis on insère les nouvelles valeurs
sql_insertq_multi(
'spip_formulaires_reponses_champs',
$insertions
);
}
if (!isset($retours['message_ok'])) { $retours['message_ok'] = ''; }
$retours['message_ok'] .= "\n"._T('formidable:traiter_enregistrement_message_ok');
$retours['id_formulaires_reponse'] = $id_formulaires_reponse;
}
// noter qu'on a deja fait le boulot, pour ne pas risquer double appel
$retours['traitements']['enregistrement'] = true;
return $retours;
}
function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){

kent1@arscenic.info
a validé
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
include_spip('inc/saisies');
include_spip('base/abstract_sql');
$comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
// Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
if ($comparaison['supprimees']){
// On récupère les réponses du formulaire
$reponses = sql_allfetsel(
'id_formulaires_reponse',
'spip_formulaires_reponses',
'id_formulaire = '.$id_formulaire
);
$reponses = array_map('reset', $reponses);
// Tous les noms de champs à supprimer
$noms = array_keys($comparaison['supprimees']);
// On supprime
sql_delete(
'spip_formulaires_reponses_champs',
array(
sql_in('id_formulaires_reponse', $reponses),
sql_in('nom', $noms)
)
);
}