if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
-
+include_spip('inc/formidable_fichiers');
function traiter_enregistrement_dist($args, $retours) {
include_spip('inc/formidable');
include_spip('base/abstract_sql');
+ $retours['fichiers'] = array(); // on va stocker des infos sur les fichiers, pour les prochains traitement
$options = $args['options'];
$formulaire = $args['formulaire'];
$id_formulaire = $args['id_formulaire'];
$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;
+ $id_auteur = isset($GLOBALS['visiteur_session']) ? (isset($GLOBALS['visiteur_session']['id_auteur']) ?
+ $GLOBALS['visiteur_session']['id_auteur'] : 0) : 0;
// traitement de l'anonymisation
if ($options['anonymiser'] == 'on') {
// 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'))) {
+ or autoriser(
+ 'instituer',
+ 'formulairesreponse',
+ $id_formulaires_reponse,
+ null,
+ array('id_formulaire' => $id_formulaire, 'nouveau_statut' => 'publie')
+ )) {
$statut='publie';
} else {
$statut = 'prop';
// Expiration dans 30 jours
spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
}
- } else {
+ } else { // si c'est une modif de réponse existante
// 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"
);
+ //effacer les fichiers existant
+ formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse);
}
// Si l'id n'a pas été créé correctement alors erreur
$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 ($saisie['saisie'] == 'fichiers') { // traiter à part le cas des saisies fichiers
+ $valeur = traiter_enregistrement_fichiers($saisie, $id_formulaire, $id_formulaires_reponse);
+ if (($valeur !== null)) {
+ $champs[] = $nom;
+ $insertions[] = array(
+ 'id_formulaires_reponse' => $id_formulaires_reponse,
+ 'nom' => $nom,
+ 'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
+ );
+ $retours['fichiers'][$nom] = $valeur;
+ }
+ }
if (($valeur = _request($nom)) !== null) {
+ // Pour le saisies différentes de fichiers,
+ // on ne prend que les champs qui ont effectivement été envoyés par le formulaire
$champs[] = $nom;
$insertions[] = array(
'id_formulaires_reponse' => $id_formulaires_reponse,
'id_formulaire = '.$id_formulaire
);
$reponses = array_map('reset', $reponses);
-
// Tous les noms de champs à supprimer
$noms = array_keys($comparaison['supprimees']);
sql_in('nom', $noms)
)
);
+ // On efface les vieux fichiers
+ foreach ($noms as $nom) {
+ if ($comparaison['supprimees'][$nom]['saisie'] == 'fichiers') {
+ formidable_effacer_fichiers_champ($id_formulaire, $reponses, $nom);
+ }
+ }
}
}
+
+/**
+ * Pour une saisie 'fichiers' particulière,
+ * déplace chaque fichier envoyé dans le dossier
+ * config/fichiers/formidable/formulaire_$id_formulaire/reponse_$id_formulaires_reponse.
+ * @param array $saisie la description de la saisie
+ * @param int $id_formulaire le formulaire
+ * @param int $id_formulaires_reponse
+ * return array|null un tableau organisé par fichier, contenant 'nom', 'extension','mime','taille'
+**/
+function traiter_enregistrement_fichiers($saisie, $id_formulaire, $id_formulaires_reponse) {
+ return formidable_deplacer_fichiers_produire_vue_saisie($saisie, array('id_formulaire' => $id_formulaire, 'id_formulaires_reponse' => $id_formulaires_reponse));
+}