From 7757e8319b2e7a79353319a97b8fa847599caf9c 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?On=20revient=20totalement=20sur=20la=20mani?=
 =?UTF-8?q?=C3=A8re=20de=20g=C3=A9rer=20les=20crayons=20pour=20des=20champ?=
 =?UTF-8?q?s=20qui=20n'existeraient=20pas=20encore=20en=20base=20pour=20un?=
 =?UTF-8?q?e=20r=C3=A9ponse=20donn=C3=A9e.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Partant du constat
1. Que lorsque formidable reçoit une réponse vide (soit par
afficher_si, soit par non remplissage) pour un champ donné, il insère ce
champ en base quand même.
2. Que les seuls cas où le champ non rempli n'est pas présent en base
pour une réponse donnée, c'est quand il a été ajouté dans le formulaire
après l'enregistrement de la réponse.

Il ne paraît pas gênant lorsqu'on appel un crayon sur un champ
inexistant en base pour une réponse donnée de le créer en base, cela
revient juste à faire 1.
---
 controleurs/formulaires_reponses_champ.php | 19 ++++++-------------
 formidable_fonctions.php                   |  2 +-
 2 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/controleurs/formulaires_reponses_champ.php b/controleurs/formulaires_reponses_champ.php
index b1432b0a..866fb495 100644
--- a/controleurs/formulaires_reponses_champ.php
+++ b/controleurs/formulaires_reponses_champ.php
@@ -12,26 +12,19 @@ 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('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");
-	}
+	$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'];
+
 
+	$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 552ab1e5..c0c317a5 100644
--- a/formidable_fonctions.php
+++ b/formidable_fonctions.php
@@ -102,7 +102,7 @@ function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $s
 		if (isset($reponses_valeurs[$id_formulaires_reponse][$nom]['id'])) {
 			$valeur = $reponses_valeurs[$id_formulaires_reponse][$nom]['id'];
 		} else {
-			$valeur = "new-$nom-$id_formulaires_reponse";
+			$valeur = sql_insertq('spip_formulaires_reponses_champs', array('id_formulaires_reponse' => $id_formulaires_reponse, 'nom' => $nom));
 		}
 		return 'crayon '.'formulaires_reponses_champ-valeur-'. $valeur;
 	}
-- 
GitLab