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.

../_images/mode_consult_context.png

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.

../_images/mode_modif.png

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)

formulaire.hidden()

champ non visible avec valeur conservée

formulaire.password()

champ password

formulaire.textdisabled()

champ texte non modifiable (grisé)

formulaire.textreadonly()

champ texte non modifiable

formulaire.hiddenstatic()

champ non modifiable, la valeur est récupéré par le formulaire.

formulaire.hiddenstaticnum()

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 ou False

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

formulaire.hiddenstaticdate()

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

formulaire.textareahiddenstatic()

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)

formulaire.selecthiddenstatic()

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).