[openmairie-framework-Commits] r4947 - in openmairie_exemple/branches/om5_rad: . app data/pgsql gen/obj gen/sql/pgsql obj sql/pgsql

0 views
Skip to first unread message

fray...@users.adullact.net

unread,
Apr 30, 2024, 5:34:34 PMApr 30
to openmairie...@googlegroups.com
Author: fraynaud
Date: 2024-04-30 23:34:31 +0200 (Tue, 30 Apr 2024)
New Revision: 4947

Added:
openmairie_exemple/branches/om5_rad/gen/obj/om_proc.class.php
openmairie_exemple/branches/om5_rad/gen/obj/om_triggers.class.php
openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_proc.inc.php
openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_triggers.inc.php
Modified:
openmairie_exemple/branches/om5_rad/HISTORY.txt
openmairie_exemple/branches/om5_rad/TODO.txt
openmairie_exemple/branches/om5_rad/app/framework_openmairie.class.php
openmairie_exemple/branches/om5_rad/data/pgsql/init_gen.sql
openmairie_exemple/branches/om5_rad/data/pgsql/init_gen_plus.sql
openmairie_exemple/branches/om5_rad/data/pgsql/init_temp.sql
openmairie_exemple/branches/om5_rad/gen/obj/om_forms.class.php
openmairie_exemple/branches/om5_rad/gen/obj/om_tables.class.php
openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_forms.inc.php
openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_tables.inc.php
openmairie_exemple/branches/om5_rad/obj/om_forms.class.php
openmairie_exemple/branches/om5_rad/sql/pgsql/om_tables.inc.php
Log:
* Evolution : composition om_forms : le champs hidden reste affichable et deplacable, il n est plus en mode texte
(le champs hidden est static en consultation et hidden en mise a jour) 30/04/2024
* Evolution : om_forms ajout d un libelle court et d'un ordre dans la liste 30/04/2024
* Evolution : ajout des vues om_triggers et om_proc (init_gen.sql) + generation (init_temp.sql) 30/04/2024
* Evolution : framework_openmairie.class : ajout option om_proc 30/04/2024



Modified: openmairie_exemple/branches/om5_rad/HISTORY.txt
===================================================================
--- openmairie_exemple/branches/om5_rad/HISTORY.txt 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/HISTORY.txt 2024-04-30 21:34:31 UTC (rev 4947)
@@ -135,7 +135,19 @@
* bug : composition om_forms appel dans forms à l'action 5 d om_champs (objet invalide) 26/04/24
* bug - manque le droit om_vues 26/04/2014
* bug : composition om_forms : correction view_composer_widget_ctl : update 27/04/2024 et 28/04/2024
+* Evolution : composition om_forms : le champs hidden reste affichable et déplacable, il n est plus en mode texte
+ (le champs hidden est static en consultation et hidden en mise à jour) 30/04/2024
+* Evolution : om_forms ajout d un libelle court et d'un ordre dans la liste 30/04/2024
+* Evolution : ajout des vues om_triggers et om_proc (init_gen.sql) + génération (init_temp.sql) 30/04/2024
+* Evolution : framework_openmairie.class : ajout option om_proc 30/04/2024


+*****
+* Evolution : composition om_forms méthode 6 et 7 pour affichage ordre de liste
+
+
+
+
+
4.10.0 (29/11/2022
-------------------

Modified: openmairie_exemple/branches/om5_rad/TODO.txt
===================================================================
--- openmairie_exemple/branches/om5_rad/TODO.txt 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/TODO.txt 2024-04-30 21:34:31 UTC (rev 4947)
@@ -1,39 +1,18 @@
om5_rad -- TODO

-BUGS
-* bug : nommage de champs et tables si apostrophe ou guillement dans le nom (setValF)
-* bug : om_champs : en modification data_type = cle secondaire -> accés à tous les types
-
-
-om_champs/liste et om_tables/ moteur de recherche
-* à voir un libellé entête de colone om_champs (lib court) ab 16/04/2024
-* Evolution om_tables : moteur de recherche si om_champs affiché en liste. ok ?
-* a voir manual select pour boolean tous-oui false-true
-
-om_champs : type (om) sql -> virer le data_type postgres
-
-
-
-
-Calcul en triggers om
-* si apostrophe alors mettre 2 ' en saisie dans champs calcul pour ne pas avoir d erreur en sql comment -> date(''Y-m-d'')
+*** A voir Calcul en triggers om
+- si apostrophe alors mettre 2 ' en saisie dans champs calcul pour ne pas avoir d erreur en sql comment -> date(''Y-m-d'')
évolution pb d ordre dans les champs calcul
-* Attention suivant ordre des champs : montant_ht = prix*quantite doit être avant montant_ttc=montant_ht*1.2
-* reprise de champs fictifs et creation de la classe om_forms pour gérer des champs fictifs destinés au calcul.
+- Attention suivant ordre des champs : montant_ht = prix*quantite doit être avant montant_ttc=montant_ht*1.2
+- reprise de champs fictifs et creation de la classe om_forms pour gérer des champs fictifs destinés au calcul.
ajout du champs table_name pour clé secondaire om_forms


-champs format
-* formatage données numériques en liste cast en numeric -> en 2 caractères : reste à droite en colonne
-* to_char transforme le numerique en caractère -> le nombre se met à gauche en colonne
-* faut il formater en php ?
+*** format
+- formatage données numériques en liste cast en numeric -> en 2 caractères : reste à droite en colonne
+- to_char transforme le numerique en caractère -> le nombre se met à gauche en colonne

-
-Gestion documentaire
-* mettre en place un systeme de gestion documentaire avec les comments voire une doc en ligne
-* graphique uml
-
-changement de champs/data_type :
+*** changement de champs/data_type :
un champ character varying ne peut devenir que texte et vice versa
un champ character varying peut devenir double precision
alter table om5.article alter column montant_ht type double precision USING montant_ht::double precision
@@ -46,9 +25,6 @@
inverse : USING disponible::boolean
alter table om5.article alter column disponible type boolean USING disponible::boolean

-om_champs : amelioration ergonomie
-
-- cle secondaire ne doit pas avoir accès à calcul

*** agregat avec les vues

@@ -79,35 +55,13 @@
JOIN om5.service ON ((agent.service = service.service)))
GROUP BY service.service;

