From e70b1bd3aad3bd1ad963bbe3449d3028630f084e Mon Sep 17 00:00:00 2001 From: "nicolas.dorigny@gmail.com" <> Date: Sat, 31 Dec 2016 00:24:04 +0000 Subject: [PATCH] =?UTF-8?q?On=20n'exporte=20que=20les=20fichiers=20des=20r?= =?UTF-8?q?=C3=A9ponses=20s=C3=A9l=C3=A9ctionn=C3=A9es=20en=20fonction=20d?= =?UTF-8?q?u=20statut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formulaires/exporter_formulaire_reponses.php | 65 ++++++++++++-------- inc/formidable_fichiers.php | 27 ++++---- 2 files changed, 53 insertions(+), 39 deletions(-) diff --git a/formulaires/exporter_formulaire_reponses.php b/formulaires/exporter_formulaire_reponses.php index f1129e21..5fb32757 100644 --- a/formulaires/exporter_formulaire_reponses.php +++ b/formulaires/exporter_formulaire_reponses.php @@ -6,6 +6,7 @@ if (!defined('_ECRIRE_INC_VERSION')) { } include_spip('inc/formidable'); +include_spip('inc/formidable_fichiers'); include_spip('inc/config'); function formulaires_exporter_formulaire_reponses_charger($id_formulaire = 0) { @@ -88,7 +89,8 @@ function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_rep ) ); $reponses_completes[] = $titres; - + $saisies_fichiers = array(); + // On parcourt chaque réponse foreach ($reponses as $reponse) { // Est-ce qu'il y a un auteur avec un nom @@ -110,20 +112,32 @@ 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 + $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/'); 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', 'spip_formulaires_reponses_champs', 'id_formulaires_reponse = ' . intval($reponse['id_formulaires_reponse']) . ' and nom = ' . sql_quote($nom) ); - $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/'); - $valeur = $tenter_unserialize($valeur); + + // Saisie de type fichier ? + if ($saisie['saisie'] == 'fichiers') {//tester s'il y a des saisies parmi les fichiers + if ($valeur = $tenter_unserialize($valeur)) { + foreach ($valeur as $v) { + // On ajoute à la liste des fichiers des réponses + $chemin = _DIR_FICHIERS_FORMIDABLE . 'formulaire_' . $id_formulaire . '/reponse_' . $reponse['id_formulaires_reponse']; + $chemin_fichier = $chemin . '/' . $saisie['options']['nom'] . '/' . $v['nom']; + if(file_exists($chemin_fichier)){ + $saisies_fichiers[] = $chemin_fichier; + } + } + } + } + $reponse_complete[] = facteur_mail_html2text( recuperer_fond( 'saisies-vues/_base', @@ -152,24 +166,25 @@ function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_rep // On ajoute la ligne à l'ensemble des réponses $reponses_completes[] = $reponse_complete; } - 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)); - } - } - } + + if (!count($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, $saisies_fichiers); + 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 7980a2be..75e8b8f8 100644 --- a/inc/formidable_fichiers.php +++ b/inc/formidable_fichiers.php @@ -381,20 +381,19 @@ function formidable_effacer_fichiers_email() { * @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) - ) { - spip_log("Impossible de créer le zip pour l'export des réponses du formulaire $id_formulaire","formidable"._LOG_ERREUR); - return 0; - } else { - $zip -> delete(PCLZIP_OPT_BY_NAME, "test.txt"); - $zip -> add($fichier_csv, PCLZIP_OPT_REMOVE_ALL_PATH); - return $chemin_du_zip; - } +function formidable_zipper_reponses_formulaire($id_formulaire, $chemin_du_zip, $fichier_csv, $saisies_fichiers) { + include_spip('inc/pclzip'); + $zip = new PclZip("$chemin_du_zip"); + $chemin_fichiers = _DIR_FICHIERS_FORMIDABLE . 'formulaire_' . $id_formulaire; + if (!$zip->create($saisies_fichiers, PCLZIP_OPT_REMOVE_PATH, $chemin_fichiers) + ) { + spip_log("Impossible de créer le zip pour l'export des réponses du formulaire $id_formulaire", "formidable" . _LOG_ERREUR); + 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 -- GitLab