From d6dbb79bcfc2a5a5941259f4917663e28e5aa533 Mon Sep 17 00:00:00 2001 From: "maieul@maieul.net" <> Date: Fri, 1 Nov 2019 20:45:01 +0000 Subject: [PATCH] =?UTF-8?q?Formidable=5Fraccourcis=5Farobases=5F2=5Fvaleur?= =?UTF-8?q?s=5Fchamps()=20peut=20d=C3=A9sormais=20prendre=20les=20valeurs?= =?UTF-8?q?=20n'ont=20pas=20dans=20=5Frequest()=20mais=20dans=20l'enregist?= =?UTF-8?q?rement=20d'une=20r=C3=A9ponse.=20On=20peut=20donc=20facilement?= =?UTF-8?q?=20utiliser=20le=20raccourci=20@@=20pour=20afficher=20une=20pr?= =?UTF-8?q?=C3=A9sentation=20particuli=C3=A8re=20d'une=20r=C3=A9ponse=20do?= =?UTF-8?q?nn=C3=A9e=20(cas=20d'usage=20:=20un=20plugin=20perso=20pour=20u?= =?UTF-8?q?ne=20application=20m=C3=A9tier).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Du coup on fait appel à cette fonction pour affiche_resume_reponse() en gardant la compatibilité ascendante de ce qui est passé au pipeline homonyme (dont je doute que qui que ce soit l'utilise, mais c'est une autre affaire). --- formidable_fonctions.php | 35 ++++++++++++++++------------------- inc/formidable.php | 18 ++++++++++++++++-- paquet.xml | 2 +- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/formidable_fonctions.php b/formidable_fonctions.php index 7f6d9d1f..5397f83f 100644 --- a/formidable_fonctions.php +++ b/formidable_fonctions.php @@ -133,7 +133,7 @@ function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $s */ function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, $modele_resume = null) { static $modeles_resume = array(); - static $modeles_vars = array(); + static $saisies; if (is_null($id_formulaire)) { $id_formulaire = sql_getfetsel( @@ -142,14 +142,13 @@ function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, 'id_formulaires_reponse='.intval($id_formulaires_reponse) ); } + if (is_null($modele_resume) and !isset($modeles_resume[$id_formulaire])) { - $traitements_formulaire = unserialize(sql_getfetsel( - 'traitements', - 'spip_formulaires', - 'id_formulaire='.intval($id_formulaire) - )); - if (isset($traitements_formulaire['enregistrement']['resume_reponse'])) { - $modeles_resume[$id_formulaire] = $traitements_formulaire['enregistrement']['resume_reponse']; + $row = sql_fetsel('saisies, traitements', 'spip_formulaires', 'id_formulaire='.intval($id_formulaire)); + $saisies = unserialize($row['saisies']); + $traitements = unserialize($row['traitements']); + if (isset($traitements['enregistrement']['resume_reponse'])) { + $modeles_resume[$id_formulaire] = $traitements['enregistrement']['resume_reponse']; } else { $modeles_resume[$id_formulaire] = ''; } @@ -162,17 +161,15 @@ function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, return ''; } - if (!isset($modeles_vars[$modele_resume])) { - preg_match_all(',@(.*)@,Uims', $modele_resume, $matches); - $modeles_vars[$modele_resume] = $matches[1]; - } - $valeurs = array(); - foreach ($modeles_vars[$modele_resume] as $var) { - $valeur = calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $var,'', 'valeur_uniquement', ''); - $valeur = formidable_nettoyer_saisie_vue($valeur); - $valeurs["@$var@"] = $valeur; + $chaine = formidable_raccourcis_arobases_2_valeurs_champs($modele_resume, $saisies, false, '', $source = 'base', $id_formulaires_reponse, $id_formulaire, $valeurs, $valeurs_libellees); + + // Pour compatibilité historique : remplacer les clés dans $valeurs_libellees pour mettre un arobase autour + foreach ($valeurs_libellees as $cle => $val) { + unset($valeurs_libellees[$cle]); + $valeurs_libellees["@$cle@"] = $val; } + return pipeline( 'formidable_affiche_resume_reponse', array( @@ -180,9 +177,9 @@ function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, 'id_formulaire' => $id_formulaire, 'id_formulaires_reponse' => $id_formulaires_reponse, 'modele_resume' => $modele_resume, - 'valeurs' => $valeurs, + 'valeurs' => $valeurs_libellees, ), - 'data' => str_replace(array_keys($valeurs), array_values($valeurs), $modele_resume), + 'data' => $chaine, ) ); } diff --git a/inc/formidable.php b/inc/formidable.php index c6a1925d..58e72c3f 100644 --- a/inc/formidable.php +++ b/inc/formidable.php @@ -485,10 +485,24 @@ function formidable_scramble($login, $id_form) { * @param array $saisies la liste des saisies du formulaire * @param bool|string $brut=false, pour indiquer si on veut utiliser les valeurs brutes; * @param string|bool $sans_reponse chaine à afficher si pas de réponse. Si true, prend la chaîne par défaut + * @param string $source 'request' pour prendre dans _request(); 'base' pour prendre dans une réponse enregistrée en base + * @param int|string $id_formulaires_reponse le cas échéant le numéro de réponse en base + * @param int|string $id_formulaire le cas échéant le numéro du formulaire en base + * @param array &$valeurs un tableau clé/valeur listant les valeurs que prenne les @. Passage par référence + * @param array &$valeurs_libelles un tableau clé/valeur listant les valeurs libéllées que prenne les @. Passage par référence * @return string la chaîne transformée */ -function formidable_raccourcis_arobases_2_valeurs_champs($chaine, $saisies, $brut=false, $sans_reponse = true) { - list($valeurs,$valeurs_libellees) = formidable_tableau_valeurs_saisies($saisies, $sans_reponse); +function formidable_raccourcis_arobases_2_valeurs_champs($chaine, $saisies, $brut=false, $sans_reponse = true, $source = 'request', $id_formulaires_reponse = 0, $id_formulaire = 0, &$valeurs = array(), &$valeurs_libellees = array()) { + if ($source == 'request') { + list($valeurs, $valeurs_libellees) = formidable_tableau_valeurs_saisies($saisies, $sans_reponse); + } + elseif ($source == 'base' and $id_formulaires_reponse and $id_formulaire) { + $saisies = saisies_lister_par_nom($saisies); + foreach ($saisies as $nom => $saisie) { + $valeurs[$nom] = formidable_nettoyer_saisie_vue(calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom,'', 'brut', $sans_reponse)); + $valeurs_libellees[$nom] = formidable_nettoyer_saisie_vue(calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom,'', 'valeur_uniquement', $sans_reponse)); + } + } $a_remplacer = array(); if (preg_match_all('/@[\w]+@/', $chaine, $a_remplacer)) { $a_remplacer = $a_remplacer[0]; diff --git a/paquet.xml b/paquet.xml index cf4cb4b4..3564281f 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,7 +1,7 @@ <paquet prefix="formidable" categorie="communication" - version="3.45.3" + version="3.46.0" etat="stable" compatibilite="[3.0.0;3.2.*]" logo="images/formidable-64.png" -- GitLab