-
-
--> champs calcul + type sql
-
+- champs calcul + type sql
sum article.montant_ht
famille = pk + table

-
--> pb si creation de vue pour supprimer table -> drop table cascade
-
-Mode utol / developpeur
-=======================
-- créer une fonction util pour admin
-
-Bug
-===
-
-- composition om_forms bug appel méthode om_champs -> debugué action 5 du coup
-- bug : om_tables : si existe vue -> la suppression créé une erreur : a voir
-
-
-vu avec thierry
-===============
-- mettre les tests pour indusrialisation
-- possible hébergement / intégrateur - éditeur libre
-
Actions
=======
-- enlever supprimer, modifier
+- enlever supprimer, modifier -> tb : doublon car existe en om_droit

- edition -> voir un parametre dans view

@@ -138,7 +92,66 @@

}

+* procédures stockées et triggers

-* grid system
-public
-css grid-2-6 class css qui prend 2/6 éme bloc
+https://public.dalibo.com/exports/formation/manuels/modules/n4/n4.handout.html
+https://public.dalibo.com/exports/formation/manuels/modules/p1/p1.handout.html
+
+-> pg_proc
+Code et nom de la procédure
+SELECT proname, prosrc from pg_proc
+ inner join pg_namespace on pg_namespace.oid=pg_proc.pronamespace
+ where nspname='openhs';
+-> information_schema.triggers - tragers sur les event_object_name
+SELECT trigger_schema, trigger_name,
+event_manipulation, event_object_table,
+action_order, action_condition,
+action_statement, action_orientation, action_timing
+from information_schema.triggers
+where trigger_schema = 'openhs'
+
+
+
+* grid system tb
+public -> css grid-2-6 class css qui prend 2/6 éme bloc
+non applicable avec om_layout
+
+Fonctionnel ==========================================================================================
+
+* ab -> aspect présentation et non calcul / 100% pour trigger et vue sql
+ ==
+- mettre un libelle court pour colonne (libellé entête de colone om_champs (lib court) ab 16/04/2024)
+- plusieurs clés scondaires sur une même table
+- manual select pour boolean ou autre ? maîtrise des noms de valeurs
+
+* fr
+ ==
+- passer double précision en numéric -> plus facile pour format
+- systeme de gestion documentaire avec les comments voire une doc en ligne
+- graphique uml
+- mettre en place les triggers champs calculés
+- mettre en place les vues : agrégation champs sql
+- action édition
+
+* tb
+ ==
+- créer une fonction util/dev pour admin avec basculement sur l un ou l autre
+- mettre les tests pour indusrialisation
+- possible hébergement / intégrateur - éditeur libre
+
+* Bugs ==========================================================================
+- composition om_forms bug appel méthode om_champs -> debugué action 5 du coup
+- bug : om_tables : si existe vue -> la suppression créé une erreur : a voir
+- bug : nommage de champs et tables si apostrophe ou guillement dans le nom (setValF)
+
+* Ergonomie =============================================================================
+- om_champs : en modification data_type = cle secondaire -> accés à tous les types
+- cle secondaire ne doit pas avoir accès à calcul ?
+- om_champs : type (om) sql -> virer du data_type
+- composition ordre dans la liste des champs affichés
+- composition ordre dans la liste des champs affichés -> cas des calculs en réel dans consultation
+ les champs sql sont exclus du formulaire (-> liste)
+ les champs hidden sont en consultation et ne sont pas exclus
+ désamorcer le hidden en delete : passage uniquement en hidden dans le form
+- composition : voir si champ n est pas obligatoire pour mise en hidden
+

Modified: openmairie_exemple/branches/om5_rad/app/framework_openmairie.class.php
===================================================================
--- openmairie_exemple/branches/om5_rad/app/framework_openmairie.class.php 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/app/framework_openmairie.class.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -244,13 +244,24 @@
),
);

+ $links[] = array(
+ "href" => OM_ROUTE_TAB."&obj=om_proc",
+ "class" => "om_vues",
+ "title" => _("gestion des procédures"),
+ "right" => array("om_proc", "om_proc_tab", ),
+ "open" => array(
+ "tab.php|om_proc",
+ "index.php|om_proc[module=tab]",
+ "form.php|om_proc",
+ "index.php|om_proc[module=form]",
+ ),
+ );

-
$links[] = array(
"href" => OM_ROUTE_FORM."&obj=om_forms&idx=0&action=4",
"class" => "om_forms",
- "title" => __("composition om_forms"),
- "description" => __("Composition des formulaires par table."),
+ "title" => __("composition formulaire"),
+ "description" => __("Composition des formulaires"),
"right" => array("om_forms", ),
"open" => array(
"tab.php|om_forms",
@@ -260,7 +271,22 @@
),
);

+ $links[] = array(
+ "href" => OM_ROUTE_FORM."&obj=om_forms&idx=0&action=6",
+ "class" => "om_forms",
+ "title" => __("composition des listes"),
+ "description" => __("Composition listes."),
+ "right" => array("om_forms", ),
+ "open" => array(
+ "tab.php|om_forms",
+ "index.php|om_forms[module=tab]",
+ "form.php|om_forms",
+ "index.php|om_forms[module=form]",
+ ),
+ );

+
+
$rubrik['links'] = $links;
//
$menu_apres[] = $rubrik;

Modified: openmairie_exemple/branches/om5_rad/data/pgsql/init_gen.sql
===================================================================
--- openmairie_exemple/branches/om5_rad/data/pgsql/init_gen.sql 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/data/pgsql/init_gen.sql 2024-04-30 21:34:31 UTC (rev 4947)
@@ -21,8 +21,12 @@
where table_type = 'BASE TABLE' and table_schema = :'schema'; -- ***

