From f223c7ec13d590e22062d338ae9984ca9a5ed090 Mon Sep 17 00:00:00 2001 From: "maieul@maieul.net" <> Date: Sat, 24 Dec 2016 00:28:43 +0000 Subject: [PATCH] effacer les fichiers lorsqu'on supprime un champ d'un formulaire --- inc/formidable_fichiers.php | 27 +++++++++++++++++++++++++++ traiter/enregistrement.php | 7 ++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/inc/formidable_fichiers.php b/inc/formidable_fichiers.php index 9a3e7f32..65d5a422 100644 --- a/inc/formidable_fichiers.php +++ b/inc/formidable_fichiers.php @@ -256,6 +256,33 @@ function formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_rep } } +/** Efface les fichiers d'un champ pour les réponses d'un formulaire + * @param str $id_formulaire + * @param array|str $reponses + * @param str $champ +**/ +function formidable_effacer_fichiers_champ($id_formulaire, $reponses, $champ) { + if ($champ != '') { // on devrait pas arriver ici avec un $champ vide, mais prenons nos précaution + + if (!is_array($reponses)) { + $reponses = array($reponses); + } + + $rep_vide = array(".",'..','.ok'); // si scandire retourne cela où inférieur, alors le dossier est vide + foreach ($reponses as $rep) { + $chemin_reponse = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$rep"; + $chemin_champ = $chemin_reponse."/".$champ; + + if (file_exists($chemin_champ)) { + effacer_repertoire_temporaire($chemin_champ); + if (count(array_diff(scandir($chemin_reponse), $rep_vide)) == 0) { // si jamais il ne reste plus aucun fichiers pour cette réponse, on peut effacer le repertoire de celle-ci + effacer_repertoire_temporaire($chemin_reponse); + } + } + + } + } +} /** * 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/traiter/enregistrement.php b/traiter/enregistrement.php index f5cdf2a1..4661f9e0 100644 --- a/traiter/enregistrement.php +++ b/traiter/enregistrement.php @@ -180,7 +180,6 @@ function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisie 'id_formulaire = '.$id_formulaire ); $reponses = array_map('reset', $reponses); - // Tous les noms de champs à supprimer $noms = array_keys($comparaison['supprimees']); @@ -192,6 +191,12 @@ function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisie sql_in('nom', $noms) ) ); + // On efface les vieux fichiers + foreach ($noms as $nom) { + if ($comparaison['supprimees'][$nom]['saisie'] == 'fichiers') { + formidable_effacer_fichiers_champ($id_formulaire, $reponses, $nom); + } + } } } -- GitLab