7. Les formulaires

7.1. Introduction

Les formulaires openMairie sont une visualisation d’un objet d’une classe métier. Les formulaires permettent la consultation, l’ajout, la modification et la suppression d’enregistrements des tables de la base de données.

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

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

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

7.1.4. Suppression

Accessible depuis la liste des actions contextuelles, une confirmation est demandée pour chaque suppression.

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

7.2. Les éléments form et sousform

Ces scripts sont appelés pour afficher un formulaire. Ils instancient l’objet et appellent la méthode formulaire de celui-ci.

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.

7.2.1. form

URL : "".OM_ROUTE_FORM."" ou "../app/index.php?module=form"

application::view_form()

Paramètres :

Paramètre Requis ? Description
obj O Nom de l’objet à afficher
idx N Identifiant dans la base de données de l’élément sur lequel on souhaite effectuer l’action
action N type d’action (ajout, modification, suppression, consultation)
ids N  
validation N Flag de validation du formulaire
idz N  
retour N deux valeurs possible tab ou form selon l’origine de l’action
direct_form N  
direct_idx N  
direct_action N  
premier N Premier enregistrement a afficher
recherche N Chaine recherchee (recherche simple)
tricol N Colonne choisie pour le tri (+/-)
valide N Valilite des objets a afficher (true/false)
selectioncol N Colonne choisie pour la recherche (recherche simple)
advs_id N Id unique de la recherche avancée
retourformulaire N Objet métier du contexte
idxformulaire N Identifiant de l’objet métier du contexte
contentonly N  
snippet N  
direct_link N  

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.

7.2.2. sousform

URL : "".OM_ROUTE_SOUSFORM."" ou "../app/index.php?module=sousform"

application::view_sousformform()

Paramètres :

Paramètre Requis ? Description
obj O Nom de l’objet à afficher
idx N  
action N  
ids N  
validation N Flag de validation du formulaire
retour N  
retourformulaire N Objet métier du contexte
idxformulaire N Identifiant de l’objet métier du contexte
contentonly N  
premiersf N Premier enregistrement à afficher sur le tableau de la page précédente
recherche N Chaine recherchée sur le tableau de la page précédente
trisf N Colonne choisie pour le tri sur le tableau de la page précédente
valide N Validité des objets à afficher sur le tableau de lapage précédente

7.3. Configuration via le script sql/pgsql/<OBJ>.inc.php

7.3.1. $ent

Titre (fil d’ariane) de la page.

<?php
$ent = _("administration")." -> "._("om_parametre");
?>

Ces variables peuvent être accessibles par les classes métier qui peuvent modifier le fil d’ariane depuis un formulaire ou un sous formulaire

function getFormTitle($ent) {
     return $ent;
 }

 function getSubFormTitle($subEnt) {
     return $subEnt;
 }

7.3.2. $sousformulaire

Liste des onglets (autre que le principal).

<?php
$sousformulaire = array(
    "consultation",
    "instruction",
);
?>

7.3.3. $sousformulaire_parameters

Configuration spécifique des onglets (autre que le principal).

<?php
$sousformulaire_parameters = array(
     "consultation" => array(
         "title" => _("CAP(s)"),
         "href" => OM_ROUTE_SOUSFORM."&obj=consultation_specific&action=12&idx=0",
     ),
     "instruction" => array(
         "title" => _("Unité(s) orga.")
     ),
);
?>

7.4. Configuration via le script sql/pgsql/<OBJ>.form.inc.php

7.4.1. $form_title

Titre de l’onglet principal du formulaire.

<?php
$form_title = "Organigramme";
?>

7.5. Les fonctions

7.5.1. La fonction verrou

Note

Cette description correspond au fonctionnement du verrou depuis la version 4.5.0.