CREATE OR REPLACE VIEW om_champs AS
- SELECT concat(columns.table_name,'.',columns.column_name) as column_name, columns.table_name,
- table_schema,data_type,is_nullable,character_maximum_length,
+ SELECT concat(columns.table_name,'.',columns.column_name) as column_name,
+ columns.table_name,
+ table_schema,
+ data_type,
+ is_nullable,
+ character_maximum_length,
column_default,
col_description((table_schema||'.'||columns.table_name)::regclass::oid, ordinal_position) as comment
FROM information_schema.columns
@@ -48,7 +52,32 @@
view_definition
FROM information_schema.views
where table_schema= :'schema'; -- where schema_name = :'schema' ;
+
+
+CREATE OR REPLACE VIEW om_proc AS
+ SELECT
+ proname,
+ prosrc
+ from pg_proc
+ inner join pg_namespace on pg_namespace.oid=pg_proc.pronamespace
+ where nspname='om5'; -- :'schema';
+
+CREATE OR REPLACE VIEW om_triggers AS
+ SELECT
+ trigger_name,
+ trigger_schema,
+ event_manipulation,
+ event_object_table,
+ action_order,
+ action_condition,
+ action_statement,
+ action_orientation,
+ action_timing
+ from information_schema.triggers
+ where trigger_schema = 'om5'; -- :'schema';

+
+
-- mettre les om_droits
INSERT INTO om_droit (om_droit, libelle, om_profil) VALUES
(nextval('om_droit_seq'), 'om_tables', 1);

Modified: openmairie_exemple/branches/om5_rad/data/pgsql/init_gen_plus.sql
===================================================================
--- openmairie_exemple/branches/om5_rad/data/pgsql/init_gen_plus.sql 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/data/pgsql/init_gen_plus.sql 2024-04-30 21:34:31 UTC (rev 4947)
@@ -10,7 +10,13 @@
(nextval('om_droit_seq'), 'om_tables_parametre', 1);
INSERT INTO om_droit (om_droit, libelle, om_profil) VALUES
(nextval('om_droit_seq'), 'om_actions', 1);
+INSERT INTO om_droit (om_droit, libelle, om_profil) VALUES
+(nextval('om_droit_seq'), 'om_proc', 1);
+INSERT INTO om_droit (om_droit, libelle, om_profil) VALUES
+(nextval('om_droit_seq'), 'om_triggers', 1);

+
+
-- tables

CREATE TABLE om_tables_parametre

Modified: openmairie_exemple/branches/om5_rad/data/pgsql/init_temp.sql
===================================================================
--- openmairie_exemple/branches/om5_rad/data/pgsql/init_temp.sql 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/data/pgsql/init_temp.sql 2024-04-30 21:34:31 UTC (rev 4947)
@@ -24,15 +24,17 @@
data_type character varying(40),
character_maximum_length integer,
is_nullable character varying(5),
- column_default character varying(40),
+ column_default character varying(80),
comment text,
parametres text,
libelle varchar(80),
+ libelle_court varchar(40),
type varchar(40),
bloc varchar(5),
position integer,
calcul varchar(255),
- liste integer
+ liste integer,
+ position_liste integer
);


@@ -60,6 +62,28 @@
table_name character varying(40)
);

+CREATE TABLE om_triggers (
+ trigger_name varchar(80) not null,
+ trigger_schema varchar(40),
+ event_manipulation varchar(40),
+ event_object_table varchar(40),
+ action_order integer,
+ action_condition varchar(80),
+ action_statement varchar(255),
+ action_orientation varchar(80),
+ action_timing varchar(80)
+);
+
+CREATE TABLE om_proc(
+ proname varchar(80) not null,
+ prosrc text
+);
+
+
+
+
+-- seq
+
CREATE SEQUENCE om_actions_seq
START WITH 1
INCREMENT BY 1
@@ -84,7 +108,11 @@
ALTER TABLE ONLY om_actions
ADD CONSTRAINT om_actions_pkey PRIMARY KEY (om_actions);

+ALTER TABLE ONLY om_triggers
+ ADD CONSTRAINT om_triggers_pkey PRIMARY KEY (trigger_name);

+ALTER TABLE ONLY om_proc
+ ADD CONSTRAINT om_proc_pkey PRIMARY KEY (proname);
-- fk

ALTER TABLE ONLY om_contraintes
@@ -93,6 +121,8 @@
ALTER TABLE ONLY om_forms
ADD CONSTRAINT om_forms_table_name_fkey FOREIGN KEY (table_name) REFERENCES om_tables(table_name);

-
ALTER TABLE ONLY om_actions
ADD CONSTRAINT om_actions_table_name_fkey FOREIGN KEY (table_name) REFERENCES om_tables(table_name);
+
+ALTER TABLE ONLY om_triggers
+ ADD CONSTRAINT om_triggers_event_object_table_fkey FOREIGN KEY (event_object_table) REFERENCES om_tables(table_name);

Modified: openmairie_exemple/branches/om5_rad/gen/obj/om_forms.class.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/obj/om_forms.class.php 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/gen/obj/om_forms.class.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -1,6 +1,6 @@
<?php
//$Id$
-//gen openMairie le 17/04/2024 09:28
+//gen openMairie le 30/04/2024 22:08

require_once PATH_OPENMAIRIE."om_dbform.class.php";

@@ -43,11 +43,13 @@
"comment",
"parametres",
"libelle",
+ "libelle_court",
"type",
"bloc",
"position",
"calcul",
"liste",
+ "position_liste",
);
}

