From 6f7d0d2fe141158dbc37701a9695b2ee8f022025 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ma=C3=AFeul=20Rouquette?= <maieul@maieul.net>
Date: Fri, 24 Apr 2020 14:52:55 +0200
Subject: [PATCH] =?UTF-8?q?crayons=20sur=20un=20champ=20inexistant=20en=20?=
 =?UTF-8?q?bas=20car=20ajout=C3=A9=20apr=C3=A8s=20coup=20sur=20une=20r?=
 =?UTF-8?q?=C3=A9ponse=20:=20trouver=20correctement=20la=20saisie.=20Reste?=
 =?UTF-8?q?=20maintenant=20=C3=A0=20trouver=20comment=20enregistrer=20la?=
 =?UTF-8?q?=20r=C3=A9ponse=20en=20base?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 controleurs/formulaires_reponses_champ.php | 19 +++++++++++++------
 formidable_fonctions.php                   |  7 ++++++-
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/controleurs/formulaires_reponses_champ.php b/controleurs/formulaires_reponses_champ.php
index 866fb495..b1432b0a 100644
--- a/controleurs/formulaires_reponses_champ.php
+++ b/controleurs/formulaires_reponses_champ.php
@@ -12,19 +12,26 @@ function controleurs_formulaires_reponses_champ_dist($regs, $c = null) {
 	list(,$crayon, $type, $champ, $id) = $regs;
 	$id_formulaires_reponses_champ = $regs[4];
 
+	// Cas 1. On est sur un champ déjà enregistreé
+	if (strpos($id_formulaires_reponses_champ, 'new') === false) {
 	// Recuperer id_formulaires_reponse et id_formulaire
 	// Note, sans doute pourrait-on passer directement cela en classe
 	// Mais
 	// 1. Cela ferait une exception
 	// 2. Des gens utilisent peut être pas #VOIR_REPONSE{xxx,edit}
-	$data = sql_fetsel('*', 'spip_formulaires_reponses_champs JOIN spip_formulaires_reponses JOIN spip_formulaires', "id_formulaires_reponses_champ=$id_formulaires_reponses_champ AND spip_formulaires_reponses.id_formulaires_reponse = spip_formulaires_reponses_champs.id_formulaires_reponse AND spip_formulaires.id_formulaire = spip_formulaires_reponses.id_formulaire");
-	$id_formulaires_reponse = $data['id_formulaires_reponse'];
-
+		//
+		$data = sql_fetsel('saisies, nom, valeur', 'spip_formulaires_reponses_champs JOIN spip_formulaires_reponses JOIN spip_formulaires', "id_formulaires_reponses_champ=$id_formulaires_reponses_champ AND spip_formulaires_reponses.id_formulaires_reponse = spip_formulaires_reponses_champs.id_formulaires_reponse AND spip_formulaires.id_formulaire = spip_formulaires_reponses.id_formulaire");
+		$nom = $data['nom'];
+		$valeur = $data['valeur'];
+	} else {
+		$valeur = '';
+		preg_match('#new-(.*)-(.*)#', $id_formulaires_reponses_champ, $match);
+		$nom = $match[1];
+		$id_formulaires_reponse = $match[2];
+		$data = sql_fetsel('saisies', 'spip_formulaires_reponses JOIN spip_formulaires', "id_formulaires_reponse=$id_formulaires_reponse  AND spip_formulaires.id_formulaire = spip_formulaires_reponses.id_formulaire");
+	}
 
-	$nom = $data['nom'];
-	$valeur = $data['valeur'];
 	$saisie = saisies_chercher(unserialize($data['saisies']), $nom);
-	$valeur = $data['valeur'];
 
 	$n = new Crayon(
 		$type . '-valeur-' . $id_formulaires_reponses_champ,
diff --git a/formidable_fonctions.php b/formidable_fonctions.php
index 61ef535b..552ab1e5 100644
--- a/formidable_fonctions.php
+++ b/formidable_fonctions.php
@@ -99,7 +99,12 @@ function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $s
 
 	// Si on demande edit > mode crayon > on génère le crayon correspond
 	if ($type_retour == 'edit') {
-		return 'crayon '.'formulaires_reponses_champ-valeur-'. $reponses_valeurs[$id_formulaires_reponse][$nom]['id'];
+		if (isset($reponses_valeurs[$id_formulaires_reponse][$nom]['id'])) {
+			$valeur = $reponses_valeurs[$id_formulaires_reponse][$nom]['id'];
+		} else {
+			$valeur = "new-$nom-$id_formulaires_reponse";
+		}
+		return 'crayon '.'formulaires_reponses_champ-valeur-'. $valeur;
 	}
 	// Si on trouve bien la saisie demandée
 	if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) {
-- 
GitLab