Bug #14691
La contrainte obligatoire d'un champs liste en bouton radio dans un formulaire backoffice n'est pas appliquée
0%
Description
Dans un champs liste déroulante, le premier élément de la liste est présélectionné, alors qu'en bouton radio aucun élément n'est préselectionné, que le champs soit obligatoire ou non.
Pour un champs obligatoire qui est une liste en bouton radio dans un formulaire en front office, la contrainte est appliquée si l'usager ne fait pas un choix d'élément, le formulaire affiche une erreur suite au submit.
Pour ce même champs utilisé dans un formulaire affiché en backoffice, la contrainte n'est pas appliquée, le formulaire est passant même si aucun choix dans la liste n'est fait.
Formulaire frontoffice avec bouton radio et contrainte bien appliquée :
https://demarches-grandlyon.dev.entrouvert.org/backoffice/forms/8/fields/1/
https://demarches-grandlyon.dev.entrouvert.org/demarches-usager/test/
Formulaire backoffice avec bouton radio et contrainte non appliquée :
https://demarches-grandlyon.dev.entrouvert.org/backoffice/workflows/4/status/1/items/1/fields/3/
https://demarches-grandlyon.dev.entrouvert.org/backoffice/management/valider-mon-identite/11/
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 7 ans
--- a/wcs/wf/form.py +++ b/wcs/wf/form.py @@ -164,8 +164,6 @@ class FormWorkflowStatusItem(WorkflowStatusItem): if v: form.get_widget('f%s' % field.id).set_value(v) req.form['f%s' % field.id] = v - else: - form.get_widget('f%s' % field.id).clear_error() def submit_form(self, form, formdata, user, evo): if not self.formdef:
Mais je n'ai pas souvenir du pourquoi de ce clear_error(), et on n'a pas de tests qui passaient dans le clear_error(), donc pas sûr de ce que ça pourrait casser.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-workflows-fix-handling-of-required-fields-in-workflo.patch 0001-workflows-fix-handling-of-required-fields-in-workflo.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Repris avec un test détaillant le cas d'erreur; si jamais ça cassait quelque chose on pourra au moins corriger sans risquer de perdre ce cas.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-workflows-fix-handling-of-prefilled-required-radio-f.patch 0001-workflows-fix-handling-of-prefilled-required-radio-f.patch ajouté
Repris avec une modification aux tests (que les sessions soient éclatées de manière systématique).
Mis à jour par Thomas Noël il y a presque 7 ans
Dans le test, je préférerai que le prefill se fasse avec une valeur non vide, genre "d", parce que dans le code on a des trucs genre "if v:" :
2966 # mimick special case: https://dev.entrouvert.org/issues/14691 2967 # item field displayed as radio buttons, with prefill of a value 2968 # that doesn't exist. 2969 fields.ItemField( 2970 id='2', label='Test2', type='item', 2971 prefill={'type': 'string', 'value': 'd'}, <-- ici 2972 show_as_radio=True, 2973 varname='radio', 2974 items=['a', 'b', 'c'], required=True))
mais bon, peut-être que c'est pas important.
Et donc avec ou sans ça, ack.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Statut changé de En cours à Résolu (à déployer)
En fait c'est important que ça soit vide pour simuler le cas.
En mettant une valeur, le test marcherait sans même le patch, parce qu'on n'entrerait justement pas dans le code supprimé :
- else: - form.get_widget('f%s' % field.id).clear_error()
commit 7a2d4999efa96a404753071886d9887d1d0fe20c Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Jan 25 23:09:40 2017 +0100 workflows: fix handling of prefilled+required radio fields in forms (#14691)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
workflows: fix handling of prefilled+required radio fields in forms (#14691)