Browse Source

Ne vider les saisies masquées que lors que toutes les vérifications ont

réussi sans erreurs.

Evite différents soucis notamment en multietape
pull/112/head
Maïeul 1 year ago
parent
commit
775a7bdc34
  1. 42
      inc/saisies_afficher_si_php.php
  2. 14
      saisies_pipelines.php

42
inc/saisies_afficher_si_php.php

@ -24,9 +24,6 @@ include_spip('inc/saisies_afficher_si_commun');
* - l'option de la saisie individuelle `afficher_si_avec_post` est activée;
* - l'option globale `afficher_si_avec_post` est activée;
* - l'option de la saisie individuelle `afficher_si_remplissage_uniquement` est activée.
* - On modifie le résultat de `_request()` pour avoir une chaîne vide (`''`), SAUF SI l'une des deux conditions suivantes est remplie:
* - l'option `afficher_si_avec_post` est activée;
* - l'option globale `afficher_si_avec_post` est activée.
* Sur le détail des usages des différentes options, voir
* https://contrib.spip.net/5081#Options-supplementaires
*
@ -45,10 +42,6 @@ function saisies_verifier_afficher_si($saisies, $env = null, $saisies_toutes_par
$saisies = pipeline('saisies_afficher_si_saisies', $saisies);
$saisies_toutes_par_nom = saisies_lister_par_nom($saisies);
}
// compat historique
if (isset($saisies['options']['poster_afficher_si']) and !isset($saisies['options']['afficher_si_avec_post'])) {
$saisies['options']['afficher_si_avec_post'] = $saisies['options']['poster_afficher_si'];
}
// eviter une erreur par maladresse d'appel :)
if (!is_array($saisies)) {
@ -77,13 +70,6 @@ function saisies_verifier_afficher_si($saisies, $env = null, $saisies_toutes_par
if (is_null($env)) {
if ($saisie['saisie'] == 'explication') {//Une saisie explication masquée par afficher_si ne devrait rien retourner dans les syntaxe @truc@ dans formidable. Sans doute des choses à ameliorer pour que formidable ne soit pas obligé de faire un appel direct à saisies_verifier_afficher_si(). A voir lorsque la question se posera en pratique.
unset($saisies[$cle]);
} else {
if (
empty($saisies['options']['afficher_si_avec_post']) // option globale
and empty($saisie['options']['afficher_si_avec_post']) // option de la saisie
) {
saisies_set_request_recursivement($saisie, '');
}
}
}
}
@ -103,6 +89,34 @@ function saisies_verifier_afficher_si($saisies, $env = null, $saisies_toutes_par
return $saisies;
}
/**
* Cette fonction doit toujours être appelé après le passage dans `saisies_verifier()`
* Recherche les saisies qui ont été masquées par afficher_si
* et les mets à `''`,
* sauf si
* * - options globales de saisies : `afficher_si_avec_post`
* * - option de la saisie spécifique : `afficher_si_avec_post`
**/
function saisies_afficher_si_masquees_set_request_empty_string($saisies) {
$saisies_masquees = saisies_afficher_si_liste_masquees('get');//Retenir que la saisie a été masquée
if (!is_array($saisies_masquees)) {
return;
}
//Compat historique
if (isset($saisies['options']['poster_afficher_si']) and !isset($saisies['options']['afficher_si_avec_post'])) {
$saisies['options']['afficher_si_avec_post'] = $saisies['options']['poster_afficher_si'];
}
if (!empty($saisies['options']['afficher_si_avec_post'])) {
return;
}
foreach ($saisies_masquees as $saisie) {
if (
empty($saisie['options']['afficher_si_avec_post']) // option de la saisie
) {
saisies_set_request_recursivement($saisie, '');
}
}
}
/**

14
saisies_pipelines.php

@ -260,8 +260,9 @@ function saisies_styliser($flux) {
function saisies_formulaire_verifier($flux) {
// Il faut que la fonction existe et qu'elle retourne bien un tableau
include_spip('inc/saisies');
$saisies = saisies_chercher_formulaire($flux['args']['form'], $flux['args']['args'], true);
if ($saisies and !isset($saisies['options']['etapes_activer'])) {
if ($saisies and (!isset($saisies['options']['etapes_activer']) or !$saisies['options']['etapes_activer'])) {
$erreurs = saisies_verifier($saisies);
if ($erreurs and !isset($erreurs['message_erreur'])) {
@ -272,6 +273,9 @@ function saisies_formulaire_verifier($flux) {
}
$flux['data'] = array_merge($erreurs, $flux['data']);
if (empty($flux['data'])) {
saisies_afficher_si_masquees_set_request_empty_string($saisies);
}
}
return $flux;
}
@ -309,6 +313,14 @@ function saisies_formulaire_verifier_etape($flux) {
$flux['args']['etape_demandee'] = $avance_rapide;
}
}
// Si on a verifier toutes les étapes, alors vider les afficher_si dans le _POST si pas d'erreur
if (
isset($flux['args']['etape_saisie'])
and $flux['args']['etape_saisie'] == $flux['args']['etapes']
and empty($flux['data'])
) {
saisies_afficher_si_masquees_set_request_empty_string($saisies);
}
}

Loading…
Cancel
Save