diff --git a/formulaires/formidable.php b/formulaires/formidable.php index d80c4e7d09e2e8aa04f778f547a1116a10a5d2e2..c0c9e1fb8fcbf3ed1767ee92030d37c8527aec48 100644 --- a/formulaires/formidable.php +++ b/formulaires/formidable.php @@ -248,9 +248,9 @@ function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = arra include_spip('inc/saisies'); $saisies = saisies_chercher_formulaire('formidable', array($id, $valeurs, $id_formulaires_reponse)); - // Seulement si on est à la DERNIÈRE étape, on lance les vérifications propres aux traitements - if ($saisies and $etapes = saisies_lister_par_etapes($saisies) and $etape==count($etapes)) { - $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse); + // On lance les vérifications propres aux traitements à chaque étape, pour avoir les messages d'erreurs à chaque étape + if ($saisies and $etapes = saisies_lister_par_etapes($saisies)) { + $erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse, $etapes, $etape); } return $erreurs; @@ -266,11 +266,13 @@ function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = arra * Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli * @param int|bool $id_formulaires_reponse * Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique - * + * @param array $etapes + * Liste des saisies, ordonnées par étape + * @param int|null $etape le numéro de l'étape courante * @return array * Tableau des erreurs */ -function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $id_formulaires_reponse = false) { +function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $id_formulaires_reponse = false, $etapes = array(), $etape = null) { $erreurs = array(); if ( @@ -289,6 +291,8 @@ function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $i 'id_formulaire' => $formulaire['id_formulaire'], 'valeurs' => $valeurs, 'id_formulaires_reponse' => $id_formulaires_reponse, + 'etapes' => $etapes, + 'etape' => $etape ), $erreurs ); diff --git a/traiter/enregistrement.php b/traiter/enregistrement.php index 6ed6be6e01e2b63e7a836a22e8fdf3986e8f7769..44e7fa6b779dc905fa1bb66f3628190b8159b3a2 100644 --- a/traiter/enregistrement.php +++ b/traiter/enregistrement.php @@ -194,8 +194,16 @@ function traiter_enregistrement_verifier_dist($args, $erreurs) { $id_formulaire = $args['id_formulaire']; $options = $args['options']; $id_formulaires_reponse = $args['id_formulaires_reponse']; - - if (($unicite = $options['unicite']) != '' and !$erreurs[$unicite]) { + $etape = $args['etape']; + if (($unicite = $options['unicite']) != '' and !$erreurs[$unicite] + and + ( + $etape === null + or ( + array_key_exists($unicite, saisies_lister_par_nom(array($args['etapes'][$etape]))) + ) + ) + ) { if (!$id_formulaires_reponse) { // si pas de réponse explictement passée au formulaire, on cherche la réponse qui serait édité $id_formulaires_reponse = formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_reponse, $options); }