From e4800301b334ae612c53e32bd095e6a789484b29 Mon Sep 17 00:00:00 2001 From: "maieul@maieul.net" <> Date: Thu, 22 Dec 2016 23:25:08 +0000 Subject: [PATCH] =?UTF-8?q?profiter=20de=20la=20nouvelle=20version=20de=20?= =?UTF-8?q?cvtupload=20pour=20permettre=20de=20remplacer=20les=20fichiers?= =?UTF-8?q?=20lors=20d'un=20envoi=20de=20formulaire=20de=20modification=20?= =?UTF-8?q?d'une=20r=C3=A9ponse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formulaires/formidable.php | 34 ++++++++++++++++++++++++++++++++-- inc/formidable_fichiers.php | 12 ++++++++++++ paquet.xml | 2 +- traiter/enregistrement.php | 7 ++++--- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/formulaires/formidable.php b/formulaires/formidable.php index 2268eb07..48d64f2d 100644 --- a/formulaires/formidable.php +++ b/formulaires/formidable.php @@ -444,6 +444,12 @@ function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaire * **/ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) { + + // On prépare des infos si jamais on a des champs fichiers + $saisies_fichiers = saisies_lister_avec_type($contexte['_saisies'], 'fichiers');// les saisies de type fichier + $fichiers = array(); + $id_formulaire = $contexte['_formidable']['id_formulaire']; + // On va chercher tous les champs $champs = sql_allfetsel( 'nom, valeur', @@ -451,11 +457,35 @@ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_rep 'id_formulaires_reponse = ' . $id_formulaires_reponse ); $ok = count($champs) ? true : false; + $securiser_action = charger_fonction('securiser_action','inc'); // On remplit le contexte avec foreach ($champs as $champ) { - $test_array = filtre_tenter_unserialize_dist($champ['valeur']); - $contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur']; + if (array_key_exists($champ['nom'], $saisies_fichiers)) { + $valeur= unserialize($champ['valeur']); + $nom = $champ['nom']; + $fichiers[$nom] = array(); + $chemin = _DIR_FICHIERS_FORMIDABLE + ."formulaire_$id_formulaire/reponse_$id_formulaires_reponse/" + ."$nom/"; + foreach ($valeur as $f => $fichier) { + $fichiers[$nom][$f]= array(); + $param = serialize(array( + 'formulaire' => $id_formulaire, + 'reponse' => $id_formulaires_reponse, + 'fichier' => $fichier['nom'], + 'saisie' => $champ['nom'] + )); + $fichiers[$nom][$f]['url'] = $securiser_action('formidable_recuperer_fichier',$param,'',false); + $fichiers[$nom][$f]['chemin'] = $chemin.$fichier['nom']; + } + } else { + $test_array = filtre_tenter_unserialize_dist($champ['valeur']); + $contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur']; + } + } + if ($fichiers != array()) {//s'il y a des fichiers dans les réponses + $contexte['cvtupload_precharger_fichiers'] = $fichiers; } return $contexte; } diff --git a/inc/formidable_fichiers.php b/inc/formidable_fichiers.php index 0de5ac70..f33ee221 100644 --- a/inc/formidable_fichiers.php +++ b/inc/formidable_fichiers.php @@ -243,3 +243,15 @@ function formidable_deplacer_fichiers_produire_vue_saisie($saisie, $options) { } return $description_fichiers; } + +/** + * efface les fichiers d'une réponse formidable + * @param $str $id_formulaire + * @param $str $id_formulaires_reponse +**/ +function formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse){ + $chemin = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$id_formulaires_reponse"; + if (file_exists($chemin)) {// par sécurité + effacer_repertoire_temporaire($chemin); + } +} \ No newline at end of file diff --git a/paquet.xml b/paquet.xml index c7e0d3cc..6fb0496b 100644 --- a/paquet.xml +++ b/paquet.xml @@ -40,7 +40,7 @@ <necessite nom="facteur" compatibilite="[3.0.3;[" /> <utilise nom="collectionjson" compatibilite="[1.5.0;[" /> - <utilise nom="cvtupload" compatibilite="[1.6.6;[" /> + <utilise nom="cvtupload" compatibilite="[1.7.0;[" /> <menu nom="formulaires" titre="formidable:bouton_formulaires" parent="menu_edition" icone="images/formulaire-16.png" /> </paquet> diff --git a/traiter/enregistrement.php b/traiter/enregistrement.php index 76ccfe00..c89fcde1 100644 --- a/traiter/enregistrement.php +++ b/traiter/enregistrement.php @@ -4,7 +4,7 @@ if (!defined('_ECRIRE_INC_VERSION')) { return; } - +include_spip('inc/formidable_fichiers'); function traiter_enregistrement_dist($args, $retours) { include_spip('inc/formidable'); include_spip('base/abstract_sql'); @@ -96,13 +96,15 @@ function traiter_enregistrement_dist($args, $retours) { // Expiration dans 30 jours spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600); } - } else { + } else { // si c'est une modif de réponse existante // simple mise à jour du champ maj de la table spip_formulaires_reponses sql_updateq( 'spip_formulaires_reponses', array('maj' => 'NOW()'), "id_formulaires_reponse = $id_formulaires_reponse" ); + //effacer les fichiers existant + formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse); } // Si l'id n'a pas été créé correctement alors erreur @@ -202,6 +204,5 @@ function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisie * return array|null un tableau organisé par fichier, contenant 'nom', 'extension','mime','taille' **/ function traiter_enregistrement_fichiers($saisie, $id_formulaire, $id_formulaires_reponse){ - include_spip('inc/formidable_fichiers'); return formidable_deplacer_fichiers_produire_vue_saisie($saisie,array('id_formulaire'=>$id_formulaire,'id_formulaires_reponse'=>$id_formulaires_reponse)); } -- GitLab