Projet

Général

Profil

Development #54978

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

Cf. #54822

On a ici un champ source de donnée depuis une liste d'évènements chrono, sur un accès non signé[1] on reçoit tout de même une liste d'items, sans items structuré, certainement un reste d'une précédente configuration du champ :

<pre>
{
"anonymise": false,
"data_source": {
"type": "journees_a_la_mer"
},
"display_disabled_items": false,
"display_mode": "list",
"extra_css_class": "grid-1-2",
"hint": "choisissez",
"in_filters": true,
"initial_zoom": "13",
"items": [
"Cabourg, le 24 juillet",
"Cabourg, le 14 août",
"Deauville, le 14 août"
],
"label": "Choix de la destination",
"prefill": {
"type": "none"
},
"required": true,
"type": "item",
"varname": "event"
},
</pre>

Ici on ne devrait pas avoir @items@, ensuite même signé il semble qu'on reçoive quand même field.items[2] et là je ne sais pas pourquoi (le ticket client est un souci dans wcs-olap qui normalement signe tous ses appels).

À mon sens il y a donc deux problèmes :
* si une datasource est utilisé et le schéma est anonymisé, on ne doit pas avoir de champs @items@ dans le schéma
* si le schéma n'est pas anonymisé on devrait avoir structured_items et items avec les bonnes valeurs (ici on en a que 3)



fn1. https://demarches-moncompte.nanterre.fr/api/formdefs/journees-a-la-mer/schema
fn2. <pre>
class ItemField...
...
def export_to_json(self, include_id=False, anonymise=True):
field = super().export_to_json(include_id=include_id, anonymise=anonymise)
if self.data_source and not anonymise:
structured_items = data_sources.get_structured_items(self.data_source)
if structured_items:
field['structured_items'] = structured_items
if not field.get('items'):
field['items'] = [item['text'] for item in structured_items]
return field
</pre>

<pre>
class ApiFormdefDirectory(Directory):
_q_exports = ['schema', 'submit']

def __init__(self, formdef):
self.formdef = formdef

def schema(self):
get_response().set_content_type('application/json')
return self.formdef.export_to_json(anonymise=not is_url_signed()) <-- ICI pas anonymisé si signé

</pre>

Retour