From e4800301b334ae612c53e32bd095e6a789484b29 Mon Sep 17 00:00:00 2001
From: "maieul@maieul.net" <>
Date: Thu, 22 Dec 2016 23:25:08 +0000
Subject: [PATCH] =?UTF-8?q?profiter=20de=20la=20nouvelle=20version=20de=20?=
 =?UTF-8?q?cvtupload=20pour=20permettre=20de=20remplacer=20les=20fichiers?=
 =?UTF-8?q?=20lors=20d'un=20envoi=20de=20formulaire=20de=20modification=20?=
 =?UTF-8?q?d'une=20r=C3=A9ponse?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 formulaires/formidable.php  | 34 ++++++++++++++++++++++++++++++++--
 inc/formidable_fichiers.php | 12 ++++++++++++
 paquet.xml                  |  2 +-
 traiter/enregistrement.php  |  7 ++++---
 4 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/formulaires/formidable.php b/formulaires/formidable.php
index 2268eb07..48d64f2d 100644
--- a/formulaires/formidable.php
+++ b/formulaires/formidable.php
@@ -444,6 +444,12 @@ function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaire
  *
  **/
 function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) {
+
+	// On prépare des infos si jamais on a des champs fichiers
+	$saisies_fichiers = saisies_lister_avec_type($contexte['_saisies'], 'fichiers');// les saisies de type fichier
+	$fichiers = array();
+	$id_formulaire = $contexte['_formidable']['id_formulaire'];
+	
 	// On va chercher tous les champs
 	$champs = sql_allfetsel(
 		'nom, valeur',
@@ -451,11 +457,35 @@ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_rep
 		'id_formulaires_reponse = ' . $id_formulaires_reponse
 	);
 	$ok = count($champs) ? true : false;
+	$securiser_action = charger_fonction('securiser_action','inc');
 
 	// On remplit le contexte avec
 	foreach ($champs as $champ) {
-		$test_array = filtre_tenter_unserialize_dist($champ['valeur']);
-		$contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur'];
+		if (array_key_exists($champ['nom'], $saisies_fichiers)) {
+			$valeur= unserialize($champ['valeur']);
+			$nom = $champ['nom'];
+			$fichiers[$nom] = array();
+			$chemin = _DIR_FICHIERS_FORMIDABLE
+				."formulaire_$id_formulaire/reponse_$id_formulaires_reponse/"
+				."$nom/";
+			foreach ($valeur as $f => $fichier) {
+				$fichiers[$nom][$f]= array();
+				$param = serialize(array(
+					'formulaire' => $id_formulaire,
+					'reponse' => $id_formulaires_reponse,
+					'fichier' => $fichier['nom'],
+					'saisie' => $champ['nom']
+				));
+				$fichiers[$nom][$f]['url'] = $securiser_action('formidable_recuperer_fichier',$param,'',false);
+				$fichiers[$nom][$f]['chemin'] = $chemin.$fichier['nom'];
+			}
+		} else {
+			$test_array = filtre_tenter_unserialize_dist($champ['valeur']);
+			$contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur'];
+		}
+	}
+	if ($fichiers != array()) {//s'il y a des fichiers dans les réponses 
+		$contexte['cvtupload_precharger_fichiers'] = $fichiers;
 	}
 	return $contexte;
 }
diff --git a/inc/formidable_fichiers.php b/inc/formidable_fichiers.php
index 0de5ac70..f33ee221 100644
--- a/inc/formidable_fichiers.php
+++ b/inc/formidable_fichiers.php
@@ -243,3 +243,15 @@ function formidable_deplacer_fichiers_produire_vue_saisie($saisie, $options) {
 	}
 	return $description_fichiers;
 }
+
+/**
+ * efface les fichiers d'une réponse formidable
+ * @param $str $id_formulaire
+ * @param $str $id_formulaires_reponse
+**/
+function formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse){
+	$chemin = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$id_formulaires_reponse";
+	if (file_exists($chemin)) {// par sécurité
+		effacer_repertoire_temporaire($chemin);
+	}
+}
\ No newline at end of file
diff --git a/paquet.xml b/paquet.xml
index c7e0d3cc..6fb0496b 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -40,7 +40,7 @@
 	<necessite nom="facteur" compatibilite="[3.0.3;[" />
 
 	<utilise nom="collectionjson" compatibilite="[1.5.0;[" />
-	<utilise nom="cvtupload" compatibilite="[1.6.6;[" />
+	<utilise nom="cvtupload" compatibilite="[1.7.0;[" />
 
 	<menu nom="formulaires" titre="formidable:bouton_formulaires" parent="menu_edition" icone="images/formulaire-16.png" />
 </paquet>
diff --git a/traiter/enregistrement.php b/traiter/enregistrement.php
index 76ccfe00..c89fcde1 100644
--- a/traiter/enregistrement.php
+++ b/traiter/enregistrement.php
@@ -4,7 +4,7 @@
 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');
@@ -96,13 +96,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
@@ -202,6 +204,5 @@ function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisie
  * return array|null un tableau organisé par fichier, contenant 'nom', 'extension','mime','taille' 
 **/  
 function traiter_enregistrement_fichiers($saisie, $id_formulaire,  $id_formulaires_reponse){
-	include_spip('inc/formidable_fichiers');
 	return formidable_deplacer_fichiers_produire_vue_saisie($saisie,array('id_formulaire'=>$id_formulaire,'id_formulaires_reponse'=>$id_formulaires_reponse));
 }
-- 
GitLab