@@ -110,6 +112,11 @@
} else {
$this->valF['libelle'] = $val['libelle'];
}
+ if ($val['libelle_court'] == "") {
+ $this->valF['libelle_court'] = NULL;
+ } else {
+ $this->valF['libelle_court'] = $val['libelle_court'];
+ }
if ($val['type'] == "") {
$this->valF['type'] = NULL;
} else {
@@ -135,6 +142,11 @@
} else {
$this->valF['liste'] = $val['liste'];
}
+ if (!is_numeric($val['position_liste'])) {
+ $this->valF['position_liste'] = NULL;
+ } else {
+ $this->valF['position_liste'] = $val['position_liste'];
+ }
}

//==========================
@@ -163,11 +175,13 @@
$form->setType("comment", "textarea");
$form->setType("parametres", "textarea");
$form->setType("libelle", "text");
+ $form->setType("libelle_court", "text");
$form->setType("type", "text");
$form->setType("bloc", "text");
$form->setType("position", "text");
$form->setType("calcul", "text");
$form->setType("liste", "text");
+ $form->setType("position_liste", "text");
}

// MDOE MODIFIER
@@ -186,11 +200,13 @@
$form->setType("comment", "textarea");
$form->setType("parametres", "textarea");
$form->setType("libelle", "text");
+ $form->setType("libelle_court", "text");
$form->setType("type", "text");
$form->setType("bloc", "text");
$form->setType("position", "text");
$form->setType("calcul", "text");
$form->setType("liste", "text");
+ $form->setType("position_liste", "text");
}

// MODE SUPPRIMER
@@ -205,11 +221,13 @@
$form->setType("comment", "hiddenstatic");
$form->setType("parametres", "hiddenstatic");
$form->setType("libelle", "hiddenstatic");
+ $form->setType("libelle_court", "hiddenstatic");
$form->setType("type", "hiddenstatic");
$form->setType("bloc", "hiddenstatic");
$form->setType("position", "hiddenstatic");
$form->setType("calcul", "hiddenstatic");
$form->setType("liste", "hiddenstatic");
+ $form->setType("position_liste", "hiddenstatic");
}

// MODE CONSULTER
@@ -224,11 +242,13 @@
$form->setType("comment", "textareastatic");
$form->setType("parametres", "textareastatic");
$form->setType("libelle", "static");
+ $form->setType("libelle_court", "static");
$form->setType("type", "static");
$form->setType("bloc", "static");
$form->setType("position", "static");
$form->setType("calcul", "static");
$form->setType("liste", "static");
+ $form->setType("position_liste", "static");
}

}
@@ -239,6 +259,7 @@
$form->setOnchange('character_maximum_length','VerifNum(this)');
$form->setOnchange('position','VerifNum(this)');
$form->setOnchange('liste','VerifNum(this)');
+ $form->setOnchange('position_liste','VerifNum(this)');
}
/**
* Methode setTaille
@@ -254,11 +275,13 @@
$form->setTaille("comment", 80);
$form->setTaille("parametres", 80);
$form->setTaille("libelle", 30);
+ $form->setTaille("libelle_court", 30);
$form->setTaille("type", 30);
$form->setTaille("bloc", 10);
$form->setTaille("position", 11);
$form->setTaille("calcul", 30);
$form->setTaille("liste", 11);
+ $form->setTaille("position_liste", 11);
}

/**
@@ -271,15 +294,17 @@
$form->setMax("data_type", 40);
$form->setMax("character_maximum_length", 11);
$form->setMax("is_nullable", 5);
- $form->setMax("column_default", 40);
+ $form->setMax("column_default", 80);
$form->setMax("comment", 6);
$form->setMax("parametres", 6);
$form->setMax("libelle", 80);
+ $form->setMax("libelle_court", 40);
$form->setMax("type", 40);
$form->setMax("bloc", 5);
$form->setMax("position", 11);
$form->setMax("calcul", 255);
$form->setMax("liste", 11);
+ $form->setMax("position_liste", 11);
}


@@ -295,11 +320,13 @@
$form->setLib('comment', __('comment'));
$form->setLib('parametres', __('parametres'));
$form->setLib('libelle', __('libelle'));
+ $form->setLib('libelle_court', __('libelle_court'));
$form->setLib('type', __('type'));
$form->setLib('bloc', __('bloc'));
$form->setLib('position', __('position'));
$form->setLib('calcul', __('calcul'));
$form->setLib('liste', __('liste'));
+ $form->setLib('position_liste', __('position_liste'));
}
/**
*

Added: openmairie_exemple/branches/om5_rad/gen/obj/om_proc.class.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/obj/om_proc.class.php (rev 0)
+++ openmairie_exemple/branches/om5_rad/gen/obj/om_proc.class.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -0,0 +1,130 @@
+<?php
+//$Id$
+//gen openMairie le 30/04/2024 22:06
+
+require_once PATH_OPENMAIRIE."om_dbform.class.php";
+
+class om_proc_gen extends dbform {
+
+ protected $_absolute_class_name = "om_proc";
+
+ var $table = "om_proc";
+ var $clePrimaire = "proname";
+ var $typeCle = "A";
+ var $required_field = array(
+ "proname"
+ );
+
+ var $foreign_keys_extended = array(
+ );
+
+ /**
+ *
+ * @return string
+ */
+ function get_default_libelle() {
+ return $this->getVal($this->clePrimaire)."&nbsp;".$this->getVal("prosrc");
+ }
+
+ /**
+ *
+ * @return array
+ */
+ function get_var_sql_forminc__champs() {
+ return array(
+ "proname",
+ "prosrc",
+ );
+ }
+
+
+
+
+ function setvalF($val = array()) {
+ //affectation valeur formulaire
+ $this->valF['proname'] = $val['proname'];
+ $this->valF['prosrc'] = $val['prosrc'];
+ }
+
+ //==========================
+ // Formulaire [form]
+ //==========================
+ /**
+ *
+ */
+ function setType(&$form, $maj) {
+ // Récupération du mode de l'action
+ $crud = $this->get_action_crud($maj);
+
+ // MODE AJOUTER
+ if ($maj == 0 || $crud == 'create') {
+ $form->setType("proname", "text");
+ $form->setType("prosrc", "textarea");
+ }
+
+ // MDOE MODIFIER
+ if ($maj == 1 || $crud == 'update') {
+ $form->setType("proname", "hiddenstatic");
+ $form->setType("prosrc", "textarea");
+ }
+
+ // MODE SUPPRIMER
+ if ($maj == 2 || $crud == 'delete') {
+ $form->setType("proname", "hiddenstatic");
+ $form->setType("prosrc", "hiddenstatic");
+ }
+
+ // MODE CONSULTER
+ if ($maj == 3 || $crud == 'read') {
+ $form->setType("proname", "static");
+ $form->setType("prosrc", "textareastatic");
+ }
+
+ }
+
+ /**
+ * Methode setTaille
+ */
+ function setTaille(&$form, $maj) {
+ $form->setTaille("proname", 30);
+ $form->setTaille("prosrc", 80);
+ }
+
+ /**
+ * Methode setMax
+ */
+ function setMax(&$form, $maj) {
+ $form->setMax("proname", 80);
+ $form->setMax("prosrc", 6);
+ }
+
+
+ function setLib(&$form, $maj) {
+ //libelle des champs
+ $form->setLib('proname', __('proname'));
+ $form->setLib('prosrc', __('prosrc'));
+ }
+ /**
+ *
+ */
+ function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
+
+ }
+
+
+ //==================================
+ // sous Formulaire
+ //==================================
+
+
+ function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
+ $this->retourformulaire = $retourformulaire;
+ $this->set_form_default_values($form, $maj, $validation);
+ }// fin setValsousformulaire
+
+ //==================================
+ // cle secondaire
+ //==================================
+
+
+}

