Projet

Général

Profil

Development #43971

évaluation des éléments de WidgetList

Ajouté par Frédéric Péters il y a presque 4 ans. Mis à jour il y a presque 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
12 juin 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Aujourd'hui le champ a un <input type=hidden> added_elements qui reprend le nombre d'éléments aujoutés, c'est natif quixote et ça se trouve géré dans notre js,

                /* increase hidden $added_elements value */
                var hidden = $($(this).parents('div').parents('div')[0]).prevAll(
                    'input[type=hidden]')[0];
                $(hidden).attr('value', parseInt($(hidden).attr('value'))+1);

mais à approcher de situations plus complexes (blocs de champs répétables), je modifie cela pour dégager le added_elements et faire en sorte que la liste des éléments soit déterminée automatiquement (selon ce qui a été soumis).

En faisant ça j'introduis un petit changement fonctionnel, le champ ajoutait toujours une ligne vide, je retire ça parce que je préfère (par exemple visiter une action de workflow d'envoi d'email, en destinataires, s'il y en a un seul ça n'affiche plus que celui-ci, il faut cliquer sur ajouter si on veut en ajouter un, versus avant où un emplacement vide pour un second destinataire aurait déjà été présent).

Aussi je glisse dans le commit un nouveau paramètre max_items, pour permettre de ne plus afficher le bouton d'ajout à partir d'un certain moment.


Fichiers

Révisions associées

Révision 54647a16 (diff)
Ajouté par Frédéric Péters il y a presque 4 ans

form: revamp widget list to compute list of children (#43971)

(and bonus: new max_items options)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 4 ans

(ça vient après quelques autres tickets, cf la branche)

#2

Mis à jour par Thomas Noël il y a presque 4 ans

Au moment de l'ajout des éléments dans le init on fait simplement :

        known_prefixes = {x.split('$', 2)[1] for x in get_request().form.keys() if x.startswith(prefix)}
        for i in range(len(known_prefixes) - len(self.element_names)):
            self.add_element()

et je pense qu'il faudrait limiter à max_items s'il est défini. Sinon j'ai l'impression qu'on fait trop confiance aux données reçues pour calculer le nombre d'éléments à afficher/prendre en compte.

Dans le même ordre d'idée, en cas de max_items, je limiterais les add_element possibles dans le set_value.

(En vrai je suis un peu surpris que max_items soit si peu utilisé en limitation, mais sans doute que ça suffit)

#3

Mis à jour par Frédéric Péters il y a presque 4 ans

En effet, comme il n'y avait pas encore de quoi tester tout ça était très théorique. (puis j'ai oublié dans les blocs de champs de terminer ça).

Voici le patch qui évalue max_items (mais il faudra attendre les blocs de champs pour avoir un test qui passe par là, je vais l'écrire).

#4

Mis à jour par Frédéric Péters il y a presque 4 ans

La branche wip/8265-blocks avec un test passant sur ce code a été poussée, extrait :

    # fill items
    resp.form['f1$element0$f123'] = 'foo'
    resp.form['f1$element0$f234'] = 'bar'
    resp.form['f1$element1$f123'] = 'foo1'
    resp.form['f1$element1$f234'] = 'bar1'
    resp.form['f1$element2$f123'] = 'foo2'
    resp.form['f1$element2$f234'] = 'bar2'

    # (modify formdef to only allow 2)
    formdef.fields[1].max_items = 2
    formdef.store()

    # submit form
    resp = resp.form.submit('submit')
    assert 'Too many elements (maximum: 2)' in resp
#5

Mis à jour par Thomas Noël il y a presque 4 ans

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

Mis à jour par Frédéric Péters il y a presque 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 54647a16f2acaf9077891b09cf4605917632b1b0
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Jun 1 22:19:14 2020 +0200

    form: revamp widget list to compute list of children (#43971)

    (and bonus: new max_items options)
#7

Mis à jour par Frédéric Péters il y a presque 4 ans

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

Formats disponibles : Atom PDF