Projet

Général

Profil

Bug #8631

variable du formulaire vide dans le front-office

Ajouté par Serghei Mihai (congés, retour 15/05) il y a plus de 8 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
14 octobre 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Dans le formulaire de demande d'encombrants le champ "voie" est pre-rempli en fonction de la commune: source des données [passerelle_url]/montpellier-sig/hebe/voies/[var_commune]
Quand le formulaire est visualisé depuis le backoffice et la liste des suggestions des voies apparaît en fonction du texte saisi dans le champ voie.
Dans les logs de passerelle on voit:

78.192.186.183 - - [14/Oct/2015:00:19:57 +0200] "GET //montpellier-sig/hebe/voies/34057?callback=jQuery19107898188634973138_1444774762449&q=impa&_=1444774762455 HTTP/1.1" 

Quand le formulaire est ouvert dans le front-office(utilisateur loggué ou pas) le champ voie n'est plus pre-rempli.
Dans les logs passerelle on voit que la variable var_commune est vide:

78.192.186.183 - - [14/Oct/2015:00:25:27 +0200] "GET //montpellier-sig/hebe/voies/?callback=jQuery191048950504027273867_1444775113188&q=avenue&_=1444775113189 HTTP/1.1" 404


Fichiers

Révisions associées

Révision f3cfe17d (diff)
Ajouté par Frédéric Péters il y a plus de 8 ans

form: skip over None variables when computing autocomplete variadic URL (#8631)

Historique

#1

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

C'est toujours plus facile avec une URL, et c'est encore mieux quand c'est reproduit sur la plateforme de dev.

Cela étant fait, https://eservices-montpellier.dev.entrouvert.org/collecte-des-dechets-menagers/demande-d-enlevement-d-encombrant/.

Et la source du soucis : le jsonp avec une URL "paramétrique", ça marche seulement sur les champs de type liste, pas pour l'autocomplétion des champs texte.

#2

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

Non, c'est en fait autre chose (le code dit que c'est ok quand la variable est référencée via un [var_, pas [form_var_), la liste des variables de contexte comprend le var_commune (à None), alors même que la page n'est pas complétée, et donc la substitution de chaine se fait et l'URL n'apparait plus comme étant paramétrique.

#3

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

Non, c'est en fait autre chose (le code dit que c'est ok quand la variable est référencée via un [var_, pas [form_var_), la liste des variables de contexte comprend le var_commune (à None), alors même que la page n'est pas complétée, et donc la substitution de chaine se fait et l'URL n'apparait plus comme étant paramétrique.

Hypothèse que le code suivant ne valide pas :

def test_form_autocomplete_variadic_url(pub):
    formdef = create_formdef()
    formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
            fields.ItemField(id='1', label='string', type='item',
                varname='foo', items=['Foo', 'Bar']),
            fields.StringField(id='2', label='string2',
                data_source={'type': 'jsonp', 'value': '[var_foo]'}),
            fields.PageField(id='3', label='2nd page', type='page'),
            ]
    formdef.store()

    formdef.data_class().wipe()
    resp = get_app(pub).get('/test/')
    assert 'url="[var_foo]"' in resp.body

Un autre paramètre doit entrer en jeu. (pas assez de réseau pour investiguer)

#4

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

Voilà, c'est la présence de pages conditionnelles.

def test_form_autocomplete_variadic_url(pub):
    formdef = create_formdef()
    formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
            fields.ItemField(id='1', label='string', type='item',
                varname='foo', items=['Foo', 'Bar']),
            fields.StringField(id='2', label='string2',
                data_source={'type': 'jsonp', 'value': '[var_foo]'}),
            fields.PageField(id='3', label='2nd page', type='page',
                condition='False'),
            ]
    formdef.store()

    formdef.data_class().wipe()
    resp = get_app(pub).get('/test/')
    assert 'options.wcs_base_url' in resp.body
#5

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

(c'est suite à #8272)

#6

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

Ce n'est pas évident de trouver le meilleur endroit pour corriger ça, ici l'option prise est la plus sûre, avec un effet limité aux URL à variables utilisées en datasource jsonp.

#7

Mis à jour par Thomas Noël il y a plus de 8 ans

Ack, avec un commentaire genre # test if url_replace javascript is present au dessus du assert 'options.wcs_base_url' in resp.body (j'ai mis du temps à piger que c'était pour tester la présence du javascript)

En dehors de ça, à un moment je me suis dit qu'on pourrait avoir une option "skip_none=False" dans get_variadic_url(url, variables, encode_query=True, skip_none_vars=False): et puis bof, non, c'est pas bien compréhensible, je sais même pas pourquoi j'en parle, je vais me coucher.

#8

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

  • Statut changé de En cours à Résolu (à déployer)

Voilà avec un commentaire ajouté.

commit f3cfe17d5876614301bf28c3f384ee3ab772b4f1
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Thu Oct 15 16:38:57 2015 +0200

    form: skip over None variables when computing autocomplete variadic URL (#8631)
#9

Mis à jour par Thomas Noël il y a plus de 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF