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.