Browse Source

Au passage dans cette branche, on remet comme avant les tests d'obligation directement dans saisies_verifier() car sinon ça parcourt deux fois tous les champs + deux fois toutes les recherches de valeurs. Du coup on peut supprimer la fonction qui n'était pas utilisée autrement. On a alors bien la recherche dans l'éventuel y compris pour l'obligation + on le rajoute aussi pour le afficher_si où ça manquait !

pull/135/head
RastaPopoulos 1 year ago committed by Gitea
parent
commit
df89aa890c
  1. 81
      inc/saisies_verifier.php

81
inc/saisies_verifier.php

@ -25,7 +25,6 @@ function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $e
include_spip('inc/verifier');
$verif_fonction = charger_fonction('verifier', 'inc', true);
// Lister les saisies par étapes, si besoin
if (is_numeric($etape)) {
$saisies_par_etapes = saisies_lister_par_etapes($formulaire);
@ -35,7 +34,7 @@ function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $e
// Enlever les afficher_si non vérifié, si besoin
if ($saisies_masquees_empty_string) {
$saisies_par_etapes_apres_verification_afficher_si = saisies_verifier_afficher_si($saisies_par_etapes);
$saisies_par_etapes_apres_verification_afficher_si = saisies_verifier_afficher_si($saisies_par_etapes, $valeurs);
} else {
$saisies_par_etapes_apres_verification_afficher_si = $saisies_par_etapes;
}
@ -50,26 +49,48 @@ function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $e
} else {
$saisies_etape_courante_apres_verification_afficher_si = $saisies_par_etapes_apres_verification_afficher_si;
}
// On passe à une liste par nom
$saisies_etape_courante_apres_verification_afficher_si_par_nom = saisies_lister_par_nom($saisies_etape_courante_apres_verification_afficher_si);
// Vérifier si c'est obligatoire
$erreurs = saisies_verifier_obligatoire($saisies_etape_courante_apres_verification_afficher_si_par_nom);
$erreurs = array();
// On parcourt chacune des saisies
foreach ($saisies_etape_courante_apres_verification_afficher_si_par_nom as $saisie) {
$champ = $saisie['options']['nom'];
if (isset($saisie['verifier']) and $saisie['verifier']) {
$verifier = $saisie['verifier'];
} else {
$verifier = false;
$valeur = saisies_get_valeur_saisie($saisie, $valeurs);
$obligatoire = isset($saisie['options']['obligatoire']) ? $saisie['options']['obligatoire'] : '';
$file = saisies_saisie_est_fichier($saisie);
// On commence par vérifier l'obligation, seulement si demandé
if (
$obligatoire
and $obligatoire != 'non'
and (
($file and $valeur==null)
or (!$file and (
is_null($valeur)
or (is_string($valeur) and trim($valeur) == '')
or (is_array($valeur) and count($valeur) == 0)
))
)
) {
$erreurs[$champ] =
(isset($saisie['options']['erreur_obligatoire']) and $saisie['options']['erreur_obligatoire'])
? _T_ou_typo($saisie['options']['erreur_obligatoire'])
: _T('info_obligatoire');
}
// On continue seulement si ya pas d'erreur d'obligation et qu'il y a une demande de verif
if ((!isset($erreurs[$champ]) or !$erreurs[$champ]) and is_array($verifier) and $verif_fonction) {
// On continue seulement si ya pas déjà une erreur d'obligation et qu'il y a une demande de verif
$verifier = $saisie['verifier'] ?? false;
if ((!isset($erreurs[$champ]) or !$erreurs[$champ]) and is_array($verifier) and $verifier and $verif_fonction) {
// Si on fait une vérification de type fichiers, il n'y a pas vraiment de normalisation, mais un retour d'erreur fichiers par fichiers
if ($verifier['type'] == 'fichiers') {
$normaliser = array();
} else {
$normaliser = null;
}
$valeur = saisies_get_valeur_saisie($saisie, $valeurs);
$options = isset($verifier['options']) ? $verifier['options'] : array();
$options = $verifier['options'] ?? array();
if ($erreur_eventuelle = $verif_fonction($valeur, $verifier['type'], $options, $normaliser)) {
$erreurs[$champ] = $erreur_eventuelle;
// Si le champ n'est pas valide par rapport au test demandé, on ajoute l'erreur
@ -113,44 +134,6 @@ function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $e
return $erreurs;
}
/**
* Vérifier que les saisies obligatoires (après filtrage de celles masquées par afficher_si) sont bien remplies.
* @param array $saisies_par_nom
* @return array erreurs
**/
function saisies_verifier_obligatoire($saisies_par_nom) {
unset($saisies_par_nom['options']);
$erreurs = array();
foreach ($saisies_par_nom as $saisie) {
$champ = $saisie['options']['nom'];
$valeur = saisies_get_valeur_saisie($saisie);
$obligatoire = isset($saisie['options']['obligatoire']) ? $saisie['options']['obligatoire'] : '';
$file = saisies_saisie_est_fichier($saisie);
if (
$obligatoire
and $obligatoire != 'non'
and (
($file and $valeur==null)
or (!$file and (
is_null($valeur)
or (is_string($valeur) and trim($valeur) == '')
or (is_array($valeur) and count($valeur) == 0)
))
)
) {
$erreurs[$champ] =
(isset($saisie['options']['erreur_obligatoire']) and $saisie['options']['erreur_obligatoire'])
? _T_ou_typo($saisie['options']['erreur_obligatoire'])
: _T('info_obligatoire');
}
if (isset($saisie['saisies'])) {
$erreurs = array_merge($erreurs, saisies_verifier_obligatoire($saisie['saisies']));
}
}
return $erreurs;
}
/**
* Vérifier que les valeurs postées sont acceptables,
* c'est-à-dire qu'elles ont été proposées lors de la conception de la saisie.

Loading…
Cancel
Save