Champs extra en fieldset, obligatoire, et afficher_si
Description rapide du problème
Si un champ extra obligatoire est dans un fieldset conditionné par afficher_si, que la condition afficher_si n'est pas rempli, cela provoque quand même une erreur sur le champ extra.
Ex avec le .yaml
spip_articles:
-
options: { nom: conditionnante, label: conditionnante, type: text, size: '40', autocomplete: defaut, restrictions: { secteurs: '', branches: '', voir: { auteur: '' }, modifier: { auteur: '' } }, sql: 'text DEFAULT '''' NOT NULL' }
identifiant: '@608ef28dc2db6'
verifier: { }
saisie: input
-
options: { nom: conditionne, label: Conditionné, explication: 'Si conditionannte = ''oui'', alors s''affiche', afficher_si: '@conditionnante@ == ''oui''', restrictions: { secteurs: '', branches: '', voir: { auteur: '' }, modifier: { auteur: '' } } }
identifiant: '@608ef28908833'
verifier: { }
saisie: fieldset
saisies: [{ options: { nom: obligatoire, label: Obligatoire, type: text, size: '40', autocomplete: defaut, obligatoire: on, restrictions: { secteurs: '', branches: '', voir: { auteur: '' }, modifier: { auteur: '' } }, sql: 'text DEFAULT '''' NOT NULL' }, identifiant: '@608ef28b19403', verifier: { }, saisie: input }]
Explication de la cause du problème
- On peut regrouper les cextras dans des fieldsets
- On peut même dire que les saisies dans ces fieldsets sont obligatoires
- On peut mettre des afficher_si sur un fieldset
-
saisies_verifier
est capable de ne pas vérifier les champs qui sont a. Marqués comme obligatoire b. Dans un fieldset avec afficher_si dont la condition n'est pas vérifier - Mais pour que 4 marche, il faut bien sûr que la structure hierarchique "fieldset->cextras" soit passé à verifier
- Pb, dans cextras, on ne passe à
saisies_verifier()
que les saisies associés à une structure SQL, or saisies_lister_avec_sql` (appelé ici https://git.spip.net/spip-contrib-extensions/champs_extras_core/src/branch/master/cextras_pipelines.php#L278) supprime la hiérarchie des saisies.
Pistes de solution
a. Modifier cextras pour passer TOUTE la structure de saisies, donc conserver l'arborescence (concrètement, ne plus appeler champs_extras_saisies_lister_avec_sql()
avant saisies_verifier
)
b. Faire que saisies_lister_avec_sql
"intègre" au niveau des soussaisies de fieldset les afficher_si
de la saisie globale
A mon avis a. est clairement le plus simple, le moins usine à gaz, et je ne vois vraiment pas pourquoi on ne vérifierai que les saisies qui non pas de valeur SQL. A priori, si quelqu'un déclare un cextras sans SQL associé, c'est qu'il sait ce qu'il fait.