[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / formidable / traiter / enregistrement.php
index adc94a8..b68cd92 100644 (file)
@@ -4,10 +4,11 @@
 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'];
@@ -15,7 +16,8 @@ function traiter_enregistrement_dist($args, $retours) {
        $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') {
@@ -69,7 +71,13 @@ function traiter_enregistrement_dist($args, $retours) {
 
        // 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';
@@ -95,13 +103,15 @@ function traiter_enregistrement_dist($args, $retours) {
                        // 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
@@ -112,8 +122,21 @@ function traiter_enregistrement_dist($args, $retours) {
                $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,
@@ -166,7 +189,6 @@ function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisie
                        'id_formulaire = '.$id_formulaire
                );
                $reponses = array_map('reset', $reponses);
-
                // Tous les noms de champs à supprimer
                $noms = array_keys($comparaison['supprimees']);
 
@@ -178,5 +200,24 @@ function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisie
                                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));
+}