diff --git a/formidable_fonctions.php b/formidable_fonctions.php index 7f6d9d1f991cd3318d00a1f9d1026db58fc29aab..5397f83f5852f10d2b0b2b400661800e1299b7b0 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 c6a1925df42dd73c26d1d537c9bad89f47de8d15..58e72c3f9f11ea99853a1f57dacc58f787d8b10c 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 cf4cb4b49552c92cdd1154f03cf61c263e2e232e..3564281fe3a237ca0370f18d8ac48203fbf9c885 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"