1 .. -*- coding: utf-8 -*- |
1 .. -*- coding: utf-8 -*- |
2 |
2 |
3 Gestion de formulaires |
3 Forms handling |
4 ====================== |
4 ============== |
5 |
5 |
6 Contrôle de la génération automatique de formulaire pour les entités manipulée |
6 Automatically generated forms management for handled entities |
7 ------------------------------------------------------------------------------ |
7 ------------------------------------------------------------- |
|
8 |
8 XXX FILLME |
9 XXX FILLME |
9 |
10 |
10 * les formulaires 'edition' et 'creation' |
11 * forms ``edition`` and ``creation`` |
11 |
12 |
12 Le formulaire généré par défaut ne vous convient pas ? Vous êtes peut-être pas |
13 The form generated by default does not fit your needs? You are not |
13 obligé de le refaire à la main ! :) |
14 required to re-do all by hands! :) |
14 |
15 |
15 * rtags primary, secondary, generated, generic, |
16 * rtags primary, secondary, generated, generic, |
16 `Entity.relation_category(rtype, x='subject')` |
17 `Entity.relation_category(rtype, x='subject')` |
17 * inline_view (now a rtag?) |
18 * inline_view (now a rtag?) |
18 * spécification widget |
19 * widget specification |
|
20 |
|
21 Editing controller behavior by default (id: `edit`) |
|
22 --------------------------------------------------- |
|
23 |
|
24 Editing control |
|
25 ``````````````` |
|
26 |
|
27 Re-requisites: the parameters related to entities to edit are |
|
28 specified as follows :: |
|
29 |
|
30 <field name>:<entity eid> |
|
31 |
|
32 where entity eid could be a letter in case of an entity to create. We |
|
33 name those parameters as *qualified*. |
|
34 |
|
35 1. Retrieval of entities to edit by looking for the forms parameters |
|
36 starting by `eid:` and also having a parameter `__type` associated |
|
37 (also *qualified* by eid) |
|
38 |
|
39 2. For all the attributes and the relations of an entity to edit: |
|
40 |
|
41 1. search for a parameter `edits-<relation name>` or `edito-<relation name>` |
|
42 qualified in the case of a relation where the entity is object |
|
43 2. if found, the value returned is considered as the initial value |
|
44 for this relaiton and we then look for the new value(s) in the parameter |
|
45 <relation name> (qualified) |
|
46 3. if the value returned is different from the initial value, an database update |
|
47 request is done |
|
48 |
|
49 3. For each entity to edit: |
|
50 |
|
51 1. if a qualified parameter `__linkto` is specified, its value has to be |
|
52 a string (or a list of string) such as: :: |
|
53 |
|
54 <relation type>:<eids>:<target> |
|
55 |
|
56 where <target> is either `subject` or `object` and each eid could be |
|
57 separated from the others by a `_`. Target specifies if the *edited entity* |
|
58 is subject or object of the relation and each relation specified will |
|
59 be inserted. |
|
60 |
|
61 2. if a qualified parameter `__clone_eid` is specified for an entity, the |
|
62 relations of the specified entity passed as value of this parameter are |
|
63 copied on the edited entity. |
|
64 |
|
65 3. if a qualified parameter `__delete` is specified, its value must be |
|
66 a string or a list of string such as follows: :: |
|
67 |
|
68 <ssubjects eids>:<relation type>:<objects eids> |
|
69 |
|
70 where each eid subject or object can be seperated from the other |
|
71 by `_`. Each relation specified will be deleted. |
|
72 |
|
73 4. if a qualified parameter `__insert` is specified, its value should |
|
74 follow the same pattern as `__delete`, but each relation specified is |
|
75 inserted. |
|
76 |
|
77 4. If the parameters `__insert` and/or `__delete` are found not qualified, |
|
78 they are interpreted as explained above (independantly from the number |
|
79 of entities edited). |
|
80 |
|
81 5. If no entity is edited but the form contains the parameters `__linkto` |
|
82 and `eid`, this one is interpreted by using the value specified for `eid` |
|
83 to designate the entity on which to add the relations. |
19 |
84 |
20 |
85 |
21 Fonctionnement du contrôleur d'édition par défaut (id: 'edit') |
86 .. note:: |
22 -------------------------------------------------------------- |
87 |
|
88 * If the parameter `__action_delete` is found, all the entities specified |
|
89 as to be edited will be deleted. |
|
90 |
|
91 * If the parameter`__action_cancel` is found, no action is completed. |
23 |
92 |
24 Contrôle de l'édition |
93 * If the parameter `__action_apply` is found, the editing is applied |
25 ````````````````````` |
94 normally but the redirection is done on the form |
26 Prérequis: les paramètres liés aux entités à éditer sont spécifiés de la forme :: |
95 (see :ref:`RedirectionControl`). |
27 |
96 |
28 <nom de champ>:<eid de l'entité> |
97 * The parameter `__method` is also supported as for the main template |
|
98 (XXX not very consistent, maybe __method should be dealed in the view |
|
99 controller). |
29 |
100 |
30 où l'eid de l'entité pourra être une lettre dans le cas d'une entité à créer. On |
101 * If no entity is found to be edited and if there is no parameter |
31 dénommera ces paramètres comme *qualifié*. |
102 `__action_delete`, `__action_cancel`, `__linkto`, `__delete` or |
|
103 `__insert`, an error is raised. |
32 |
104 |
33 1. récupération des entités à éditer en cherchant les paramètres de formulaire |
105 * Using the parameter `__message` in the form will allow to use its value |
34 commençant par 'eid:' ayant également un paramètre '__type' associé |
106 as a message to provide the user once the editing is completed. |
35 (également *qualifié* par l'eid évidemment) |
|
36 |
|
37 2. pour tous les attributs et relations de chaque entité à éditer |
|
38 |
|
39 1. recherche d'un paramètre 'edits-<nom relation>' ou 'edito-<nom relation>' |
|
40 qualifié dans le cas d'une relation dont l'entité est objet |
|
41 2. si trouvé, la valeur récupérée est considérée comme la valeur originale |
|
42 pour cette relation, et on cherche la (ou les) nouvelle(s) valeur(s) dans |
|
43 le paramètre <nom relation> (qualifié) |
|
44 3. si la valeur est différente de l'originale, une requête de modification en |
|
45 base est effectuée |
|
46 |
|
47 3. pour chaque entité à éditer |
|
48 |
|
49 1. si un paramètre `__linkto` qualifié est spécifié, sa valeur doit être une |
|
50 chaine (ou une liste de chaine) de la forme : :: |
|
51 |
|
52 <relation type>:<eids>:<target> |
|
53 |
|
54 où <target> vaut 'subject' ou 'object' et chaque eid peut-être séparé d'un |
|
55 autre par un '_'. Target spécifie *l'entité éditée* est sujet ou objet de la |
|
56 relation et chaque relation ainsi spécifiée sera insérée. |
|
57 |
|
58 2. si un paramètre `__cloned_eid` qualifié est spécifié pour une entité, les |
|
59 relations de l'entité spécifiée en valeur de cette argument sont copiées sur |
|
60 l'entité éditée |
|
61 |
107 |
62 |
108 |
63 3. si un paramètre `__delete` qualifié est spécifié, sa valeur doit être une |
109 Redirection control |
64 chaine (ou une liste de chaine) de la forme : :: |
110 ``````````````````` |
|
111 .. RedirectionControl:: |
65 |
112 |
66 <subject eids>:<relation type>:<object eids> |
113 Once editing is completed, there is still an issue left: where should we go |
|
114 now? If nothing is specified, the controller will do his job but it does not |
|
115 mean we will be happy with the result. We can control that by using the |
|
116 following parameters: |
67 |
117 |
68 où chaque eid sujet ou objet peut-être séparé d'un autre par un '_'. Chaque |
118 * `__redirectpath`: path of the URL (relative to the root URL of the site, |
69 relation ainsi spécifiée sera supprimée. |
119 no form parameters |
70 |
120 |
71 4. si un paramètre `__insert` qualifié est spécifié, sa valeur doit être de |
121 * `__redirectparams`: forms parameters to add to the path |
72 même format que pour `__delete`, mais chaque relation ainsi spécifiée sera |
|
73 insérée. |
|
74 |
122 |
75 4. si les paramètres `__insert` et/ou `__delete` sont trouvés non qualifiés, |
123 * `__redirectrql`: redirection RQL request |
76 ils sont interprétés comme décrit ci-dessus (quelque soit le nombre d'entité |
|
77 édité) |
|
78 |
124 |
79 5. si aucune entité n'est éditée mais que le formulaire contient les paramètres |
125 * `__redirectvid`: redirection view identifier |
80 `__linkto` et `eid`, celui-ci est interprété en prenant la valeur spécifié |
|
81 par le paramètre `eid` pour désigner l'entité sur laquelle ajouter les |
|
82 relations |
|
83 |
126 |
|
127 * `__errorurl`: initial form URL, used for redirecting in case a validation |
|
128 error is raised during editing. If this one is not specified, an error page |
|
129 is displayed instead of going back to the form (which is, if necessarry, |
|
130 responsible for displaying the errors) |
84 |
131 |
85 A noter que : |
132 * `__form_id`: initial view form identifier, used if `__action_apply` is |
|
133 found |
86 |
134 |
87 * si le paramètre `__action_delete` est trouvé, toutes les entités comme |
135 In general we use either `__redirectpath` and `__redirectparams` or |
88 spécifiées à éditer seront supprimées |
136 `__redirectrql` and `__redirectvid`. |
89 |
137 |
90 * si le paramètre `__action_cancel` est trouvé, aucune action n'est effectuée |
|
91 |
|
92 * si le paramètre `__action_apply` est trouvé, l'édition est effectuée |
|
93 normalement mais la redirection sera effectuée sur le formulaire (cf `Contrôle |
|
94 de la redirection`_) |
|
95 |
|
96 * le paramètre `__method` est également supporté comme sur le template principal |
|
97 (XXX not very consistent, maybe __method should be dealed in the view controller) |
|
98 |
|
99 * si aucune entité à éditer n'est trouvée et qu'il n'y a pas de paramètre |
|
100 `__action_delete`, `__action_cancel`, `__linkto`, `__delete` ou `__insert`, |
|
101 une erreur est levée |
|
102 |
|
103 * placer dans le formulaire le paramètre `__message` permettra d'utiliser la |
|
104 valeur de ce paramètre comme message d'information à l'utilisateur une fois |
|
105 l'édition effectuée. |
|
106 |
|
107 |
|
108 Contrôle de la redirection |
|
109 `````````````````````````` |
|
110 Une fois que l'édition s'est bien passé, reste un problème : c'est bien beau |
|
111 tout ça, mais où qu'on va maintenant ?? Si rien n'est spécifié, le controlleur |
|
112 se débrouille, mais comme il fait pas toujours ce qu'on voudrait, on peut |
|
113 controller ça en utilisant les paramètres suivant : |
|
114 |
|
115 * `__redirectpath`: chemin de l'url (relatif à la racine du site, sans paramètre |
|
116 de formulaire |
|
117 |
|
118 * `__redirectparams`: paramètres de formulaires à ajouter au chemin |
|
119 |
|
120 * `__redirectrql`: requête RQL de redirection |
|
121 |
|
122 * `__redirectvid`: identifiant de vue de redirection |
|
123 |
|
124 * `__errorurl`: url du formulaire original, utilisé pour la redirection en cas |
|
125 d'erreur de validation pendant l'édition. Si celui-ci n'est pas spécifié, une |
|
126 page d'erreur sera présentée plutot qu'un retour sur le formulaire (qui est le |
|
127 cas échéant responsable d'afficher les erreurs) |
|
128 |
|
129 * `__form_id`: identifiant de vue du formulaire original, utilisée si |
|
130 `__action_apply` est trouvé |
|
131 |
|
132 En général on utilise soit `__redirectpath et `__redirectparams` soit |
|
133 `__redirectrql` et `__redirectvid`. |
|