diff --git a/formulaires/exporter_formulaire_reponses.php b/formulaires/exporter_formulaire_reponses.php index fafdaa2c479a53b3935add0d59b70ad93a20e489..f1129e210541ab270aca7146717481cf9d020dd1 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 1a6927553b5882a0fa1712db39938d7d153f87f8..de2de46fbb909b34c0f5238fefdb4c8439ba7d9f 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 a33a56f3e7754d1e976ab8b29b76634b915633e7..5c93c58326c7c6ce9d113157090df9a32bf72847 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',