La fonction verrou a pour objectif d’empêcher la double soumission de formulaire côté serveur. Elle est active dans les VIEW formulaire() et sousformulaire(). A chaque affichage de formulaire, lorsqu’un bouton est affiché alors on insère un champ caché (input de type hidden) qui contient comme valeur un identifiant généré et supposé unique, puis on stocke cet identifiant dans une liste dédiée dans la variable de session de l’utilisateur connecté. Lors de la soumission du formulaire, on vérifie que la valeur de l’identifiant postée avec le formulaire est bien présente dans la liste dédiée dans la variable de session, si c’est le cas on enlève la valeur de cette liste et on exécute le traitement. Si ce n’est pas le cas, cela signifie que le formulaire a déjà été soumis au préalable donc on affiche une erreur à l’utilisateur.

Les trois méthodes de l’ancienne implémentation verrouille(), deverouille() et testverrou() ont été vidées et conservées pour la réto-compatibilité des applications. Tous les appels à ces méthodes ont été supprimés du framework. Ces méthodes sont vides dans la version 4.5.0 et seront supprimées dans la 4.6.0.

7.6. Actions du menu contextuel de la consultation

Dans dyn/config.inc.php :

<?php
/**
 * Parametre de gestion des nouvelles actions
 * Permet de definir si la gestion des actions se fait dans la classe ou non.
 * Si on decide d'utiliser les nouvelles actions alors il n'y à pas de
 * retro-compatibilité, les actions supplémentaires de portlet initialement
 * déclarées dans sql/pgsql/*.inc.php ne fonctionneront plus et devront
 * être initialisées dans les attributs de la classe ciblée.
 * Default : $config['activate_class_action'] = true;
 */
$config['activate_class_action'] = true;
?>

7.6.1. Définition des actions dans les attributs de la classe de l’objet

La configuration se fait dans les attributs des classes (obj/*.class.php).

L’ajout d’une action se présente de cette façon :

<?php
function init_class_actions() {
    // On récupère les actions génériques définies dans la méthode
    // d'initialisation de la classe parente
    parent::init_class_actions();

    // ACTION - 002 - supprimer
    //
    $this->class_actions[2] = array(
        "portlet" => array(
            "libelle" => "supprimer",
            "class" => "delete-16",
            "order" => 20,
            "description" => _("Accéder au formulaire de suppression de l'enregistrement"),
        ),
        "method" => "supprimer",
        "button" => "supprimer",
        "permission_suffix" => "supprimer",
        "condition" => "delete_coll_condition"
    );
}
?>

La clé du tableau correspond à la valeur $maj, le paramètre « method » correspond à la méthode appelée lors de la validation du formulaire, « button » est le texte du bouton de validation, « permission_suffix » est le suffixe du droit qui sera testé lors de l’affichage de l’action, « condition » permet de définir une méthode qui sera appelée avant l’affichage de l’action dans le portlet, si cette méthode retourne « true » l’action sera affichée.

Si la clé « portlet » est définie l’action correspondante sera affichée (sous condition), la clé « libelle » est le texte affiché sur le lien, la classe définie dans « class » sera ajoutée à celles du lien, « order » permet de définir l’ordre, la clé « url » peu être utilisé pour définir une url spécifique.

Les action de classes permettent de surcharger les actions ajouter, modifier, consulter et supprimer définies dans core/om_db_form.class.php.

L’action qui porte le numéro 999 est réservée à la recherche avancée.

7.6.2. CRUD

Les formulaires de base sont facilement reproductibles : il existe un mode pour chaque action : Create, Read, Update et Delete.

En définissant le paramètre « crud » adéquat, vous aurez automatiquement la vue et sa méthode de traitement sans développement supplémentaire.

Ainsi cette action « ajouter_bis » est une copie fonctionnelle et suffisante de l’action ajouter :

<?php
// ACTION - 004 - ajouter_bis
//
$this->class_actions[4] = array(
    "identifier" => "ajouter_bis",
    "permission_suffix" => "ajouter",
    "crud" => "create",
);
?>

7.6.3. Définition des actions dans *.form.inc.php (obsolète)

Dans dyn/config.inc.php :

<?php
/**
 * Parametre de gestion des nouvelles actions
 * Permet de definir si la gestion des actions se fait dans la classe ou non.
 * Si on decide d'utiliser les nouvelles actions alors il n'y à pas de
 * retro-compatibilité, les actions supplémentaires de portlet initialement
 * déclarées dans sql/pgsql/*.inc.php ne fonctionneront plus et devront
 * être initialisées dans les attributs de la classe ciblée.
 * Default : $config['activate_class_action'] = true;
 */
$config['activate_class_action'] = false;
?>

La configuration des actions du menu contextuel des formulaires en consultation se fait via les scripts sql/sgbd/objet.form.inc.php

Dans ces scripts, peuvent être surchargés, la liste des champs (ordre ou champs affichés), requêtes sql permettant de remplir les widget de formulaires ainsi que les actions du menu contextuel.

L’ajout d’une action se présente de cette façon :

<?php
$portlet_actions['edition'] = array(
    'lien' => '../pdf/pdflettretype.php?obj=om_utilisateur&amp;idx=',
    'id' => '',
    'lib' => '<span class="om-prev-icon om-icon-16 om-icon-fix pdf-16">'._('Edition').'</span>',
    'ajax' => false,
    'ordre' => 21,
    'description' => _("Télécharger le courrier de l'utilisateur au format PDF"),
);
?>

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

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

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

Permet de définir les valeurs des champs en contexte formulaire

dbform.setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire)