Modified: openmairie_exemple/branches/om5_rad/gen/obj/om_tables.class.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/obj/om_tables.class.php 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/gen/obj/om_tables.class.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -1,6 +1,6 @@
<?php
//$Id$
-//gen openMairie le 25/04/2024 14:15
+//gen openMairie le 30/04/2024 22:09

require_once PATH_OPENMAIRIE."om_dbform.class.php";

@@ -271,6 +271,8 @@
$this->rechercheTable($this->f->db, "om_contraintes", "table_name", $id);
// Verification de la cle secondaire : om_forms
$this->rechercheTable($this->f->db, "om_forms", "table_name", $id);
+ // Verification de la cle secondaire : om_triggers
+ $this->rechercheTable($this->f->db, "om_triggers", "event_object_table", $id);
}



Added: openmairie_exemple/branches/om5_rad/gen/obj/om_triggers.class.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/obj/om_triggers.class.php (rev 0)
+++ openmairie_exemple/branches/om5_rad/gen/obj/om_triggers.class.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -0,0 +1,270 @@
+<?php
+//$Id$
+//gen openMairie le 30/04/2024 22:37
+
+require_once PATH_OPENMAIRIE."om_dbform.class.php";
+
+class om_triggers_gen extends dbform {
+
+ protected $_absolute_class_name = "om_triggers";
+
+ var $table = "om_triggers";
+ var $clePrimaire = "trigger_name";
+ var $typeCle = "A";
+ var $required_field = array(
+ "trigger_name"
+ );
+
+ var $foreign_keys_extended = array(
+ "om_tables" => array("om_tables", ),
+ );
+
+ /**
+ *
+ * @return string
+ */
+ function get_default_libelle() {
+ return $this->getVal($this->clePrimaire)."&nbsp;".$this->getVal("trigger_schema");
+ }
+
+ /**
+ *
+ * @return array
+ */
+ function get_var_sql_forminc__champs() {
+ return array(
+ "trigger_name",
+ "trigger_schema",
+ "event_manipulation",
+ "event_object_table",
+ "action_order",
+ "action_condition",
+ "action_statement",
+ "action_orientation",
+ "action_timing",
+ );
+ }
+
+ /**
+ *
+ * @return string
+ */
+ function get_var_sql_forminc__sql_event_object_table() {
+ return "SELECT om_tables.table_name, om_tables.libelle FROM ".DB_PREFIXE."om_tables ORDER BY om_tables.libelle ASC";
+ }
+
+ /**
+ *
+ * @return string
+ */
+ function get_var_sql_forminc__sql_event_object_table_by_id() {
+ return "SELECT om_tables.table_name, om_tables.libelle FROM ".DB_PREFIXE."om_tables WHERE table_name = '<idx>'";
+ }
+
+
+
+
+ function setvalF($val = array()) {
+ //affectation valeur formulaire
+ $this->valF['trigger_name'] = $val['trigger_name'];
+ if ($val['trigger_schema'] == "") {
+ $this->valF['trigger_schema'] = NULL;
+ } else {
+ $this->valF['trigger_schema'] = $val['trigger_schema'];
+ }
+ if ($val['event_manipulation'] == "") {
+ $this->valF['event_manipulation'] = NULL;
+ } else {
+ $this->valF['event_manipulation'] = $val['event_manipulation'];
+ }
+ if ($val['event_object_table'] == "") {
+ $this->valF['event_object_table'] = NULL;
+ } else {
+ $this->valF['event_object_table'] = $val['event_object_table'];
+ }
+ if (!is_numeric($val['action_order'])) {
+ $this->valF['action_order'] = NULL;
+ } else {
+ $this->valF['action_order'] = $val['action_order'];
+ }
+ if ($val['action_condition'] == "") {
+ $this->valF['action_condition'] = NULL;
+ } else {
+ $this->valF['action_condition'] = $val['action_condition'];
+ }
+ if ($val['action_statement'] == "") {
+ $this->valF['action_statement'] = NULL;
+ } else {
+ $this->valF['action_statement'] = $val['action_statement'];
+ }
+ if ($val['action_orientation'] == "") {
+ $this->valF['action_orientation'] = NULL;
+ } else {
+ $this->valF['action_orientation'] = $val['action_orientation'];
+ }
+ if ($val['action_timing'] == "") {
+ $this->valF['action_timing'] = NULL;
+ } else {
+ $this->valF['action_timing'] = $val['action_timing'];
+ }
+ }
+
+ //==========================
+ // Formulaire [form]
+ //==========================
+ /**
+ *
+ */
+ function setType(&$form, $maj) {
+ // Récupération du mode de l'action
+ $crud = $this->get_action_crud($maj);
+
+ // MODE AJOUTER
+ if ($maj == 0 || $crud == 'create') {
+ $form->setType("trigger_name", "text");
+ $form->setType("trigger_schema", "text");
+ $form->setType("event_manipulation", "text");
+ if ($this->is_in_context_of_foreign_key("om_tables", $this->retourformulaire)) {
+ $form->setType("event_object_table", "selecthiddenstatic");
+ } else {
+ $form->setType("event_object_table", "select");
+ }
+ $form->setType("action_order", "text");
+ $form->setType("action_condition", "text");
+ $form->setType("action_statement", "text");
+ $form->setType("action_orientation", "text");
+ $form->setType("action_timing", "text");
+ }
+
+ // MDOE MODIFIER
+ if ($maj == 1 || $crud == 'update') {
+ $form->setType("trigger_name", "hiddenstatic");
+ $form->setType("trigger_schema", "text");
+ $form->setType("event_manipulation", "text");
+ if ($this->is_in_context_of_foreign_key("om_tables", $this->retourformulaire)) {
+ $form->setType("event_object_table", "selecthiddenstatic");
+ } else {
+ $form->setType("event_object_table", "select");
+ }
+ $form->setType("action_order", "text");
+ $form->setType("action_condition", "text");
+ $form->setType("action_statement", "text");
+ $form->setType("action_orientation", "text");
+ $form->setType("action_timing", "text");
+ }
+
+ // MODE SUPPRIMER
+ if ($maj == 2 || $crud == 'delete') {
+ $form->setType("trigger_name", "hiddenstatic");
+ $form->setType("trigger_schema", "hiddenstatic");
+ $form->setType("event_manipulation", "hiddenstatic");
+ $form->setType("event_object_table", "selectstatic");
+ $form->setType("action_order", "hiddenstatic");
+ $form->setType("action_condition", "hiddenstatic");
+ $form->setType("action_statement", "hiddenstatic");
+ $form->setType("action_orientation", "hiddenstatic");
+ $form->setType("action_timing", "hiddenstatic");
+ }
+
+ // MODE CONSULTER
+ if ($maj == 3 || $crud == 'read') {
+ $form->setType("trigger_name", "static");
+ $form->setType("trigger_schema", "static");
+ $form->setType("event_manipulation", "static");
+ $form->setType("event_object_table", "selectstatic");
+ $form->setType("action_order", "static");
+ $form->setType("action_condition", "static");
+ $form->setType("action_statement", "static");
+ $form->setType("action_orientation", "static");
+ $form->setType("action_timing", "static");
+ }
+
+ }
+
+
+ function setOnchange(&$form, $maj) {
+ //javascript controle client
+ $form->setOnchange('action_order','VerifNum(this)');
+ }
+ /**
+ * Methode setTaille
+ */
+ function setTaille(&$form, $maj) {
+ $form->setTaille("trigger_name", 30);
+ $form->setTaille("trigger_schema", 30);
+ $form->setTaille("event_manipulation", 30);
+ $form->setTaille("event_object_table", 30);
+ $form->setTaille("action_order", 11);
+ $form->setTaille("action_condition", 30);
+ $form->setTaille("action_statement", 30);
+ $form->setTaille("action_orientation", 30);
+ $form->setTaille("action_timing", 30);
+ }
+
+ /**
+ * Methode setMax
+ */
+ function setMax(&$form, $maj) {
+ $form->setMax("trigger_name", 80);
+ $form->setMax("trigger_schema", 40);
+ $form->setMax("event_manipulation", 40);
+ $form->setMax("event_object_table", 40);
+ $form->setMax("action_order", 11);
+ $form->setMax("action_condition", 80);
+ $form->setMax("action_statement", 255);
+ $form->setMax("action_orientation", 80);
+ $form->setMax("action_timing", 80);
+ }
+
+
+ function setLib(&$form, $maj) {
+ //libelle des champs
+ $form->setLib('trigger_name', __('trigger_name'));
+ $form->setLib('trigger_schema', __('trigger_schema'));
+ $form->setLib('event_manipulation', __('event_manipulation'));
+ $form->setLib('event_object_table', __('event_object_table'));
+ $form->setLib('action_order', __('action_order'));
+ $form->setLib('action_condition', __('action_condition'));
+ $form->setLib('action_statement', __('action_statement'));
+ $form->setLib('action_orientation', __('action_orientation'));
+ $form->setLib('action_timing', __('action_timing'));
+ }
+ /**
+ *
+ */
+ function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
+
+ // event_object_table
+ $this->init_select(
+ $form,
+ $this->f->db,
+ $maj,
+ null,
+ "event_object_table",
+ $this->get_var_sql_forminc__sql("event_object_table"),
+ $this->get_var_sql_forminc__sql("event_object_table_by_id"),
+ false
+ );
+ }
+
+
+ //==================================
+ // sous Formulaire
+ //==================================
+
+
+ function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
+ $this->retourformulaire = $retourformulaire;
+ if($validation == 0) {
+ if($this->is_in_context_of_foreign_key('om_tables', $this->retourformulaire))
+ $form->setVal('event_object_table', $idxformulaire);
+ }// fin validation
+ $this->set_form_default_values($form, $maj, $validation);
+ }// fin setValsousformulaire
+
+ //==================================
+ // cle secondaire
+ //==================================
+
+
+}

