Le système generic-form est le moteur de formulaires d'ISI-APP. Il permet d'afficher, créer, modifier et supprimer n'importe quelle entité applicative via une URL unifiée, avec un mécanisme de personnalisation par module (hooks) sans toucher au code commun.
Toutes les pages de formulaire passent par la route mod :
/mod/{moduleId}/{action}/{id}
| Action | Description |
|---|---|
create |
Formulaire de création |
update |
Formulaire de modification |
delete |
Archivage de la donnée |
see |
Fiche de visualisation (lecture seule) |
home |
Liste principale du module |
Exemples :
/mod/{modidelement}/update/42 — modifier l'entité #42/mod/{modidelement}/create — créer une nouvelle entité/mod/{modidelement}/see/42 — consulter la fiche de l'entité #42Pour chaque module enregistré dans l'application, le système prend en charge :
?dm@=modal dans l'URL.Dans le paramétrage d'un champ (bouton « Paramétrage du champ »), l'option « Formatage de donnée » permet de nettoyer/forcer automatiquement la saisie de l'utilisateur. C'est un champ libre : on y saisit l'un des codes ci-dessous (un seul code par champ).
| Code | Effet sur la saisie |
|---|---|
MAJ |
Tout en MAJUSCULES |
FORNAME |
1ʳᵉ lettre de chaque mot en majuscule (prénoms, ex. « Jean-Pierre ») |
MIN |
Tout en minuscules |
SIR |
Format SIRET : ne garde que les chiffres, limité à 14 |
TEL |
Format téléphone : ne garde que les chiffres et le « + » |
Exemple : pour qu'un champ se comporte comme un SIRET, saisir
SIRdans « Formatage de donnée » ; pour un numéro de téléphone, saisirTEL. Le nettoyage est identique à celui des formulaires dynamiques.
┌────────────────────────────────────────────────────────────┐
│ Alertes / Callouts (si conditions métier non remplies) │
├────────────────────────────────────────────────────────────┤
│ Navigation pills / onglets │
├──────────────────────────┬─────────────────────────────────┤
│ SIDEBAR │ FORMULAIRE PRINCIPAL │
│ • Actions métier │ • Champs de saisie │
│ • Archive / Restaurer │ • Informations complémentaires │
│ • Historique activité │ │
├──────────────────────────┴─────────────────────────────────┤
│ Onglets secondaires (RH, Tickets, Matériels, Droits…) │
└────────────────────────────────────────────────────────────┘
Chaque module peut personnaliser le comportement du système via des fichiers de hook, nommés d'après les 6 premiers chiffres de l'ID du module (le {modid}).
Ces fichiers PHP se trouvent dans /hook/ et sont exécutés automatiquement par le moteur :
| Fichier | Quand | Ce qu'il permet |
|---|---|---|
{modid}.ctlbefore.php |
Avant tout traitement | Redirections, vérifications d'accès supplémentaires |
{modid}.form.php |
Lors de la génération du formulaire | Masquer/afficher des champs selon le contexte, valider des règles métier, injecter des valeurs |
{modid}.db_after.php |
Après l'écriture en base | Déclencher des actions en cascade (mise à jour d'autres tables, invalidation de cache) |
Exemple : Pour un module donné, le hook form.php peut masquer automatiquement des champs selon le contexte (ex : champs médicaux masqués pour les structures non-santé).
Des vues Blade spécifiques peuvent être placées dans resources/views/hook/custom/ pour enrichir l'interface :
| Vue | Ce qu'elle permet |
|---|---|
alerts/{modid}.blade.php |
Afficher des alertes métier (ex: utilisateur sans profil) |
stats/{modid}stats.blade.php |
Compteurs statistiques (tickets, matériels, projets…) |
sidebar-header/{modid}.blade.php |
En-tête de la sidebar, au-dessus des actions (ex: photo de profil, boutons email/téléphone) |
ctl/{modid}ctl.blade.php |
Boutons d'actions dans la sidebar (ex: réinitialiser le mot de passe) |
wire/form/{modid}wire.blade.php |
Formulaire Livewire entièrement personnalisé |
addons-header/{modid}add.blade.php |
Contenu additionnel avant le formulaire (ex: callout de relation mère/fille) |
tabcontent/{modid}/{tabId}.blade.php |
Contenu des onglets secondaires |
addons/{modid}add.blade.php |
Contenu additionnel après le formulaire (ex: liste de sous-entités liées) |
dm)Le paramètre dm@ dans l'URL contrôle comment le formulaire s'affiche :
| Valeur | Comportement |
|---|---|
classic (défaut) |
Page complète avec layout principal |
modal |
Formulaire dans une modale (popup) |
overlay |
Formulaire en panneau latéral |
ajax |
Réponse HTML partielle pour injection AJAX |
Un hook peut bloquer l'écriture en base en positionnant $this->return['result'] = false et en créant une alerte via createAlert(). L'alerte est alors affichée au-dessus du formulaire.
Exemples de blocages existants :
see)L'action see affiche une fiche de consultation en lecture seule, distincte du formulaire de modification. Chaque module dispose d'une vue dédiée dans resources/views/see/{modidelement}.blade.php.
La fiche affiche par exemple : coordonnées, rôles projet, matériels rattachés, tickets ouverts, fonctions RH.
Les modules principaux (modidel = 01) peuvent avoir des sous-modules (onglets). Ces onglets sont générés automatiquement à partir de la configuration du module et affichés sous forme de pills de navigation.
Exemple pour un module principal :
Chaque onglet peut avoir une vue custom dans hook/custom/tabcontent/{modid}/.
Pour qu'un module soit complet dans le système generic-form, il faut :
_mod et _mod_element.hook/{modid}view.blade.php — point d'entrée Blade du module.hook/{modid}.form.php — logique de personnalisation du formulaire.hook/custom/wire/form/{modid}wire.blade.php — formulaire Livewire avec champs configurés.hook/custom/ctl/{modid}ctl.blade.php — actions métier dans la sidebar (optionnel).hook/custom/alerts/{modid}.blade.php — alertes contextuelles (optionnel).hook/{modid}.db_after.php — side-effects post-écriture (optionnel).