Permet de définir les valeurs des champs en contexte sous-formulaire

dbform.set_form_default_values(&$form, $maj, $validation)

Permet de définir les valeurs des champs en contextes formulaire et sous-formulaire

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');
    }
    ?>
    

7.7.3. Méthodes d’actions (TREATMENT)

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.

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

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

7.7.6. Méthodes permettant d’afficher des informations spécifiques.

Ces méthodes fournissent des points d’entrée dans les formulaires et les sous formulaires (voir opencourrier : liaison de courrier dans obj/courrier.class.php)

formSpecificContent($maj)

Cette méthode à surcharger permet d’afficher des informations spécifiques en fin de formulaire.

sousFormSpecificContent($maj)

Cette méthode à surcharger permet d’afficher des informations spécifiques en fin de sous formulaire.

afterFormSpecificContent()

Cette méthode à surcharger permet d’afficher des informations spécifiques après le formulaire.

afterSousFormSpecificContent() { }

Cette méthode à surcharger permet d’afficher des informations spécifiques après le sous formulaire.

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

7.8.1. Le widget de formulaire

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

autocomplete

<?php
...
$form->setType("monchamp", "autocomplete");
$config_autocomplete = array(
    // Surcharge visée pour l'ajout
    "obj" => "om_sig_extent",
    // Table de l'objet
    "table" => "om_sig_extent",
    // Permission d'ajouter : doit toujours être positionné à false
    "droit_ajout" => false,
    // Critères de recherche
    "criteres" => array(
        "om_sig_extent.nom" => _("nom")
    ),
    // Tables liées
    "jointures" => array(),
    // Colonnes ID et libellé du champ
    // (si plusieurs pour le libellé alors une concaténation est faite)
    "identifiant" => "om_sig_extent.om_sig_extent",
    "libelle" => array(
        "om_sig_extent.nom"
    ),
);
$form->setSelect("monchamp", $config_autocomplete);
...
?>
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 au snippet de formulaire snippet__upload() pour télécharger un fichier

formulaire.upload2()

fait appel au snippet de formulaire snippet__upload() pour télécharger un fichier dans un sous formulaire

formulaire.voir()

fait appel au snippet de formulaire snippet__voir() pour visualiser un fichier

formulaire.voir2()

fait appel au snippet de formulaire snippet__voir() pour visualiser un fichier depuis un sous formulaire

formulaire.localisation()

fait appel au snippet de formulaire snippet__localisation()

formulaire.localisation2()

fait appel au snippet de formulaire snippet__localisation()

formulaire.rvb()

affichage de la palette couleur

formulaire.rvb2()

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.

7.8.2. Le snippet de formulaire

Les widgets de formulaire font appel à des scripts d’aide à la saisie que l’on appelle snippet, ils ont vocation a être appelé directement via une URL ou depuis du code javascript.

<?php
...
$href = OM_ROUTE_FORM."&snippet=file&obj=om_logo&champ=fichier&id=1";
...
?>

La méthode formulaire::view_snippet() est le point d’entrée unique pour le rendu des snippets :

formulaire.view_snippet()

La méthode du snippet rendu correspond à la valeur du paramètre snippet passé dans l’URL préfixée par snippet__.

Les snippets disponibles sont :

formulaire.snippet__autocomplete()

URL : "".OM_ROUTE_FORM."&snippet=autocomplete" ou "../app/index.php?module=form&snippet=autocomplete"

formulaire.snippet__combo()

URL : "".OM_ROUTE_FORM."&snippet=combo" ou "../app/index.php?module=form&snippet=combo"

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
formulaire.snippet__file()

URL : "".OM_ROUTE_FORM."&snippet=file" ou "../app/index.php?module=form&snippet=file"

formulaire.snippet__localisation()

URL : "".OM_ROUTE_FORM."&snippet=localisation" ou "../app/index.php?module=form&snippet=localisation"

ce programme est liée au champ formulaire « localisation ».

formulaire.snippet__upload()

URL : "".OM_ROUTE_FORM."&snippet=upload" ou "../app/index.php?module=form&snippet=upload"

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.

formulaire.snippet__voir()

URL : "".OM_ROUTE_FORM."&snippet=voir" ou "../app/index.php?module=form&snippet=voir"

Ce script est associé au champ « upload ».

Ce sous programme permet de visualiser un fichier téléchargé sur le serveur (pdf ou image).

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

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

7.9. Custom de l’application

Il est possible d’ajouter des scripts personnalisés pour les scripts reqmo et import ainsi que pour les classes métier.

Ces scripts peuvent être stockés en dehors de l’application pour des besoins spécifiques qui n’entrent pas dans le champs fonctionnel de base.

Le répertoire ou doit être les scripts est à paramétrer dans dyn/include.inc

// CUSTOM reqmo - pdf - import
define("PATH_CUSTOM", getcwd()."/../custom/");

Il faut ensuite indiquer quels sont les scripts qui surchargent les scripts métiers de l’application dans le fichier dyn/custom.inc.php

$custom=array();
$custom['tab']['om_utilisateur'] = '../custom/sql/pgsql/om_utilisateur.inc.php';
$custom['soustab']['om_utilisateur'] = '../custom/sql/pgsql/om_utilisateur.inc.php';
$custom['form']['om_utilisateur'] = '../custom/sql/pgsql/om_utilisateur.form.inc.php';
$custom['obj']['om_utilisateur'] = '../custom/obj/om_utilisateur.class.php';

Enfin il faut créer les surcharges

// exemple dans ../custom/sql/pgsql/om_utilisateur.inc.php
include "../sql/pgsql/om_utilisateur.inc.php";
$champAffiche = array(
   'om_utilisateur.om_utilisateur as "'._("om_utilisateur").'"',
   'om_utilisateur.nom as "'._("nom").'"',
   );

// exemple dans ../custom/obj/om_utilisateur.class.php
require_once "../obj/om_utilisateur.class.php";

class om_utilisateur_custom extends om_utilisateur {

    function om_utilisateur_custom($id,&$db,$debug) {
        $this->constructeur($id,$db,$debug);
    }// fin constructeur


    function setType(&$form,$maj) {
        parent::setType($form, $maj);
        if($maj==1)
            $form->setType("pwd", "hiddenstatic");
    }

    function setLib(&$form,$maj) {
        parent::setLib($form, $maj);
        $form->setLib("nom", "nom dans la classe surchargee");
    }

 }

Pour les reqmo et les imports, il n’est pas besoin de paramètrer dyn/custom.inc.php car le framework les récupèrent automatiquement.

Note

Attention, la surcharge du custom ne fonctionne que pour la classe cible et non celles qui eventuellement surcharge dans l application la classe cible.

7.10. Les composants

Les composants du framework qui gèrent les formulaires sont :

  • OM_ROUTE_FORM
  • OM_ROUTE_SOUSFORM
  • application::view_form()
  • application::view_sousform()
  • application::get_inst__om_formulaire()
  • core/om_formulaire.class.php
  • core/om_dbform.class.php