From dfcf2af0fbd15cc15618944fae567644f4b19918 Mon Sep 17 00:00:00 2001 From: "maieul@maieul.net" <> Date: Thu, 11 Oct 2018 20:53:52 +0000 Subject: [PATCH] =?UTF-8?q?refactorisation=20du=20code=20:=20une=20seule?= =?UTF-8?q?=20fonction=20pour=20trouver=20la=20r=C3=A9ponse=20qui=20doit?= =?UTF-8?q?=20=C3=AAtre=20modifi=C3=A9=20si=20on=20autorise=20la=20modific?= =?UTF-8?q?ation=20des=20r=C3=A9ponses=20Pour=20le=20moment=20appeller:=20?= =?UTF-8?q?=20=20-=20lors=20du=20chargement=20du=20formulaire=20=20=20-=20?= =?UTF-8?q?lors=20de=20l'enregistrement=20des=20r=C3=A9ponses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formulaires/formidable.php | 45 ++++++++++++---------------------- inc/formidable.php | 50 ++++++++++++++++++++++++++++++++++++++ traiter/enregistrement.php | 30 +---------------------- 3 files changed, 66 insertions(+), 59 deletions(-) diff --git a/formulaires/formidable.php b/formulaires/formidable.php index 62d0a6d3..8fbf289c 100644 --- a/formulaires/formidable.php +++ b/formulaires/formidable.php @@ -126,36 +126,17 @@ function formulaires_formidable_charger($id, $valeurs = array(), $id_formulaires } } - // Si on passe un identifiant de reponse, on edite cette reponse si elle existe - if ($id_formulaires_reponse = intval($id_formulaires_reponse)) { - $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok); - if ($ok == false) { - $contexte['editable'] = false; - $contexte['message_erreur'] = _T( - 'formidable:traiter_enregistrement_erreur_edition_reponse_inexistante' - ); - } - } else { - // calcul des paramètres d'anonymisation - $options = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null; - - $anonymisation = (isset($options['anonymiser']) && $options['anonymiser']==true) - ? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : '' - : ''; - - // Si multiple = non mais que c'est modifiable, alors on va chercher - // la dernière réponse si elle existe - if ($options - and !$options['multiple'] - and $options['modifiable'] - and $reponses = formidable_verifier_reponse_formulaire( - $formulaire['id_formulaire'], - $options['identification'], - $anonymisation - )) { - $id_formulaires_reponse = array_pop($reponses); - $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok); - } + //trouver la réponse à éditer + $options_enregistrement = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null; + $id_formulaires_reponse = formidable_trouver_reponse_a_editer($formulaire['id_formulaire'], $id_formulaires_reponse, $options_enregistrement); + + // adapter le contexte en conséquence + $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok); + if ($ok == false) { + $contexte['editable'] = false; + $contexte['message_erreur'] = _T( + 'formidable:traiter_enregistrement_erreur_edition_reponse_inexistante' + ); } } else { $contexte['editable'] = false; @@ -539,6 +520,10 @@ function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaire **/ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) { + if ($id_formulaires_reponse == false) { + $ok = true; + return $contexte; + } // 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(); diff --git a/inc/formidable.php b/inc/formidable.php index 4f0d7a86..210bf62c 100644 --- a/inc/formidable.php +++ b/inc/formidable.php @@ -92,6 +92,56 @@ function formidable_generer_nom_cookie($id_formulaire) { return $GLOBALS['cookie_prefix'].'cookie_formidable_'.$id_formulaire; } + +/* + * Trouver la réponse à éditer pour un formulaire donné, + * dans un contexte donné + * en fonction de la configuration du formulaire. + * @param int $id_formulaire L'identifiant du formulaire + * @param int $id_formulaires_reponse L'identifant de réponse passé au moment de l'appel du formulaire + * @param array $options Les options d'enregistrement du formulaire + * @param boolean $verifier_est_auteur si égal à true, on vérifie si $id_formulaires_reponse est passé que l'auteur connecté est bien l'auteur de la réponse passée en argument + * @return int $id_formulaires_reponse L'identifiant de la réponse à modifier effectivement. + * + */ +function formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_reponse, $options, $verifier_est_auteur = false) { + // Si on passe un identifiant de reponse, on edite cette reponse si elle existe + if ($id_formulaires_reponse = intval($id_formulaires_reponse) and $verifier_est_auteur == false) { + return $id_formulaires_reponse; + } else { + // calcul des paramètres d'anonymisation + $anonymisation = (isset($options['anonymiser']) && $options['anonymiser'] == 'on') + ? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : '' + : ''; + + $reponses = formidable_verifier_reponse_formulaire( + $id_formulaire, + $options['identification'], + $anonymisation + ); + + //A-t-on demandé de vérifier que l'auteur soit bien celui de la réponse? + if ($id_formulaires_reponse = intval($id_formulaires_reponse) + and $verifier_est_auteur == true) { + if (in_array($id_formulaires_reponse, $reponses) == false) { + $id_formulaires_reponse = false; + } + return $id_formulaires_reponse; + } + + // Si multiple = non mais que c'est modifiable, alors on va chercher + // la dernière réponse si elle existe + if ($options + and !$options['multiple'] + and $options['modifiable'] + and is_array($reponses) + ) { + $id_formulaires_reponse = array_pop($reponses); + } + } + return $id_formulaires_reponse; +} + /* * Vérifie si le visiteur a déjà répondu à un formulaire * diff --git a/traiter/enregistrement.php b/traiter/enregistrement.php index ae85f262..beaa5f19 100644 --- a/traiter/enregistrement.php +++ b/traiter/enregistrement.php @@ -39,35 +39,7 @@ function traiter_enregistrement_dist($args, $retours) { // On regarde si c'est une modif d'une réponse existante $id_formulaires_reponse = $args['id_formulaires_reponse']; - - // recherche d'éventuelles anciennes réponses - $reponses = formidable_verifier_reponse_formulaire( - $id_formulaire, - $options['identification'], - ($options['anonymiser'] == 'on') - ? $options['anonymiser_variable'] - : false - ); - - // pas d'id_formulaires_reponse : on cherche une éventuelle réponse en base - if ($id_formulaires_reponse == false) { - $traitements_formulaire = unserialize($formulaire['traitements']); - - if (isset($traitements_formulaire['enregistrement'])) { - $options = $traitements_formulaire['enregistrement']; - - if (isset($options['multiple']) && $options['multiple'] == '' - && isset($options['modifiable']) && $options['modifiable'] == 'on' - && is_array($reponses) && count($reponses) > 0) { - $id_formulaires_reponse = max($reponses); - } - } - } else { - // vérifier que l'auteur est bien l'auteur de la réponse, si non, on invalide l'id_formulaires_reponse - if (in_array($id_formulaires_reponse, $reponses) == false) { - $id_formulaires_reponse = false; - } - } + $id_formulaires_reponse = formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_reponse, $options, true); // Si la moderation est a posteriori ou que la personne est un boss, on publie direct if ($options['moderation'] == 'posteriori' -- GitLab