Projet

Général

Profil

Bug #56400

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

Ajouté par Valentin Deniaud il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Bas
Assigné à:
Version cible:
-
Début:
26 août 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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


Fichiers

Révisions associées

Révision cd3f8b96 (diff)
Ajouté par Lauréline Guérin il y a plus de 2 ans

fields: fix live items with disabled (#56400)

Historique

#2

Mis à jour par Lauréline Guérin il y a plus de 2 ans

  • Assigné à mis à Lauréline Guérin
#3

Mis à jour par Lauréline Guérin il y a plus de 2 ans

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

Mis à jour par Frédéric Péters il y a plus de 2 ans

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

Mis à jour par Lauréline Guérin il y a plus de 2 ans

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

Mis à jour par Frédéric Péters il y a plus de 2 ans

- 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

Mis à jour par Lauréline Guérin il y a plus de 2 ans

avec get_options seulement, on renvoie les disabled mais sans information comme quoi ils sont disabled

#8

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Statut changé de Solution proposée à Solution validée

Go comme ça.

#9

Mis à jour par Lauréline Guérin il y a plus de 2 ans

  • Statut changé de Solution validée à 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

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF