Bug #56400
Source de données "live", éléments désactivés et template-meetings
0%
Description
Un champ liste configuré pour afficher les créneaux d'un agenda avec template-meetings ne respecte pas le paramétrage « Afficher les éléments désactivés » si l'URL du JSON est encadrée par une condition. Les éléments désactivés sont toujours affichés même si l'option est décochée.
Ça fonctionne sans problème sans template-meetings, les choix désactivés ne se retrouvent pas dans le menu déroulant.
Problème peu bloquant puisqu'on peut obtenir le comportement attendu (cacher les créneaux déjà pris) en passant hide_disabled=True à chrono dans l'appel à /datetimes/.
Files
Associated revisions
History
Updated by Lauréline Guérin over 3 years ago
Dans live_process_fields (https://git.entrouvert.org/wcs.git/tree/wcs/forms/common.py?id=b4ee66cbcfeeee74c74d8c0c72b17c47c8171671#n723):
elif modified_field_varnames.intersection(varnames): if 'template-' in (field.extra_css_class or ''): # custom template, it may need all option attributes result[field.id]['items'] = field.get_extended_options() elif field.display_mode == 'timetable': # timetables require additional attributes result[field.id]['items'] = field.get_extended_options() # but reduce payload weight by removing the API URLs for options in result[field.id]['items']: options.pop('api', None) else: result[field.id]['items'] = [ {'id': x[2], 'text': x[1]} for x in field.get_options(mode='lazy') ]
Si on est en mode timetable ou template-meetings, on récupère les options via get_extended_options
, qui renvoie toujours les disabled, quelles que soient les options du field:
https://git.entrouvert.org/wcs.git/tree/wcs/fields.py?id=b4ee66cbcfeeee74c74d8c0c72b17c47c8171671#n1871get_extended_options
appelle get_structured_items
qui renvoie tout.
=> un champ item avec une datasource dont l'url est conditionnée par un autre champ, en mode timetable ou template, quelle que soit l'option "display disabled items", renverra toujours tous les items, disabled ou non.
Si on est en mode "normal", on récupère les options via get_options
, qui ne renvoie jamais les disabled:
https://git.entrouvert.org/wcs.git/tree/wcs/fields.py?id=b4ee66cbcfeeee74c74d8c0c72b17c47c8171671#n1864get_options
appelle get_items
qui a un default include_disabled=False
=> un champ item avec une datasource dont l'url est conditionnée par un autre champ, en mode normal, quelle que soit l'option "display disabled items", ne renverra jamais les disabled.
Je peux proposer un patch pour corriger tout ça, mais je ne suis pas bien sûre des impacts que ça pourrait avoir ailleurs.
Updated by Frédéric Péters over 3 years ago
Je peux proposer un patch pour corriger tout ça, mais je ne suis pas bien sûre des impacts que ça pourrait avoir ailleurs.
Pas d'inquiétude je dirais, autant bien corriger, ce serait normal que le rendu "live" fournisse les mêmes données que le rendu de base.
Updated by Lauréline Guérin over 3 years ago
- File 0002-fields-fix-live-items-with-disabled-56400.patch 0002-fields-fix-live-items-with-disabled-56400.patch added
- File 0001-misc-split-form_pages-live-tests.patch 0001-misc-split-form_pages-live-tests.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Pas d'inquiétude je dirais, autant bien corriger, ce serait normal que le rendu "live" fournisse les mêmes données que le rendu de base.
Sauf que j'ai choisi de modifier get_options et get_extended_options, pour y prendre en compte l'option "display disabled items".
=> je déplace ça plutôt dans live_process_fields au niveau des get_options ?
Sinon:
- correction du comportement du live, prise en compte de l'option "display disabled"
- que ce soit timetable, template, ou normal, on prend les extended options, parce qu'on a besoin de savoir au niveau du JS si on doit disable des options
- du coup, modif dans le JS pour disable des options
Je n'ai fait la correction que pour ItemField, est-ce nécessaire aussi pour ItemsField ? J'ai l'impression que live_process_fields ne traite que 'item'.
Updated by Frédéric Péters over 3 years ago
- que ce soit timetable, template, ou normal, on prend les extended options, parce qu'on a besoin de savoir au niveau du JS si on doit disable des options
Ça c'est peut-être moche, il faudrait retrouver l'historique c'est possible que ça ait été réduit à id/text parce que par endroit ça faisait des échanges json bêtement trop lourds.
(je regarderai plus tard)
Updated by Lauréline Guérin over 3 years ago
avec get_options seulement, on renvoie les disabled mais sans information comme quoi ils sont disabled
Updated by Frédéric Péters about 3 years ago
- Status changed from Solution proposée to Solution validée
Go comme ça.
Updated by Lauréline Guérin about 3 years ago
- Status changed from Solution validée to Résolu (à déployer)
commit cd3f8b960578fb9b58e62bcfde0ed1f1d8438c58 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Mon Sep 6 10:08:58 2021 +0200 fields: fix live items with disabled (#56400) commit 4a825983bcf876baeacefdb1bee2d5cde7bc27aa Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Fri Sep 3 14:44:33 2021 +0200 misc: split form_pages live tests
Updated by Frédéric Péters about 3 years ago
- Status changed from Résolu (à déployer) to Solution déployée
fields: fix live items with disabled (#56400)