6. Les formulaires¶
Les formulaires openMairie sont une visualisation d’un objet d’une classe métier.
6.1. Introduction¶
Les formulaires permettent la consultation, l’ajout, la modification et la suppression d’enregistrements des tables de la base de données.
6.1.1. Consultation¶
La consultation d’un élément est construite de la même façon qu’un formulaire. Elle contient une liste d’actions contextuelles configurable. Les données ne sont pas éditables.
6.1.2. Ajout¶
L’ajout permet l’éditions de données. Lors de la validation, un traitement spécifique des données est effectué. Si la clé primaire de la table est automatique alors elle est générée.
6.1.3. Modification¶
L’ouverture d’un élément en modification permet l’éditions de données déjà existantes, lors de la validation du formulaire les données sont traitées, vérifiées puis envoyées dans la base.
6.1.4. Suppression¶
Accessible depuis la liste des actions contextuelles, une confirmation est demandée pour chaque suppression.
6.1.5. Accès¶
L’accès aux formulaires se fait depuis un tableau d’éléments ou depuis la consultation d’un élément via le menu contextuel.
Par défaut, depuis les tableaux, les actions d’ajout et consultation sont disponible.
6.2. Description technique¶
- La gestion des formulaires se base sur deux classes :
- formulaire : core/om_formulaire.class.php
- dbform : core/om_dbform.class.php
La classe « formulaire » permet la gestion de l’affichage et « dbform » gère le traitement des données et la liaison à la base de données.
6.2.1. scr/form.php et scr/sousform.php¶
Ces scripts sont appelés pour afficher un formulaire. Ils instancient l’objet et appellent la méthode formulaire de celui-ci.
Ces scripts prennent plusieurs paramètres :
- obj : nom de la classe pour laquelle on souhaite afficher le formulaire
- action : type d’action (ajout, modification, suppression, consultation)
- idx : identifiant (dans la base de données) de l’élément sur lequel on souhaite effectuer l’action
- retour : deux valeurs possible tab ou form selon l’origine de l’action
Le paramètre « action » peut prendre 4 valeurs :
- 0 : affiche un formulaire d’ajout, le paramètre idx n’est donc pas nécessaire.
- 1 : affiche le formulaire de modification.
- 2 : affiche le formulaire de suppression.
- 3 : affiche le formulaire de consultation.
Les autres paramètres passés permettent de conserver la configuration du tableau d’origine.
6.3. Description de la classe dbform¶
-
class
dbform
($id, &$db, $DEBUG = false)¶ Cette classe est centrale dans l’application. Elle est la classe parente de chaque objet métier. Elle comprend des méthodes de gestion (initialisation, traitement, vérification, trigger) des valeurs du formulaire. Elle fait le lien entre la base de données et le formulaire. Elle contient les actions possibles sur les objets (ajout, modification, suppression, consultation).
6.3.1. Présentation des méthodes de la classe¶
Les méthodes de dbform peuvent être surchargées dans obj/om_dbform.class.php ainsi que dans toutes les classes métier.
6.3.2. Méthodes d’initialisation de l’affichage du formulaire¶
dbform.
formulaire
($enteteTab, $validation, $maj, &$db, $postVar, $aff, $DEBUG = false, $idx, $premier = 0, $recherche = "", $tricol = "", $idz = "", $selectioncol = "", $advs_id = "", $valide = "", $retour = "", $actions = array(), $extra_parameters = array())¶Méthode d’initialisation de l’affichage de formulaire.
dbform.
sousformulaire
($enteteTab, $validation, $maj, &$db, $postVar, $premiersf, $DEBUG, $idx, $idxformulaire, $retourformulaire, $typeformulaire, $objsf, $tricolsf, $retour= "", $actions = array())¶Méthode d’initialisation de l’affichage de sous formulaire.
Ces méthodes instancient un objet « formulaire » et initialisent certains de ses attributs via les méthodes suivantes :
dbform.
setVal
(&$form, $maj, $validation, &$db, $DEBUG = false)¶Permet de définir les valeurs des champs
dbform.
setType
(&$form, $maj)¶Permet de définir le type des champs
dbform.
setLib
(&$form, $maj)¶Permet de définir le libellé des champs
dbform.
setTaille
(&$form, $maj)¶Permet de définir la taille des champs
dbform.
setMax
(&$form, $maj)¶Permet de définir le nombre de caractères maximum des champs
dbform.
setSelect
(&$form, $maj, $db, $DEBUG = false)¶Méthode qui effectue les requêtes de configuration des champs
dbform.
init_select
(&$form = null, &$db = null, $maj, $debug, $field, $sql, $sql_by_id, $om_validite = false, $multiple = false)¶Méthode qui permet la configuration des select et select multiple, elle effectue les requêtes et met en forme le tableau des valeurs à afficher. Il est possible de définir si le champ lié est affecté par une date de validité ou de configurer l’affichage de select_multiple.
dbform.
setOnchange
(&$form, $maj)¶Permet de définir l’attribut « onchange » sur chaque champ
dbform.
setOnkeyup
(&$form, $maj)¶Permet de définir l’attribut « onkeyup » sur chaque champ
dbform.
setOnclick
(&$form, $maj)¶Permet de définir l’attribut « onclick » sur chaque champ
dbform.
setGroupe
(&$form, $maj)¶Permet d’aligner plusieurs champs (obsolète depuis la version 4.3.0)
dbform.
setRegroupe
(&$form, $maj)¶Permet de regrouper les champs dans des fieldset (obsolète depuis la version 4.3.0)
dbform.
setLayout
(&$form, $maj)¶Méthode de mise en page, elle permet de gérer la hiérarchie d’ouverture et fermeture des balises div et fieldset avec les méthodes :
formulaire.
setBloc
($champ, $contenu, $libelle = '', $style = '')¶permet d’ouvrir/fermer ($contenu=D/F) une balise div sur un champ ($champ), avec un libellé ($libelle) et un attribut class ($style).
- une liste de classes css pour fieldset est disponible : “group” permet une mise en ligne des champs contenu dans le div et “col_1 à col_12” permet une mise en page simplifiée (par exemple : « col_1 » permet de définir une taille dynamique de 1/12ème de la page , col_6 correspond à 6/12 soit 50% de l’espace disponible).
- il est possible de créer et ajouter des classes css aux différents div afin d’obtenir une mise en page personnalisé.
formulaire.
setFieldset
($champ, $contenu, $libelle = '', $style = '')¶permet d’ouvrir/fermer ($contenu=D/F) un fieldset sur un champ ($champ), avec une légende ($libelle) et un attribut class ($style).
- une liste de classes css pour fieldset est disponible : “collapsible” ajoute un bouton sur la légende (jQuery) afin de refermer le fieldset et “startClosed” idem à la différence que le fieldset est fermé au chargement de la page.
exemple d’implémentation de la méthode setLayout() sans utiliser les méthodes setGroupe() et setRegroupe() :
<?php function setLayout(&$form, $maj) { //Ouverture d'un div sur une colonne de 1/2 (6/12) de la largeur du //conteneur parent $form->setBloc('om_collectivite','D',"","col_6"); //Ouverture d'un fieldset $form->setFieldset('om_collectivite','D',_('om_collectivite'), "collapsible"); //Ouverture d'un div les champs compris entre //"om_collectivite" et "actif" //la classe group permet d'afficher les champs en ligne $form->setBloc('om_collectivite','D',"","group"); //Fermeture du groupe $form->setBloc('actif','F'); //Fermeture du fieldset $form->setFieldset('actif','F',''); //Fermeture du div de 50% $form->setBloc('actif','F'); //Ouverture d'un div sur une colonne de 1/2 de la largeur du //conteneur parent $form->setBloc('orientation','D',"","col_6"); $form->setFieldset('orientation', 'D', _("Parametres generaux du document"), "startClosed"); $form->setBloc('orientation','D',"","group"); $form->setBloc('format','F'); $form->setBloc('footerfont','D',"","group"); $form->setBloc('footertaille','F'); $form->setBloc('logo','D',"","group"); $form->setBloc('logotop','F'); $form->setFieldset('logotop','F',''); $form->setBloc('logotop','F'); //Ouverture d'un div de largeur maximum sur un seul champ $form->setBloc('titre','DF',"","col_12"); //Ouverture d'un div de largeur maximum $form->setBloc('titreleft','D',"","col_12"); $form->setFieldset('titreleft','D', _("Parametres du titre du document"), "startClosed"); $form->setBloc('titreleft','D',"","group"); $form->setBloc('titrehauteur','F'); $form->setBloc('titrefont','D',"","group"); $form->setBloc('titrealign','F'); $form->setFieldset('titrealign','F',''); $form->setBloc('titrealign','F'); //Ouverture d'un div de largeur maximum sur un seul champ $form->setBloc('corps','DF',"","col_12"); //Ouverture d'un div de largeur maximum $form->setBloc('corpsleft','D',"","col_12"); $form->setFieldset('corpsleft','D', _("Parametres du corps du document"), "startClosed"); $form->setBloc('corpsleft','D',"","group"); $form->setBloc('corpshauteur','F'); $form->setBloc('corpsfont','D',"","group"); $form->setBloc('corpsalign','F'); $form->setFieldset('corpsalign','F',''); $form->setBloc('corpsalign','F'); //Ouverture d'un div de largeur maximum sur un seul champ $form->setBloc('om_sql','DF',"","col_12"); //Ouverture d'un div de 1/2 de la largeur du conteneur parent $form->setBloc('om_sousetat','D',"","col_6"); $form->setFieldset('om_sousetat','D', _("Sous etat(s) : selection"), "startClosed"); $form->setBloc('om_sousetat','D',"","group"); $form->setBloc('sousetat','F'); $form->setFieldset('sousetat','F', ''); $form->setBloc('sousetat','F'); //Ouverture d'un div de 1/2 de la largeur du conteneur parent $form->setBloc('se_font','D',"","col_6"); $form->setFieldset('se_font','D', _("Sous etat(s) : police / marges / couleur"), "startClosed"); $form->setBloc('se_font','D',"","group"); $form->setBloc('se_couleurtexte','F'); $form->setFieldset('se_couleurtexte','F',''); $form->setBloc('se_couleurtexte','F'); } ?>
6.3.3. Méthodes d’actions¶
Ces méthodes sont appelées lors de la validation du formulaire.
dbform.
ajouter
($val, &$db = NULL, $DEBUG = false)¶Cette méthode permet l’insertion de données dans la base, elle appelle toutes les méthodes de traitement, vérification et méthodes spécifiques à l’ajout.
dbform.
modifier
($val = array(), &$db = NULL, $DEBUG = false)¶Cette méthode permet la modification de données dans la base, elle appelle toutes les méthodes de traitement et vérification des données retournées par le formulaire.
dbform.
supprimer
($val = array(), &$db = NULL, $DEBUG = false)¶Cette méthode permet la suppression de données dans la base, elle appelle toutes les méthodes de traitement et vérification des données retournées par le formulaire.
6.3.4. Gestion des transactions lors de l’appel aux méthodes d’actions¶
Afin de verifier les erreurs de base de données, la méthode isError est appelée, si la valeur true lui est passée en second paramètre elle ne stop pas l’execution mais retour true ou false. Cela dans le but d’appeler ces méthodes sur des objets métier instanciés manuellement dans des contextes qui n’utilise pas la classe formulaire. Exemple : lors de la création d’un web service qui instancierait une classe, si une erreur de base de données se produit, le script s’arrête et aucun message ne peut être transmis au client du web service, ce qui ne se produit pas si le second paramètre est défini à true.
Il est important d’instancier un objet métier et d’appeler les méthodes ajouter, modifier ou supprimer pour effectuer un changement sur celui-ci car toutes les méthodes de trigger seront appelées.
6.3.5. Méthodes appelées lors de la validation¶
dbform.
setValFAjout
($val = array())¶Méthode de traitement des données retournées par le formulaire (utilisé lors de l’ajout)
dbform.
setvalF
($val = array())¶Méthode de traitement des données retournées par le formulaire
dbform.
verifier
($val = array(), &$db = NULL, $DEBUG = false)¶Méthode de vérification des données et de retour d’erreurs
dbform.
verifierAjout
($val = array(), &$db = NULL)¶Méthode de vérification des données et de retour d’erreurs (utilisé lors de l’ajout)
dbform.
setId
(&$db = NULL)¶Initialisation de la clé primaire (si clé automatique lors de l’ajout)
dbform.
cleSecondaire
($id, &$db = NULL, $val = array(), $DEBUG = false)¶Cette méthode est appelée lors de la suppression d’un objet, elle permet de vérifier si l’objet supprimé n’est pas lié à une autre table pour en empêcher la suppression.
dbform.
triggerajouter
($id, &$db = NULL, $val = array(), $DEBUG = false)¶Permet d’effectuer des actions avant l’insertion des données dans la base
dbform.
triggerajouterapres
($id, &$db = NULL, $val = array(), $DEBUG = false)¶Permet d’effectuer des actions après l’insertion des données dans la base
dbform.
triggermodifier
($id, &$db = NULL, $val = array(), $DEBUG = false)¶Permet d’effectuer des actions avant la modification des données dans la base
dbform.
triggermodifierapres
($id, &$db = NULL, $val = array(), $DEBUG = false)¶Permet d’effectuer des actions après la modification des données dans la base
dbform.
triggersupprimer
($id, &$db = NULL, $val = array(), $DEBUG = false)¶Permet d’effectuer des actions avant la modification des données dans la base
dbform.
triggersupprimerapres
($id, &$db = NULL, $val = array(), $DEBUG = false)¶Permet d’effectuer des actions après la modification des données dans la base
6.4. Description de la classe formulaire¶
-
class
formulaire
($unused = NULL, $validation, $maj, $champs = array(), $val = array(), $max = array()) Cette classe permet une gestion complète de l’affichage d’un formulaire.
Les méthodes de core/om_formulaire.class.php peuvent être surchargées dans obj/om_formulaire.class.php
6.4.1. Méthodes d’affichage de widgets¶
Les widgets sont des éléments de formulaire, ils sont composés d’un ou plusieurs champs. Chaque méthode permet d’afficher un seul widget.
formulaire.
text
()¶champ texte (format standard)
champ non visible avec valeur conservée
formulaire.
password
()¶champ password
formulaire.
textdisabled
()¶champ texte non modifiable (grisé)
formulaire.
textreadonly
()¶champ texte non modifiable
champ non modifiable, la valeur est récupéré par le formulaire.
champ numérique non modifiable et valeur récupérer
formulaire.
statiq
()¶Valeur affichée et non modifiable
formulaire.
affichepdf
()¶récupère un nom d’objet (un scan pdf)
formulaire.
checkbox
()¶case à cocher valeurs possibles :
True
ouFalse
formulaire.
checkboxstatic
()¶affiche Oui/Non, non modifiable (mode consultation)
formulaire.
checkboxnum
()¶cochée = 1 , non cochée = 0
formulaire.
http
()¶lien http avec target = _blank (affichage dans une autre fenêtre)
formulaire.
httpclick
()¶lien avec affichage dans la même fenêtre.
formulaire.
date
()¶date modifiable avec affichage de calendrier jquery
formulaire.
date2
()¶date modifiable avec affichage de calendrier jquery pour les sous-formulaires
date non modifiable Valeur récupéré par le formulaire
formulaire.
datestatic
()¶affiche la date formatée, non modifiable (mode consultation)
formulaire.
textarea
()¶affichage d un textarea
formulaire.
textareamulti
()¶textarea qui récupère plusieurs valeurs d’un select
affichage non modifiable d’un textarea et récupération de la valeur
formulaire.
pagehtml
()¶affichage d’un textarea et transforme les retours charriot en </ br>
formulaire.
select
()¶champ select
formulaire.
selectdisabled
()¶champ select non modifiable
formulaire.
selectstatic
()¶affiche la valeur de la table liée, non modifiable (mode consultation)
affiche la valeur de la table liée, non modifiable ainsi que la valeur dans un champ hidden
formulaire.
select_multiple
()¶affiche un select multiple, les valeurs passées au formulaires doivent être séparées par une virgule.
formulaire.
select_multiple_static
()¶affiche seulement les valeurs d’un select multiple, les valeurs passées au formulaires doivent être séparées par une virgule.
formulaire.
comboG
()¶permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les formulaires
formulaire.
comboG2
()¶permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les sous formulaires
formulaire.
comboD
()¶permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les formulaires
formulaire.
comboD2
()¶permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les sous formulaires
formulaire.
upload
()¶fait appel à spg/upload.php pour télécharger un fichier
formulaire.
upload2
()¶fait appel à spg/upload.php pour télécharger un fichier dans un sous formulaire
formulaire.
voir
()¶fait appel à spg/voir.php pour visualiser un fichier
formulaire.
voir2
()¶fait appel à spg/voir.php pour visualiser un fichier depuis un sous formulaire
formulaire.
localisation
()¶fait appel à spg/localisation.php
formulaire.
localisation2
()¶fait appel à spg/localisation.php
formulaire.
rvb
()¶fait appel à spg/rvb.php pour affichage de la palette couleur
formulaire.
rvb2
()¶fait appel à spg/rvb.php pour affichage de la palette couleur
formulaire.
geom
()¶ouvre une fenêtre tab_sig.php pour visualiser ou saisir une géométrie (selon l’action) la carte est définie en setSelect
Les widgets comboG, comboD, date, upload, voir et localisation sont à mettre dans les formulaires. Les contrôle comboG2, comboD2, date2, upload2, voir2 et localisation sont à mettre dans les sous formulaires.
Les widgets font appel des scripts d’aide à la saisie stockés dans le répertoire /spg, ils sont appelés par js/script.js. Ce script peut être surchargé dans app/js/script.js.
spg/combo.php
Ce programme est appelé par le champ comboD, comboG, comboD2, comboG2, le paramétrage se fait dans les fichiers :
- dyn/comboparametre.inc.php
- dyn/comboretour.inc.php
- dyn/comboaffichage.inc.php
spg/localisation.php et js/localisation.js
ce programme est liée au champ formulaire « localisation ».
spg/voir.php
Ce script est associé au champ « upload ».
Ce sous programme permet de visualiser un fichier téléchargé sur le serveur (pdf ou image).
spg/upload.php
Ce script utilise la classe core/upload.class.php (composant openMairie).
Le paramétrage des extensions téléchargeables se fait dans dyn/config.inc.php. Le paramétrage de la taille maximale des fichiers téléchargeables se fait dans la classe métier de l’objet.
spg/rvb.php et js/rvb.js
Ce script est associé au champ « rvb » et affiche une palette de couleur pour récupérer un code rvb.
6.4.2. Les méthodes de construction et d’affichage¶
Le formulaire est constitué de div, fieldset et de champs les méthodes suivantes permettent une mise en page structurée.
formulaire.
entete
()¶ouverture du conteneur du formulaire.
formulaire.
enpied
()¶fermeture du conteneur du formulaire.
formulaire.
afficher
()¶affichage des champs, appelle les méthodes suivante :
formulaire.
debutFieldset
()¶ouverture de fieldset.
formulaire.
finFieldset
()¶fermeture de fieldset
formulaire.
debutBloc
()¶ouverture de div.
formulaire.
finBloc
()¶fermeture de div.
formulaire.
afficherChamp
()¶affichage de champ.
6.4.3. Les méthodes assesseurs changent les valeurs des attributs de l’objet formulaire¶
Ces méthodes sont appelées depuis les classes métier, elles permettent la configuration du formulaire.
formulaire.
setType
()¶type de champ
formulaire.
setVal
()¶valeur du champ
formulaire.
setLib
()¶libellé du champ
formulaire.
setSelect
()¶permet de remplir les champs select avec la table liée
formulaire.
setTaille
()¶taille du champ
formulaire.
setMax
()¶nombre de caractères maximum acceptés
formulaire.
setOnchange
()¶permet de définir des actions sur l’événement « onchange »
formulaire.
setKeyup
()¶permet de définir des actions sur l’événement « onkeyup »
formulaire.
setOnclick
()¶permet de définir des actions sur l’événement « onclick »
formulaire.
setvalF
()¶permet de traiter les données avant insert/update dans la base de données
formulaire.
setGroupe
()¶(obsolète depuis 4.3.0)
formulaire.
setRegroupe
()¶(obsolète depuis 4.3.0)
formulaire.
setBloc
($champ, $contenu, $libelle = '', $style = '')¶permet d’ouvrir/fermer ($contenu=D/F/DF) une balise div sur un champ ($champ), avec un libellé ($libelle) et un attribut class ($style).
formulaire.
setFieldset
($champ, $contenu, $libelle = '', $style = '')permet d’ouvrir/fermer ($contenu=D/F/DF) un fieldset sur un champ ($champ), avec une légende ($libelle) et un attribut class ($style).