diff -r 000000000000 -r b97547f5f1fa doc/devmanual_fr/chap_ui_gestion_formulaire.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/devmanual_fr/chap_ui_gestion_formulaire.txt Wed Nov 05 15:52:50 2008 +0100 @@ -0,0 +1,133 @@ +.. -*- coding: utf-8 -*- + +Gestion de formulaires +====================== + +Contrôle de la génération automatique de formulaire pour les entités manipulée +------------------------------------------------------------------------------ +XXX FILLME + +* les formulaires 'edition' et 'creation' + +Le formulaire généré par défaut ne vous convient pas ? Vous êtes peut-être pas +obligé de le refaire à la main ! :) + +* rtags primary, secondary, generated, generic, + `Entity.relation_category(rtype, x='subject')` +* inline_view (now a rtag?) +* spécification widget + + +Fonctionnement du contrôleur d'édition par défaut (id: 'edit') +-------------------------------------------------------------- + +Contrôle de l'édition +````````````````````` +Prérequis: les paramètres liés aux entités à éditer sont spécifiés de la forme :: + + : + +où l'eid de l'entité pourra être une lettre dans le cas d'une entité à créer. On +dénommera ces paramètres comme *qualifié*. + +1. récupération des entités à éditer en cherchant les paramètres de formulaire + commençant par 'eid:' ayant également un paramètre '__type' associé + (également *qualifié* par l'eid évidemment) + +2. pour tous les attributs et relations de chaque entité à éditer + + 1. recherche d'un paramètre 'edits-' ou 'edito-' + qualifié dans le cas d'une relation dont l'entité est objet + 2. si trouvé, la valeur récupérée est considérée comme la valeur originale + pour cette relation, et on cherche la (ou les) nouvelle(s) valeur(s) dans + le paramètre (qualifié) + 3. si la valeur est différente de l'originale, une requête de modification en + base est effectuée + +3. pour chaque entité à éditer + + 1. si un paramètre `__linkto` qualifié est spécifié, sa valeur doit être une + chaine (ou une liste de chaine) de la forme : :: + + :: + + où vaut 'subject' ou 'object' et chaque eid peut-être séparé d'un + autre par un '_'. Target spécifie *l'entité éditée* est sujet ou objet de la + relation et chaque relation ainsi spécifiée sera insérée. + + 2. si un paramètre `__cloned_eid` qualifié est spécifié pour une entité, les + relations de l'entité spécifiée en valeur de cette argument sont copiées sur + l'entité éditée + + + 3. si un paramètre `__delete` qualifié est spécifié, sa valeur doit être une + chaine (ou une liste de chaine) de la forme : :: + + :: + + où chaque eid sujet ou objet peut-être séparé d'un autre par un '_'. Chaque + relation ainsi spécifiée sera supprimée. + + 4. si un paramètre `__insert` qualifié est spécifié, sa valeur doit être de + même format que pour `__delete`, mais chaque relation ainsi spécifiée sera + insérée. + +4. si les paramètres `__insert` et/ou `__delete` sont trouvés non qualifiés, + ils sont interprétés comme décrit ci-dessus (quelque soit le nombre d'entité + édité) + +5. si aucune entité n'est éditée mais que le formulaire contient les paramètres + `__linkto` et `eid`, celui-ci est interprété en prenant la valeur spécifié + par le paramètre `eid` pour désigner l'entité sur laquelle ajouter les + relations + + +A noter que : + +* si le paramètre `__action_delete` est trouvé, toutes les entités comme + spécifiées à éditer seront supprimées + +* si le paramètre `__action_cancel` est trouvé, aucune action n'est effectuée + +* si le paramètre `__action_apply` est trouvé, l'édition est effectuée + normalement mais la redirection sera effectuée sur le formulaire (cf `Contrôle + de la redirection`_) + +* le paramètre `__method` est également supporté comme sur le template principal + (XXX not very consistent, maybe __method should be dealed in the view controller) + +* si aucune entité à éditer n'est trouvée et qu'il n'y a pas de paramètre + `__action_delete`, `__action_cancel`, `__linkto`, `__delete` ou `__insert`, + une erreur est levée + +* placer dans le formulaire le paramètre `__message` permettra d'utiliser la + valeur de ce paramètre comme message d'information à l'utilisateur une fois + l'édition effectuée. + + +Contrôle de la redirection +`````````````````````````` +Une fois que l'édition s'est bien passé, reste un problème : c'est bien beau +tout ça, mais où qu'on va maintenant ?? Si rien n'est spécifié, le controlleur +se débrouille, mais comme il fait pas toujours ce qu'on voudrait, on peut +controller ça en utilisant les paramètres suivant : + +* `__redirectpath`: chemin de l'url (relatif à la racine du site, sans paramètre + de formulaire + +* `__redirectparams`: paramètres de formulaires à ajouter au chemin + +* `__redirectrql`: requête RQL de redirection + +* `__redirectvid`: identifiant de vue de redirection + +* `__errorurl`: url du formulaire original, utilisé pour la redirection en cas + d'erreur de validation pendant l'édition. Si celui-ci n'est pas spécifié, une + page d'erreur sera présentée plutot qu'un retour sur le formulaire (qui est le + cas échéant responsable d'afficher les erreurs) + +* `__form_id`: identifiant de vue du formulaire original, utilisée si + `__action_apply` est trouvé + +En général on utilise soit `__redirectpath et `__redirectparams` soit +`__redirectrql` et `__redirectvid`.