Modified: openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_forms.inc.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_forms.inc.php 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_forms.inc.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -1,6 +1,6 @@
<?php
//$Id$
-//gen openMairie le 17/04/2024 09:28
+//gen openMairie le 30/04/2024 22:08

$DEBUG=0;
$serie=15;
@@ -33,11 +33,13 @@
'om_forms.is_nullable as "'.__("is_nullable").'"',
'om_forms.column_default as "'.__("column_default").'"',
'om_forms.libelle as "'.__("libelle").'"',
+ 'om_forms.libelle_court as "'.__("libelle_court").'"',
'om_forms.type as "'.__("type").'"',
'om_forms.bloc as "'.__("bloc").'"',
'om_forms.position as "'.__("position").'"',
'om_forms.calcul as "'.__("calcul").'"',
'om_forms.liste as "'.__("liste").'"',
+ 'om_forms.position_liste as "'.__("position_liste").'"',
);
//
$champNonAffiche = array(
@@ -54,11 +56,13 @@
'om_forms.is_nullable as "'.__("is_nullable").'"',
'om_forms.column_default as "'.__("column_default").'"',
'om_forms.libelle as "'.__("libelle").'"',
+ 'om_forms.libelle_court as "'.__("libelle_court").'"',
'om_forms.type as "'.__("type").'"',
'om_forms.bloc as "'.__("bloc").'"',
'om_forms.position as "'.__("position").'"',
'om_forms.calcul as "'.__("calcul").'"',
'om_forms.liste as "'.__("liste").'"',
+ 'om_forms.position_liste as "'.__("position_liste").'"',
);
$tri="ORDER BY om_forms.libelle ASC NULLS LAST";
$edition="om_forms";

