Project

General

Profile

Bug #56400

Source de données "live", éléments désactivés et template-meetings

Added by Valentin Deniaud over 3 years ago. Updated about 3 years ago.

Status:
Fermé
Priority:
Bas
Target version:
-
Start date:
26 August 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

Revision cd3f8b96 (diff)
Added by Lauréline Guérin about 3 years ago

fields: fix live items with disabled (#56400)

History

#2

Updated by Lauréline Guérin over 3 years ago

  • Assignee set to Lauréline Guérin
#3

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#n1871
get_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#n1864
get_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.

#4

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.

#5

Updated by Lauréline Guérin over 3 years ago

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'.

#6

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)

#7

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

#8

Updated by Frédéric Péters about 3 years ago

  • Status changed from Solution proposée to Solution validée

Go comme ça.

#9

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
#10

Updated by Frédéric Péters about 3 years ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF