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