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