Description de la validation des formulaires
============================================

Pour les formulaires, la validation se fait en ajax.

Chemin suivit
-------------

Client
Coté javascript, le résultat du formulaire est formaté en dictionnaire et 
convertit en string json dans formValidForm (fonction javascript associé aux boutons de validation de formulaire).
Dans la requête http effectuée, la clé est JSONstr

Agrégateur(frontend)
Le frontend par le biais de la lib json-py reforme le dictionnaire et l'envoi par
xmlrpc au serveur de commandes sous la clé form_result.

Serveur de commande (backend)
Celui-ci via le type Dict filtre la validité du résultat et garantit (en partie) l'intégrité des
données traitées.

Action
Les retours de formulaire sont réceptionnés par la variable form_result, qu'il faut donc
spécifier dans les paramètres de notre action :

    class MonAction(Action):
	    form_result = Dict(default={}, doc='variable de reception des retours de formulaire', keys=['nomduformulaire'])

bouton de validation
--------------------

Les validations ne se font pas par le biais d'un submit mais par un appel à la fonction js formValidForm.
La fonction make_form_link de ead2/backend/actions/tools.py génère un lien javascript (un href)

pour valider les formulaires:

::
	make_form_link(num_serveur, nom_action, confirmation, [noms des formulaires à valider], balise)

confirmation est un booléen si il est à False il n'y pas de 'javascript:' devant le lien 
(permet de demander une confirmation avant).

les noms de formulaire sont leur id.

balise est l'id de la balise html qui réceptionne le résultat de la requête.

format de form_result
---------------------

Le format généré niveau client est générique et n'est pas très maniable, ainsi côté backend, 
dans ead2/backend/actions/tools.py
la fonction format_form_result permet de reformer le dictionnaire:

::

	resultat = format_form_result(form_result, check=True)

- form_result :  résultat de notre validation
- check: si True on recupère True ou False pour les checkbox,
         si False on récupère la clé value ou rien
         si '2' on récupère True ou la clé value.

upload de fichier
-----------------

Comme cela est fréquent en Ajax, l'upload de fichier s'effectue par l'intermédiaire d'une iframe.
Côté frontend, l'url de la requête associée au téléchargement de fichier est :

    url/file_download/?filename=...&action=...&server=...&clé_de_la_balise_inputfile=<contenu du fichier>

Côté backend, on récupère les valeurs dans les paramètres de requêtes.
