From 0fe2d00a1ab038c17a6ac6b20f7016c3ed26236c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ma=C3=AFeul=20Rouquette?= <maieul@maieul.net>
Date: Sun, 6 Oct 2024 15:39:27 +0200
Subject: [PATCH] =?UTF-8?q?feat:=20des=20options=20pour=20l'affichage=20de?=
 =?UTF-8?q?s=20formulaires,=20import=C3=A9es=20depuis=20formidable=20+=20a?=
 =?UTF-8?q?fficher=20s'il=20n'y=20a=20pas=20de=20saisie?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGELOG.md                     |  9 +++-
 formulaires/inc-saisies-cvt.html | 75 ++++++++++++++++++++------------
 lang/saisies_ar.php              |  1 +
 lang/saisies_de.php              |  2 +
 lang/saisies_en.php              |  2 +-
 lang/saisies_es.php              |  1 +
 lang/saisies_fr.php              |  3 +-
 lang/saisies_it.php              |  2 +-
 lang/saisies_nl.php              |  1 +
 lang/saisies_pt_br.php           |  2 +-
 10 files changed, 65 insertions(+), 33 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index c49d7441..970c14e2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,14 @@
 # Changelog
 
 ## Unreleased
+### Added
+
+- Options globales `ajax` (defaut `false`) ; `conteneur_class` (defaut `''`) ; `conteneur_id` (defaut `''`) ; `squelettes_bouton` (défaut `formulaires/inc-saisies-cvt-boutons`).
+- Indiquer si un formulaire ne contient aucun champ (fonctionnalité rapatriée depuis formidable)
+
+### Changed
+
+- Les messages de retour globaux des formulaires "full PHP" sont désormais entourés d'une balise `<div>` et non plus `<p>`
 
 ### Fixed
 
@@ -31,7 +39,6 @@
 ### Removed
 
 - Compatibilité SPIP < 4.1
-## 5.8.0 - 2024-10-04
 ### Added
 
 - #439 function `saisies_supprimer_depublie_sans_reponse()`
