doc/devmanual_fr/chap_ui_gestion_formulaire.txt
changeset 0 b97547f5f1fa
equal deleted inserted replaced
-1:000000000000 0:b97547f5f1fa
       
     1 .. -*- coding: utf-8 -*-
       
     2 
       
     3 Gestion de formulaires
       
     4 ======================
       
     5 
       
     6 Contrôle de la génération automatique de formulaire pour les entités manipulée
       
     7 ------------------------------------------------------------------------------
       
     8 XXX FILLME
       
     9 
       
    10 * les formulaires 'edition' et 'creation'
       
    11 
       
    12 Le formulaire généré par défaut ne vous convient pas ? Vous êtes peut-être pas
       
    13 obligé de le refaire à la main ! :)
       
    14 
       
    15 * rtags primary, secondary, generated, generic,
       
    16   `Entity.relation_category(rtype, x='subject')`
       
    17 * inline_view (now a rtag?)
       
    18 * spécification widget
       
    19 
       
    20 
       
    21 Fonctionnement du contrôleur d'édition par défaut (id: 'edit')
       
    22 --------------------------------------------------------------
       
    23 
       
    24 Contrôle de l'édition
       
    25 `````````````````````
       
    26 Prérequis: les paramètres liés aux entités à éditer sont spécifiés de la forme ::
       
    27 
       
    28   <nom de champ>:<eid de l'entité>
       
    29 
       
    30 où l'eid de l'entité pourra être une lettre dans le cas d'une entité à créer. On
       
    31 dénommera ces paramètres comme *qualifié*.
       
    32 
       
    33 1. récupération des entités à éditer en cherchant les paramètres de formulaire
       
    34    commençant par 'eid:' ayant également un paramètre '__type' associé
       
    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 
       
    62 
       
    63    3. si un paramètre `__delete` qualifié est spécifié, sa valeur doit être une
       
    64       chaine (ou une liste de chaine) de la forme : ::
       
    65 
       
    66 	<subject eids>:<relation type>:<object eids>
       
    67 
       
    68       où chaque eid sujet ou objet peut-être séparé d'un autre par un '_'. Chaque
       
    69       relation ainsi spécifiée sera supprimée.
       
    70 
       
    71    4. si un paramètre `__insert` qualifié est spécifié, sa valeur doit être de
       
    72       même format que pour `__delete`, mais chaque relation ainsi spécifiée sera 
       
    73       insérée.
       
    74 
       
    75 4. si les paramètres `__insert` et/ou  `__delete` sont trouvés non qualifiés,
       
    76    ils sont interprétés comme décrit ci-dessus (quelque soit le nombre d'entité
       
    77    édité)
       
    78 
       
    79 5. si aucune entité n'est éditée mais que le formulaire contient les paramètres
       
    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 
       
    84 
       
    85 A noter que :
       
    86 
       
    87 * si le paramètre `__action_delete` est trouvé, toutes les entités comme
       
    88   spécifiées à éditer seront supprimées
       
    89 
       
    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`.