/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2017 *
+ * Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/**
* Verifier les etapes de saisie
- *
+ *
* @param array $args
* @param $erreurs
* @return array
) {
// recuperer l'etape saisie et le nombre d'etapes total
list($etape, $etapes) = $e;
- $etape_demandee = _request('aller_a_etape'); // possibilite de poster en entier dans aller_a_etape
+ $etape_demandee = intval(_request('aller_a_etape')); // possibilite de poster un entier dans aller_a_etape
+ $args['etape_saisie'] = $etape;
+ $args['etapes'] = $etapes;
// lancer les verifs pour chaque etape deja saisie de 1 a $etape
$erreurs_etapes = array();
$derniere_etape_ok = 0;
$e = 0;
- while ($e < $etape and $e < $etapes) {
+ while ($e < max($etape, $etape_demandee -1) and $e < $etapes) {
$e++;
$erreurs_etapes[$e] = array();
if ($verifier = charger_fonction("verifier_$e", "formulaires/$form/", true)) {
}
// et on appelle un pipeline dedie aux etapes, plus easy
$args['etape'] = $e;
+ $args['etape_demandee'] = $etape_demandee;
$erreurs_etapes[$e] = pipeline(
'formulaire_verifier_etape',
array(
if ($derniere_etape_ok == $e - 1 and !count($erreurs_etapes[$e])) {
$derniere_etape_ok = $e;
}
- // possibilite de poster dans _retour_etape_x
+ // possibilite de poster dans _retour_etape_x ou aller_a_etape
if (!is_null(_request("_retour_etape_$e"))) {
$etape_demandee = $e;
}
+ // Il se peut que les verifications ait décidé de faire sauter des étapes
+ if ($aller_a_etape = intval(_request('aller_a_etape'))) {
+ $etape_demandee = $aller_a_etape; // possibilite de poster un entier dans aller_a_etape
+ }
}
+
// si la derniere etape OK etait la derniere
// on renvoie le flux inchange et ca declenche traiter
- if ($derniere_etape_ok == $etapes and !$etape_demandee) {
+ if ($derniere_etape_ok == $etapes
+ and (!$etape_demandee or $etape_demandee>=$etapes)) {
return $erreurs;
} else {
$etape = $derniere_etape_ok + 1;
$erreurs = isset($erreurs_etapes[$etape]) ? $erreurs_etapes[$etape] : array();
// Ne pas se tromper dans le texte du message d'erreur : la clé '_etapes' n'est pas une erreur !
if ($erreurs) {
- $erreurs['message_erreur'] = singulier_ou_pluriel(count($erreurs), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
+ if (!isset($erreurs['message_erreur'])) {
+ $erreurs['message_erreur'] = singulier_ou_pluriel(count($erreurs), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
+ }
} else {
$erreurs['message_erreur'] = "";
}