From e5150a36ec6d4d085f4324f7c0a4e94933296f81 Mon Sep 17 00:00:00 2001
From: "maieul@maieul.net" <>
Date: Fri, 30 Dec 2016 13:30:04 +0000
Subject: [PATCH] =?UTF-8?q?exporter=20les=20fichiers=20lorsqu'on=20exporte?=
 =?UTF-8?q?=20les=20r=C3=A9ponses=20des=20fichiers?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 formulaires/exporter_formulaire_reponses.php | 28 ++++++++++++++++----
 inc/formidable_fichiers.php                  | 22 ++++++++++++++-
 lang/formidable_fr.php                       |  2 +-
 3 files changed, 45 insertions(+), 7 deletions(-)

diff --git a/formulaires/exporter_formulaire_reponses.php b/formulaires/exporter_formulaire_reponses.php
index fafdaa2c..f1129e21 100644
--- a/formulaires/exporter_formulaire_reponses.php
+++ b/formulaires/exporter_formulaire_reponses.php
@@ -59,6 +59,7 @@ function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_rep
 
 		// La première ligne des titres
 		$titres  = array(
+			_T('formidable:id_formulaires_reponse'), 
 			_T('public:date'),
 			_T('formidable:reponses_auteur'),
 			_T('formidable:reponses_ip')
@@ -101,6 +102,7 @@ function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_rep
 
 			// Le début de la réponse avec les infos (date, auteur, etc)
 			$reponse_complete = array(
+				$reponse['id_formulaires_reponse'], 
 				$reponse['date'],
 				$nom_auteur,
 				$reponse['ip']
@@ -108,9 +110,12 @@ function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_rep
 			if ($statut_reponses != 'publie') {
 				$reponse_complete[] = statut_texte_instituer('formulaires_reponse', $reponse['statut']);
 			}
-
+			$saisies_fichiers = False;
 			// Ensuite tous les champs
 			foreach ($saisies as $nom => $saisie) {
+				if ($saisie['saisie'] == 'fichiers') {//tester s'il y a des saisies parmi les fichiers
+					$saisies_fichiers = True;
+				}	
 				if ($saisie['saisie'] != 'explication') {
 					$valeur = sql_getfetsel(
 						'valeur',
@@ -147,10 +152,23 @@ function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_rep
 			// On ajoute la ligne à l'ensemble des réponses
 			$reponses_completes[] = $reponse_complete;
 		}
-
-		if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
-			$exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim);
-			exit();
+		if (!$saisies_fichiers) {// si pas de saisie fichiers, on envoie directement le csv
+			if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
+				$exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim);
+				exit();
+			}
+		}	else {
+			if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
+				$fichier_csv = $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim, null, False);
+				$fichier_zip = sous_repertoire(_DIR_CACHE, 'export').'reponses-formulaire-' . $formulaire['identifiant'].'.zip';
+				include_spip('inc/formidable_fichiers');
+				$fichier_zip = formidable_zipper_reponses_formulaire($formulaire['id_formulaire'], $fichier_zip, $fichier_csv);
+				if (!$fichier_zip) {// si erreur lors du zippage
+					return false;
+				} else {
+					formidable_retourner_fichier($fichier_zip, basename($fichier_zip));	
+				}
+			}
 		}
 	} else {
 		return false;
diff --git a/inc/formidable_fichiers.php b/inc/formidable_fichiers.php
index 1a692755..de2de46f 100644
--- a/inc/formidable_fichiers.php
+++ b/inc/formidable_fichiers.php
@@ -374,7 +374,27 @@ function formidable_effacer_fichiers_email() {
 	}
 	return $dossiers_effaces;
 }
-
+/**
+ * Génerer un zip des réponses d'un formulaire 
+ * @param int $id_formulaire  (identifiant numérique)
+ * @param str $chemin_du_zip chemin complet du zip 
+ * @param str $fichier_csv un fichier csv à ajouter, contenant les réponses
+ * @return str|int chemin complet du zip ou 0 si erreur lors de la création
+**/
+function formidable_zipper_reponses_formulaire($id_formulaire, $chemin_du_zip, $fichier_csv) {
+	include_spip('inc/pclzip');
+	$chemin_fichiers = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire";
+	$zip = new PclZip("$chemin_du_zip");
+	if (!$zip -> create($chemin_fichiers, 
+			PCLZIP_OPT_REMOVE_PATH, $chemin_fichiers)
+	) {
+		return 0;
+	} else {
+		$zip -> delete(PCLZIP_OPT_BY_NAME, "test.txt");
+		$zip -> add($fichier_csv, PCLZIP_OPT_REMOVE_ALL_PATH);
+		return $chemin_du_zip;
+	}
+}
 /**
  * Générer une url d'action pour la récupération d'un fichier lié à une réponse
  * @param int|str $id_formulaire
diff --git a/lang/formidable_fr.php b/lang/formidable_fr.php
index a33a56f3..5c93c583 100644
--- a/lang/formidable_fr.php
+++ b/lang/formidable_fr.php
@@ -16,7 +16,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	'heures_minutes_secondes' => "@h@h @m@min @s@s", 
 	'minutes_secondes' => "@m@min @s@s", 
 	'secondes' => "@s@s", 
-	
+	'id_formulaires_reponse' => 'Identifiant de la réponse', 	
 	// A
 	'activer_pages_explication' => 'Par défaut, les pages publiques des formulaires ne sont pas autorisées',
 	'activer_pages_label' => 'Autoriser la création de pages publique pour les formulaires',
-- 
GitLab