doc/book/en/B060-form-management.en.txt
changeset 191 9cc98b7cf413
parent 127 ae611743f5c6
child 192 46b24614282c
equal deleted inserted replaced
190:1cca2d1aaaa3 191:9cc98b7cf413
     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`.