diff --git a/formulaires/inc-saisies-cvt.html b/formulaires/inc-saisies-cvt.html
index 0f7cb94d..84a078a0 100644
--- a/formulaires/inc-saisies-cvt.html
+++ b/formulaires/inc-saisies-cvt.html
@@ -1,36 +1,55 @@
-<div class="formulaire_spip formulaire_#ENV{form}[ (#ENV{_etape}|oui)formulaire_multietapes]"[(#ENV{_saisies}|saisies_dont_avec_option{afficher_si}|oui) data-avec-afficher_si="true"]>
+[(#ENV**{_saisies/options/ajax}|oui)
+	<div class="ajax">
+]
+<div class="
+	formulaire_spip
+	formulaire_#ENV{form}
+	[(#ENV{_etape}|oui)formulaire_multietapes]
+	[(#ENV**{_saisies/options/conteneur_class})]"
+	[(#ENV{_saisies}|saisies_dont_avec_option{afficher_si}|oui) data-avec-afficher_si="true"]
+	[id="(#ENV{_saisies/options/conteneur_id})"]
+	>
 	#ENV**{_saisies/options/inserer_debut}
-	[<p class="reponse_formulaire reponse_formulaire_ok"[(#HTML5|oui) role="status"]>(#ENV**{message_ok})</p>]
-	[<p class="reponse_formulaire reponse_formulaire_erreur"[(#HTML5|oui) role="alert"]>(#ENV**{message_erreur})</p>]
+	[<div class="reponse_formulaire reponse_formulaire_ok"[(#HTML5|oui) role="status"]>(#ENV**{message_ok})</div>]
+	[<div class="reponse_formulaire reponse_formulaire_erreur"[(#HTML5|oui) role="alert"]>(#ENV**{message_erreur})</div>]
 	[(#ENV{editable}|oui)
-	<form method="post" action="#ENV{action}" enctype="multipart/form-data"[ data-resume_etapes_futures="(#ENV{_resume_etapes_futures}|json_encode|attribut_html)"]><div>
-			[(#REM) declarer les hidden qui declencheront le service du formulaire
-			parametre : url d'action ]
-			#ACTION_FORMULAIRE{#ENV{action}}
-			[(#ENV{_etape}|oui)
-			<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-#ENV{_saisies/options/etapes_presentation,defaut}, etapes=#ENV{_saisies_par_etapes}, env} />
-			]
-
-			<div class="editer-groupe">
-				#SET{saisies, #ENV{_saisies}}
+	[(#ENV{_saisies}|et{#ENV{_saisies}|count}|oui)
+	<form method="post" action="[(#ENV{action}|ancre_url{#ENV{_saisies/options/id}})]" enctype="multipart/form-data"[ data-resume_etapes_futures="(#ENV{_resume_etapes_futures}|json_encode|attribut_html)"]><div>
+				[(#REM) declarer les hidden qui declencheront le service du formulaire
+				parametre : url d'action ]
+				#ACTION_FORMULAIRE{#ENV{action}}
 				[(#ENV{_etape}|oui)
-				[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|oui)
-				<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-recapitulatif,env} />
-				]
-				[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|non)
-				#SET{saisies, #GET{etapes}|table_valeur{etape_#ENV{_etape}/saisies}}
-				#GENERER_SAISIES{#GET{saisies},saisies_par_etapes=#ENV{_saisies_par_etapes}}
-				]
-				]
-				[(#ENV{_etape}|non)
-				#GENERER_SAISIES{#GET{saisies}}
+				<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-#ENV{_saisies/options/etapes_presentation,defaut}, etapes=#ENV{_saisies_par_etapes}, env} />
 				]
-			</div>
 
-			[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-			<!--extra-->
-			<INCLURE{fond=formulaires/inc-saisies-cvt-boutons,env} />
-		</div></form>
+				<div class="editer-groupe">
+					#SET{saisies, #ENV{_saisies}}
+					[(#ENV{_etape}|oui)
+					[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|oui)
+					<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-recapitulatif,env} />
+					]
+					[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|non)
+					#SET{saisies, #GET{etapes}|table_valeur{etape_#ENV{_etape}/saisies}}
+					#GENERER_SAISIES{#GET{saisies},saisies_par_etapes=#ENV{_saisies_par_etapes}}
+					]
+					]
+					[(#ENV{_etape}|non)
+					#GENERER_SAISIES{#GET{saisies}}
+					]
+				</div>
+
+				[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+				<!--extra-->
+				<INCLURE{fond=#ENV**{_saisies/options/squelette_boutons,formulaires/inc-saisies-cvt-boutons},env} />
+			</div></form>
+		]
+
+			[(#ENV{_saisies}|et{#ENV{_saisies}|count}|non)
+				<p class="notice"><:saisies:formulaires_aucun_champ:></p>
+			]
 		]
 		#ENV**{_saisies/options/inserer_fin}
 </div>
+[(#ENV**{_saisies/options/ajax}|oui)
+	</div>
+]
diff --git a/lang/saisies_ar.php b/lang/saisies_ar.php
index d5d0d06c..2bf8ec7d 100644
--- a/lang/saisies_ar.php
+++ b/lang/saisies_ar.php
@@ -17,6 +17,7 @@ return [
 	'construire_position_label' => 'موقع الحقل',
 	'construire_reinitialiser' => 'إعادة تأصيل الاستمارة',
 
+	'formulaires_aucun_champ' => 'حالياً لا يوجد اي حقل إدخال في هذه الاستمارة.',
 	// L
 	'label_annee' => 'السنة',
 	'label_jour' => 'اليوم',
diff --git a/lang/saisies_de.php b/lang/saisies_de.php
index 4b8720f1..2caa02c9 100644
--- a/lang/saisies_de.php
+++ b/lang/saisies_de.php
@@ -55,6 +55,8 @@ return [
 	'erreur_generique' => 'Fehler im folgenden Feld. Bitte überprüfen Sie Ihre Eingabe.',
 	'erreur_option_nom_unique' => 'Dieser Name wird bereits für ein anderes Feld verwendet; er kann in diesem Formular nur einmal verwendet werden.',
 
+	// F
+	'formulaires_aucun_champ' => 'Für dieses Formular gibt es derzeit noch keine Eingabefelder.',
 	// I
 	'info_configurer_saisies' => 'Testseite der Eingabefelder.',
 
diff --git a/lang/saisies_en.php b/lang/saisies_en.php
index f88999ce..37832c7c 100644
--- a/lang/saisies_en.php
+++ b/lang/saisies_en.php
@@ -66,7 +66,7 @@ Load javascript and CSS on all pages, in the &lt;head&gt; tag',
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'You can send another file.',
 	'format_date_attendu' => 'Enter a date in dd/mm/yyyy format.',
 	'format_email_attendu' => 'Enter an email address in the format you@provider.tld',
-
+	'formulaires_aucun_champ' => 'There is currently no entry field for this form.',
 	// I
 	'info_configurer_saisies' => 'Test page for Entries',
 
diff --git a/lang/saisies_es.php b/lang/saisies_es.php
index 3ce50156..ce848c4d 100644
--- a/lang/saisies_es.php
+++ b/lang/saisies_es.php
@@ -69,6 +69,7 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Necesitas enviar otro archivo.',
 	'format_date_attendu' => 'Ingrese una fecha en el formato dd/mm/aaaa.',
 	'format_email_attendu' => 'Ingrese una dirección de correo electrónico en el formato vous@fournisseur.fr',
+	'formulaires_aucun_champ' => 'Todavía este formulario no contiene ningún campo.',
 
 	// I
 	'info_configurer_saisies' => 'Página de prueba de las entradas',
diff --git a/lang/saisies_fr.php b/lang/saisies_fr.php
index 51c98ee4..0b71863f 100644
--- a/lang/saisies_fr.php
+++ b/lang/saisies_fr.php
@@ -70,7 +70,8 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Vous devez envoyer un autre fichier.',
 	'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.',
 	'format_email_attendu' => 'Saisir une adresse email au format vous@fournisseur.fr',
-
+	'formulaires_aucun_champ' => 'Il n’y a pour l’instant aucun champ de saisie pour ce formulaire.',
+	'formulaires_aucun_champ' => 'У формы нет полей для ввода информации.',
 	// I
 	'info_configurer_saisies' => 'Page de test des Saisies',
 
diff --git a/lang/saisies_it.php b/lang/saisies_it.php
index ca4668f9..54d1183a 100644
--- a/lang/saisies_it.php
+++ b/lang/saisies_it.php
@@ -66,7 +66,7 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Devi inviare un altro file.',
 	'format_date_attendu' => 'Immettere una data nel formato gg/mm/aaaa.',
 	'format_email_attendu' => 'Inserisci un indirizzo email nel formato nome@indirizzo.it',
-
+	'formulaires_aucun_champ' => 'Non ci sono attualmente campi richiesti per questo modulo.',
 	// I
 	'info_configurer_saisies' => 'Pagina di test di Saisies',
 
diff --git a/lang/saisies_nl.php b/lang/saisies_nl.php
index 7c751b3b..54b60056 100644
--- a/lang/saisies_nl.php
+++ b/lang/saisies_nl.php
@@ -51,6 +51,7 @@ return [
 	// F
 	'fichier_erreur_explication_renvoi_alternative' => 'Je kunt een nieuw bestand versturen, of het formulier als zodanig. Het oude bestand wordt niet bewaard.',
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Je moet een ander bestand sturen.',
+	'formulaires_aucun_champ' => 'Er is momenteel geen iinvoerveld in dit formulier.',
 
 	// I
 	'info_configurer_saisies' => 'Testbladzijde voor invoer',
diff --git a/lang/saisies_pt_br.php b/lang/saisies_pt_br.php
index ab16910a..ab9e44b3 100644
--- a/lang/saisies_pt_br.php
+++ b/lang/saisies_pt_br.php
@@ -69,7 +69,7 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Você deve enviar um outro arquivo.',
 	'format_date_attendu' => 'Informar uma data no formato dd/mm/aaaa.',
 	'format_email_attendu' => 'Informar um endereço de e-mail no formato nome@dominio.com.br',
-
+	'formulaires_aucun_champ' => 'Ainda não há nenhum campo de entrada para esse formulário.',
 	// I
 	'info_configurer_saisies' => 'Página de teste das entradas de dados',
 
-- 
GitLab