Added: openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_proc.inc.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_proc.inc.php (rev 0)
+++ openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_proc.inc.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -0,0 +1,43 @@
+<?php
+//$Id$
+//gen openMairie le 30/04/2024 22:06
+
+$DEBUG=0;
+$serie=15;
+$ent = __("administration")." -> ".__("om_proc");
+if(!isset($premier)) $premier='';
+if(!isset($tricolsf)) $tricolsf='';
+if(!isset($premiersf)) $premiersf='';
+if(!isset($selection)) $selection='';
+if(!isset($retourformulaire)) $retourformulaire='';
+if (!isset($idxformulaire)) {
+ $idxformulaire = '';
+}
+if (!isset($tricol)) {
+ $tricol = '';
+}
+if (!isset($valide)) {
+ $valide = '';
+}
+// FROM
+$table = DB_PREFIXE."om_proc";
+// SELECT
+$champAffiche = array(
+ 'om_proc.proname as "'.__("proname").'"',
+ );
+//
+$champNonAffiche = array(
+ 'om_proc.prosrc as "'.__("prosrc").'"',
+ );
+//
+$champRecherche = array(
+ 'om_proc.proname as "'.__("proname").'"',
+ );
+$tri="ORDER BY om_proc.prosrc ASC NULLS LAST";
+$edition="om_proc";
+/**
+ * Gestion de la clause WHERE => $selection
+ */
+// Filtre listing standard
+$selection = "";
+

Modified: openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_tables.inc.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_tables.inc.php 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_tables.inc.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -1,6 +1,6 @@
<?php
//$Id$
-//gen openMairie le 25/04/2024 14:15
+//gen openMairie le 30/04/2024 22:09

$DEBUG=0;
$serie=15;
@@ -67,5 +67,6 @@
'om_actions',
'om_contraintes',
'om_forms',
+ 'om_triggers',
);


Added: openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_triggers.inc.php
===================================================================
--- openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_triggers.inc.php (rev 0)
+++ openmairie_exemple/branches/om5_rad/gen/sql/pgsql/om_triggers.inc.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -0,0 +1,68 @@
+<?php
+//$Id$
+//gen openMairie le 30/04/2024 22:37
+
+$DEBUG=0;
+$serie=15;
+$ent = __("administration")." -> ".__("om_triggers");
+if(!isset($premier)) $premier='';
+if(!isset($tricolsf)) $tricolsf='';
+if(!isset($premiersf)) $premiersf='';
+if(!isset($selection)) $selection='';
+if(!isset($retourformulaire)) $retourformulaire='';
+if (!isset($idxformulaire)) {
+ $idxformulaire = '';
+}
+if (!isset($tricol)) {
+ $tricol = '';
+}
+if (!isset($valide)) {
+ $valide = '';
+}
+// FROM
+$table = DB_PREFIXE."om_triggers
+ LEFT JOIN ".DB_PREFIXE."om_tables
+ ON om_triggers.event_object_table=om_tables.table_name ";
+// SELECT
+$champAffiche = array(
+ 'om_triggers.trigger_name as "'.__("trigger_name").'"',
+ 'om_triggers.trigger_schema as "'.__("trigger_schema").'"',
+ 'om_triggers.event_manipulation as "'.__("event_manipulation").'"',
+ 'om_tables.libelle as "'.__("event_object_table").'"',
+ 'om_triggers.action_order as "'.__("action_order").'"',
+ 'om_triggers.action_condition as "'.__("action_condition").'"',
+ 'om_triggers.action_statement as "'.__("action_statement").'"',
+ 'om_triggers.action_orientation as "'.__("action_orientation").'"',
+ 'om_triggers.action_timing as "'.__("action_timing").'"',
+ );
+//
+$champNonAffiche = array(
+ );
+//
+$champRecherche = array(
+ 'om_triggers.trigger_name as "'.__("trigger_name").'"',
+ 'om_triggers.trigger_schema as "'.__("trigger_schema").'"',
+ 'om_triggers.event_manipulation as "'.__("event_manipulation").'"',
+ 'om_tables.libelle as "'.__("event_object_table").'"',
+ 'om_triggers.action_order as "'.__("action_order").'"',
+ 'om_triggers.action_condition as "'.__("action_condition").'"',
+ 'om_triggers.action_statement as "'.__("action_statement").'"',
+ 'om_triggers.action_orientation as "'.__("action_orientation").'"',
+ 'om_triggers.action_timing as "'.__("action_timing").'"',
+ );
+$tri="ORDER BY om_triggers.trigger_schema ASC NULLS LAST";
+$edition="om_triggers";
+/**
+ * Gestion de la clause WHERE => $selection
+ */
+// Filtre listing standard
+$selection = "";
+// Liste des clés étrangères avec leurs éventuelles surcharges
+$foreign_keys_extended = array(
+ "om_tables" => array("om_tables", ),
+);
+// Filtre listing sous formulaire - om_tables
+if (in_array($retourformulaire, $foreign_keys_extended["om_tables"])) {
+ $selection = " WHERE (om_triggers.event_object_table = '".$f->db->escapeSimple($idxformulaire)."') ";
+}
+

