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 1. On peut regrouper les cextras dans des fieldsets 2. On peut même dire que les saisies dans ces fieldsets sont obligatoires 3. On peut mettre des afficher_si sur un fieldset 4. `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 5. Mais pour que 4 marche, il faut bien sûr que la structure hierarchique "fieldset->cextras" soit passé à verifier 6. 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.
issue

Forge communautaire SPIP | Charte d'utilisation | Signaler un problème sur ce site