Modified: openmairie_exemple/branches/om5_rad/obj/om_forms.class.php
===================================================================
--- openmairie_exemple/branches/om5_rad/obj/om_forms.class.php 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/obj/om_forms.class.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -58,10 +58,13 @@
"'' as comment",
"parametres",
"parametres->>'libelle' as libelle",
+ "parametres->>'libelle_court' as libelle_court",
"parametres->>'type' as type",
"parametres->>'bloc' as bloc",
"parametres->>'position' as position",
"parametres->>'liste' as liste",
+ "parametres->>'liste' as liste",
+ "parametres->>'position_liste' as position_liste",
"parametres->>'calcul' as calcul",
);
}
@@ -832,8 +835,9 @@
$form->setOnChange("table_name", "submit()");
$form->setMax("table_name", 25);
$form->setVal("table_name", (isset($_POST["table_name"]) ? $_POST["table_name"] : ""));
- $sql = " SELECT om_tables.table_name, om_tables.table_name as lib
- FROM ".DB_PREFIXE."om_tables where substring(table_name,1,3) not like 'om_' ORDER BY om_tables.table_name";
+ $sql = " SELECT om_tables.table_name, om_tables.table_name as lib ";
+ $sql .= " FROM ".DB_PREFIXE."om_tables ";
+ $sql .= " where substring(table_name,1,3) not like 'om_' ORDER BY om_tables.table_name ";
$res = $this->f->db->query($sql);
$this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
$this->f->isDatabaseError($res);
@@ -908,6 +912,7 @@
$sql .= " FROM ".DB_PREFIXE."om_forms ";
$sql .= " left join ".DB_PREFIXE."om_champs on om_forms.column_name=om_champs.column_name";
$sql .= " where SPLIT_PART(om_forms.column_name, '.', 1) = '".$_POST["table_name"]."'";
+ $sql .= " and parametres->>'type' != 'sql'";
$sql .= " order by parametres->>'bloc',parametres->>'position' ";
//echo $sql;
$res = $this->f->db->query($sql);
@@ -930,9 +935,11 @@
if($elem["bloc"]=="C".intval($i)){
//echo "->".$elem['column_name']." ".$elem['position']." ";
//echo $elem['bloc']."*<br>";
+ /*
if($elem['type'] == 'hidden' or $elem['type'] == 'sql' ){
echo '<br>'.$elem['column_name']." [".$elem['type']." ]";
}else{
+ */
// Affichage des colonnes
$this->display_dashboard_widget(
$elem['column_name'], // pour update et delete
@@ -942,7 +949,7 @@
$elem['position'],
$edition
);
- }
+ //}
}
}
// Fermeture du conteneur .column
@@ -1024,7 +1031,7 @@
if (!$this->f->starts_with($key, "column_")) {
continue;
}
- $this->f->addToLog(__METHOD__."(): mode update (".$key.");", DEBUG_MODE);
+ //$this->f->addToLog(__METHOD__."(): mode update (".$key.");", DEBUG_MODE);
$bloc = "C".str_replace("column_", "", $key);
$widgets = explode("xwidget_", $this->f->get_submitted_get_value($key));
foreach($widgets as $i => $widget_id) {
@@ -1062,16 +1069,20 @@
$this->f->isDatabaseError($res);
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
$temp1=explode(".", $row['column_name']);
- $this->f->addToLog(__METHOD__."(): mode update type (".$temp->type.");", DEBUG_MODE);
- if($row['type']=='hidden' or $row['type']=='sql'){ // cas des champs cachés non affichés sql et hidden
+ //$this->f->addToLog(__METHOD__."(): mode update type (".$temp->type.");", DEBUG_MODE);
+ /*
+ if($row['type']=='hidden'){ // cas des champs cachés non affichés sql et hidden
$nb['C1']++;
$bloc= 'C1';
$position=$nb['C1'];
- $this->f->addToLog(__METHOD__."(): mode update * type(".$row['type']." | ".$row['position']." [ ".$row['bloc']."*);", DEBUG_MODE);
+ $this->f->addToLog(__METHOD__."(): mode update *** (".$row['column_name']." | ".$row['type']." | ".$row['position']." [ ".$row['bloc']."*);", DEBUG_MODE);
}else{
+ */
$bloc=$c[$row['column_name']]["bloc"];
$position=$c[$row['column_name']]["position"];
- }
+ $this->f->addToLog(__METHOD__."(): mode update -> (".$row['column_name']." | ".$row['type']." | ".$row['position']." [ ".$row['bloc']."*);", DEBUG_MODE);
+
+ //}
// update bloc
$sql = " update ".DB_PREFIXE."om_forms set parametres = jsonb_set(parametres, '{bloc}', '\"".$bloc."\"')";
$sql .= " WHERE column_name = '".$row['column_name']."'" ;

Modified: openmairie_exemple/branches/om5_rad/sql/pgsql/om_tables.inc.php
===================================================================
--- openmairie_exemple/branches/om5_rad/sql/pgsql/om_tables.inc.php 2024-04-28 16:48:42 UTC (rev 4946)
+++ openmairie_exemple/branches/om5_rad/sql/pgsql/om_tables.inc.php 2024-04-30 21:34:31 UTC (rev 4947)
@@ -30,5 +30,6 @@
'om_forms',
'om_contraintes',
'om_actions',
+ 'om_triggers',
);


Reply all
Reply to author
Forward
0 new messages