[openads-Commits] r18043 - in branches/6.6.0-develop_evo_type_avis_pec_incompl: . data/pgsql dyn gen/obj gen/sql/pgsql obj tests tests/resources/app/gen

0 views
Skip to first unread message

sof...@users.adullact.net

unread,
Jun 21, 2024, 9:58:50 AM (8 days ago) Jun 21
to openmairi...@googlegroups.com
Author: softime
Date: 2024-06-21 15:58:47 +0200 (Fri, 21 Jun 2024)
New Revision: 18043

Added:
branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_def.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_values.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_def.inc.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_values.inc.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_def.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_values.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.abstract.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.impl_2_tables.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_def.robot
branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_values.robot
Modified:
branches/6.6.0-develop_evo_type_avis_pec_incompl/
branches/6.6.0-develop_evo_type_avis_pec_incompl/HISTORY.txt
branches/6.6.0-develop_evo_type_avis_pec_incompl/data/pgsql/v6.6.0.dev0.sql
branches/6.6.0-develop_evo_type_avis_pec_incompl/dyn/modules.inc.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/instruction.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/lien_module.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module_manager.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/om_dbform.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/utils.class.php
branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/
branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/gen_resources.robot
Log:
chore(branch): fusion de la branche d'integration 6.6.0-develop dans la branche de developpement 6.6.0-develop_evo_type_avis_pec_incompl


Index: branches/6.6.0-develop_evo_type_avis_pec_incompl
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl 2024-06-21 13:58:47 UTC (rev 18043)

Property changes on: branches/6.6.0-develop_evo_type_avis_pec_incompl
___________________________________________________________________
Modified: svn:mergeinfo
## -713,7 +713,9 ##
/branches/6.5.0-develop-error-contrainte-traitement-sig:17384-17432
/branches/6.5.0-develop_fix_avis_produit_onglet_pieces:17288-17414
/branches/6.6.0-10411:17736-17870
-/branches/6.6.0-develop:17864-18018
+/branches/6.6.0-develop:17864-18039
+/branches/6.6.0-develop--fix-evol-mod:17681-18023
+/branches/6.6.0-develop--impl-extra-data:17897-18034
/branches/6.6.0-develop--improve-task:17580-17609
/branches/6.6.0-develop-10391-SupportPlatAuSousDossier:17581-17697
/branches/6.6.0-develop-10409-GestionTODO:17700-17768
Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/HISTORY.txt
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/HISTORY.txt 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/HISTORY.txt 2024-06-21 13:58:47 UTC (rev 18043)
@@ -3,7 +3,10 @@

6.6.0 (unreleased)
------------------
-
+* Evolution - Système de stockage de données arbitraires.
+ Ticket #10406.
+* Correction - Dans le listing, des instructions d'un dossier d'instruction, les modules sont ignorés.
+ Ticket #10434.
* Correction - Suppression d'écriture de log non nécessaire
Ticket #10413.
* Correction - Contrôle de légalité : permettre la transmission du tacite - correction de la condition d'affichage de l'action.
@@ -14,7 +17,7 @@
Ticket #10415.
* Évolution - Ajout de la gestion du script d'installation des modules [MC0043833].
Ticket #10431.
-* Évolution - Message d'avertissement du dépassement de la date limite d'instruction
+* Évolution - Message d'avertissement du dépassement de la date limite d'instruction
lors de la notification manuelle des pétitionnaires via le portail citoyen.
Ticket #10362.
* Evolution - Ajout de la tables et des fonction de gestion des annexes - [#10389] [MC0044635][MC0045937] Modules Flux Platau
@@ -75,10 +78,10 @@
Ticket #10387.
* Correction - BUG : DB_ERROR lors de l'accès au listing du obj "dossier" via l'url.
Ticket #10385.
-* Correction - Erreur de base de données lors du tri sur la colonne
+* Correction - Erreur de base de données lors du tri sur la colonne
"finalisé / signé par" de l'onglet Instruction des dossiers.
Ticket #10384.
-* Correction - Corriger la taille du champ `consultation.dossier` pour que ça
+* Correction - Corriger la taille du champ `consultation.dossier` pour que ça
corresponde à la taille du champ `dossier.dossier`.
Ticket #10383.

@@ -314,7 +317,7 @@
Ticket #10238.
* Évolution - Mise à jour des données techniques et CERFA.
Ticket #10236.
-* Évolution - Ajout d'une option option_filtre_instructeur_DI_par_division
+* Évolution - Ajout d'une option option_filtre_instructeur_DI_par_division
permettant de limiter l'affectaction des dossiers aux instructeurs de la
division de l'utilisateur.
Ticket #10233.
@@ -677,7 +680,7 @@
"suivi_instruction_parametrable" doivent être en minuscule.
Ticket #10042.
* Correction - Bug de notice PHP à l'ajout d'un département sans date de début
- de validité
+ de validité
Ticket #10044.
* Correction - Gestion de l'extension du fichier de retour d'avis stocké sur la
consultation.
@@ -1209,7 +1212,7 @@
* Évolution - Amélioration de l'affichage du type de dossier depuis la synthèse
d'un dossier d'instruction.
Ticket #9774.
-* Évolution - Ajout de la possibilité de notifier les services consultés et les
+* Évolution - Ajout de la possibilité de notifier les services consultés et les
tiers consultés, par mail depuis une instruction.
Ticket #9776.
* Évolution - Augmentation du nombre de caractères sur les champs de voie des
@@ -1288,7 +1291,7 @@
* Correction - Il n'y a plus d'erreur à la création des tâches venant d'une collectivité
dont le code INSEE débute par "0".
Ticket #9743.
-* Correction - Changer le texte en dessous de la bulle du widget derniers dossier
+* Correction - Changer le texte en dessous de la bulle du widget derniers dossier
déposés en "Déposés dernièrement".
Ticket #9744.
* Correction - Suppression de l'accès aux fichiers dans le stockage lors de
@@ -1325,7 +1328,7 @@
la forme instruction_xxx_nom_lettretype_associee.
Ticket #9724.
* Évolution - Permettre d'accéder au parapheur pour signature via le lien généré lors
- de l'envoi à signature.
+ de l'envoi à signature.
Ticket #9731.
* Évolution - Permettre le traitement d'une seule categorie de tâches par appel au WebService.
Ticket #9732.
@@ -1395,7 +1398,7 @@
* Correction - Le message de récupération des contraintes pour la géolocalisation est correctement
mis à jour.
Ticket #9675.
-* Correction - Correction de l'utilisation de la métadonnée 'titre_document' pour
+* Correction - Correction de l'utilisation de la métadonnée 'titre_document' pour
l'utiliser seulement lors de l'envoi en signature.
Ticket #9676.
* Correction - Affichage de l'adresse même si l'adresse normalisée est vide ou
@@ -1466,7 +1469,7 @@
* Évolution - Mise en place de la possibilité de notifier, les pétitionnaires du dossier, de l'évolution
d'une instruction.
Ticket #9643.
-* Évolution - Mise en place des modifications pour permettre l'utilisation du connecteur
+* Évolution - Mise en place des modifications pour permettre l'utilisation du connecteur
iparapheur avec openADS.
Ticket #9642.
* Correction - Gestion de du statut de la tâche creation_DA.
@@ -1474,7 +1477,7 @@
* Correction - Initialisation du champ comprenant la numérotation du dossier pour ne plus avoir
d'erreur lors du calcul des séquences.
Ticket #9644.
-* Correction - Le champ concernant la prise en compte métier sur les dossiers d'instruction est
+* Correction - Le champ concernant la prise en compte métier sur les dossiers d'instruction est
supprimé à la modification du dossier
Ticket #9646.

@@ -1731,7 +1734,7 @@
* Évolution - Ajout des champs de fusion du taux communal de la taxe
d'aménagement pour les 20 secteurs.
Ticket #9303.
-* Évolution - Ajout de filtres pour la géolocalisation automatique afin de
+* Évolution - Ajout de filtres pour la géolocalisation automatique afin de
paramétrer les dossiers candidats.
Ticket #9297.
* Correction - Il n'y a plus d'erreur au chargement du contenu d'un onglet.
@@ -2016,7 +2019,7 @@
Ticket #9019.
* Évolution - Mise à jour du système de filter select.
Ticket #9018.
-* Correction - Lors de l'export d'une requête mémorisée en CSV, si une donnée à
+* Correction - Lors de l'export d'une requête mémorisée en CSV, si une donnée à
des sauts de ligne alors elle sera affiché dans la même cellule.
Ticket #8956.
* Évolution - Mise à jour du framework openMairie vers la version 4.8.
@@ -2205,7 +2208,7 @@
* Correction - Lors de la copie d'un logo, le fichier image est désormais
dupliqué.
Ticket #8890.
-* Correction - L'erreur de base de données à l'affichage du bordereau
+* Correction - L'erreur de base de données à l'affichage du bordereau
"bordereau_avis_maire_prefet" est désormais remplacée par un message pour
l'utilisateur expliquant qu'il manque le paramètre nécessaire.
Ticket #8889.
@@ -2256,7 +2259,7 @@
* Évolution - Les dossiers liés dans l'onglet "Dossiers Liés" apparaissent
dorénavant dans le nouveau listing "liaison retour" du dossier cible.
Ticket #8868.
-* Évolution - Dans la zone enjeu des dossiers ADS, les pictogrammes RE et IN
+* Évolution - Dans la zone enjeu des dossiers ADS, les pictogrammes RE et IN
sont maintenant présents seulement si les dossiers contentieux ne sont pas
clôturés.
Ticket #8866.
@@ -2594,7 +2597,7 @@
-------------------

* Évolution - Les catégories et types de pièces sont maintenant paramétrables.
- Il est possible de définir si un type de pièce est ajoutable par les
+ Il est possible de définir si un type de pièce est ajoutable par les
instructeurs, et si ces pièces seront affichées sur les DA et les demandes
d'avis. Les métadonnées des pièces numérisées ont été complétées en
conséquence. Il existe également un traitement permettant de mettre à jour les
@@ -2762,7 +2765,7 @@
peut dorénavant utiliser la requête mémorisée 'statistiques_usage'. Elle
exporte des statistiques de volumétrie des dossiers instruits.
Ticket #8258.
-* Évolution - Suppression de l'interface avec le référentiel Arrêté non
+* Évolution - Suppression de l'interface avec le référentiel Arrêté non
maintenue.
* Amélioration - Optimisation de la requête SQL du widget "Dossiers auxquels on
peut proposer une autre décision". Accélération de l'affichage du tableau de
@@ -2836,13 +2839,13 @@
l'utilisateur est un instructeur polyvalent (ou un administrateur général)
rattaché à la communauté de communes.
Ticket #8239.
-* Amélioration - La recherche de dossiers dans l'écran qui permet d'imprimer
+* Amélioration - La recherche de dossiers dans l'écran qui permet d'imprimer
les attestations dans le cadre de l'affichage réglementaire ne permettait
- pas une recherche avec un numéro de dossier qui contenait des espaces (par
+ pas une recherche avec un numéro de dossier qui contenait des espaces (par
exemple : PC 013015 12 00001P0 ne renvoyait aucun résultat). La recherche
a été modifiée et permet désormais la saisie avec espaces.
Ticket #8240.
-* Amélioration - Modification du chemin de stockage des fichiers par défaut
+* Amélioration - Modification du chemin de stockage des fichiers par défaut
(../trs/1/ -> ../var/filestorage/).
Ticket #8248.
* Correction - Le bouton "Sauvegarder le pétitionnaire fréquent" était affiché

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/data/pgsql/v6.6.0.dev0.sql
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/data/pgsql/v6.6.0.dev0.sql 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/data/pgsql/v6.6.0.dev0.sql 2024-06-21 13:58:47 UTC (rev 18043)
@@ -211,6 +211,75 @@
--

--
+-- BEGIN / [#10406] Système de stockage de données arbitraires
+--
+
+CREATE TABLE "extra_data_register_def" (
+ "extra_data_register_def" integer NOT NULL,
+ "name" character varying(50) NOT NULL,
+ "description" character varying(255) NOT NULL,
+ "type" character varying(15) NOT NULL,
+ "object_name" character varying(50) NULL,
+ "max_length" integer NOT NULL,
+ -- "validator_cb" character varying(100) NULL,
+ "alias_champ_fusion" character varying(100) NULL
+);
+ALTER TABLE ONLY extra_data_register_def
+ ADD CONSTRAINT extra_data_register_def_pkey PRIMARY KEY (extra_data_register_def),
+ ADD CONSTRAINT "extra_data_register_def_object_name_name_uniq" UNIQUE ("object_name", "name");
+CREATE INDEX "extra_data_register_def_object_name_name_index" ON "extra_data_register_def" ("object_name", "name");
+COMMENT ON COLUMN "extra_data_register_def"."extra_data_register_def" IS 'Identifiant technique';
+COMMENT ON COLUMN "extra_data_register_def"."name" IS 'Nom de la donnée';
+COMMENT ON COLUMN "extra_data_register_def"."description" IS 'Description de la donnée';
+COMMENT ON COLUMN "extra_data_register_def"."type" IS 'Type de la donnée';
+COMMENT ON COLUMN "extra_data_register_def"."object_name" IS 'Objet (classe) auquel est associé la donnée';
+COMMENT ON COLUMN "extra_data_register_def"."max_length" IS 'Longueur maximale de la donnée';
+-- COMMENT ON COLUMN "extra_data_register_def"."validator_cb" IS 'Méthode de validation de la donnée (callable)';
+COMMENT ON COLUMN "extra_data_register_def"."alias_champ_fusion" IS 'Alias pour la donnée en tant que champ de fusion';
+CREATE SEQUENCE extra_data_register_def_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+CREATE TABLE "extra_data_register_values" (
+ "extra_data_register_values" integer NOT NULL,
+ "definition_ref" integer NOT NULL,
+ "object_id" character varying(255) NULL,
+ "value_int" integer NULL,
+ "value_str" character varying(255) NULL,
+ "value_text" text NULL,
+ "value_json" jsonb NULL,
+ "value_blob" bytea NULL,
+ "value_timestamp" timestamp NULL
+);
+ALTER TABLE ONLY extra_data_register_values
+ ADD CONSTRAINT extra_data_register_values_pkey PRIMARY KEY (extra_data_register_values),
+ ADD CONSTRAINT extra_data_register_def_fkey FOREIGN KEY (definition_ref) REFERENCES extra_data_register_def(extra_data_register_def),
+ ADD CONSTRAINT "extra_data_register_values_definition_ref_object_id_uniq" UNIQUE ("definition_ref", "object_id");
+CREATE INDEX "extra_data_register_values_definition_ref_object_id_index" ON "extra_data_register_values" ("definition_ref", "object_id");
+COMMENT ON COLUMN "extra_data_register_values"."extra_data_register_values" IS 'Identifiant technique';
+COMMENT ON COLUMN "extra_data_register_values"."definition_ref" IS 'Définition de la donnée';
+COMMENT ON COLUMN "extra_data_register_values"."object_id" IS 'Objet (instance) auquel est associé la donnée';
+COMMENT ON COLUMN "extra_data_register_values"."value_int" IS 'Valeur (integer) de la donnée';
+COMMENT ON COLUMN "extra_data_register_values"."value_str" IS 'Valeur (string) de la donnée';
+COMMENT ON COLUMN "extra_data_register_values"."value_text" IS 'Valeur (text) de la donnée';
+COMMENT ON COLUMN "extra_data_register_values"."value_json" IS 'Valeur (json) de la donnée';
+COMMENT ON COLUMN "extra_data_register_values"."value_blob" IS 'Valeur (binaire) de la donnée';
+COMMENT ON COLUMN "extra_data_register_values"."value_timestamp" IS 'Valeur (timestamp) de la donnée';
+CREATE SEQUENCE extra_data_register_values_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+--
+-- END / [#10406] Système de stockage de données arbitraires
+--
+
+--
-- BEGIN / [#10428] Module Association d’annexes - [#10389] [MC0044635][MC0045937] Modules Flux Platau
--

@@ -249,4 +318,4 @@

--
-- END / [#10428] Module Association d’annexes - [#10389] [MC0044635][MC0045937] Modules Flux Platau
---
\ No newline at end of file
+--

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/dyn/modules.inc.php
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/dyn/modules.inc.php 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/dyn/modules.inc.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -104,9 +104,9 @@
);

$modules_enabled_for = array(
- /*'instruction',
+ 'instruction',
'instruction_modale',
'evenement',
'dossier_instruction',
- 'task'*/
-);
\ No newline at end of file
+ 'task'
+);

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_def.class.php (from rev 18039, branches/6.6.0-develop/gen/obj/extra_data_register_def.class.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_def.class.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_def.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,230 @@
+<?php
+//$Id$
+//gen openMairie le 17/04/2024 16:35
+
+require_once "../obj/om_dbform.class.php";
+
+class extra_data_register_def_gen extends om_dbform {
+
+ protected $_absolute_class_name = "extra_data_register_def";
+
+ var $table = "extra_data_register_def";
+ var $clePrimaire = "extra_data_register_def";
+ var $typeCle = "N";
+ var $required_field = array(
+ "description",
+ "extra_data_register_def",
+ "max_length",
+ "name",
+ "type"
+ );
+ var $unique_key = array(
+ array("name","object_name"),
+ );
+ var $foreign_keys_extended = array(
+ );
+
+ /**
+ *
+ * @return string
+ */
+ function get_default_libelle() {
+ return $this->getVal($this->clePrimaire)."&nbsp;".$this->getVal("name");
+ }
+
+ /**
+ *
+ * @return array
+ */
+ function get_var_sql_forminc__champs() {
+ return array(
+ "extra_data_register_def",
+ "name",
+ "description",
+ "type",
+ "object_name",
+ "max_length",
+ "alias_champ_fusion",
+ );
+ }
+
+
+
+
+ function setvalF($val = array()) {
+ //affectation valeur formulaire
+ if (!is_numeric($val['extra_data_register_def'])) {
+ $this->valF['extra_data_register_def'] = ""; // -> requis
+ } else {
+ $this->valF['extra_data_register_def'] = $val['extra_data_register_def'];
+ }
+ $this->valF['name'] = $val['name'];
+ $this->valF['description'] = $val['description'];
+ $this->valF['type'] = $val['type'];
+ if ($val['object_name'] == "") {
+ $this->valF['object_name'] = NULL;
+ } else {
+ $this->valF['object_name'] = $val['object_name'];
+ }
+ if (!is_numeric($val['max_length'])) {
+ $this->valF['max_length'] = ""; // -> requis
+ } else {
+ $this->valF['max_length'] = $val['max_length'];
+ }
+ if ($val['alias_champ_fusion'] == "") {
+ $this->valF['alias_champ_fusion'] = NULL;
+ } else {
+ $this->valF['alias_champ_fusion'] = $val['alias_champ_fusion'];
+ }
+ }
+
+ //=================================================
+ //cle primaire automatique [automatic primary key]
+ //==================================================
+
+ function setId(&$dnu1 = null) {
+ //numero automatique
+ $this->valF[$this->clePrimaire] = $this->f->db->nextId(DB_PREFIXE.$this->table);
+ }
+
+ function setValFAjout($val = array()) {
+ //numero automatique -> pas de controle ajout cle primaire
+ }
+
+ function verifierAjout($val = array(), &$dnu1 = null) {
+ //numero automatique -> pas de verfication de cle primaire
+ }
+
+ //==========================
+ // 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("extra_data_register_def", "hidden");
+ $form->setType("name", "text");
+ $form->setType("description", "text");
+ $form->setType("type", "text");
+ $form->setType("object_name", "text");
+ $form->setType("max_length", "text");
+ $form->setType("alias_champ_fusion", "text");
+ }
+
+ // MDOE MODIFIER
+ if ($maj == 1 || $crud == 'update') {
+ $form->setType("extra_data_register_def", "hiddenstatic");
+ $form->setType("name", "text");
+ $form->setType("description", "text");
+ $form->setType("type", "text");
+ $form->setType("object_name", "text");
+ $form->setType("max_length", "text");
+ $form->setType("alias_champ_fusion", "text");
+ }
+
+ // MODE SUPPRIMER
+ if ($maj == 2 || $crud == 'delete') {
+ $form->setType("extra_data_register_def", "hiddenstatic");
+ $form->setType("name", "hiddenstatic");
+ $form->setType("description", "hiddenstatic");
+ $form->setType("type", "hiddenstatic");
+ $form->setType("object_name", "hiddenstatic");
+ $form->setType("max_length", "hiddenstatic");
+ $form->setType("alias_champ_fusion", "hiddenstatic");
+ }
+
+ // MODE CONSULTER
+ if ($maj == 3 || $crud == 'read') {
+ $form->setType("extra_data_register_def", "static");
+ $form->setType("name", "static");
+ $form->setType("description", "static");
+ $form->setType("type", "static");
+ $form->setType("object_name", "static");
+ $form->setType("max_length", "static");
+ $form->setType("alias_champ_fusion", "static");
+ }
+
+ }
+
+
+ function setOnchange(&$form, $maj) {
+ //javascript controle client
+ $form->setOnchange('extra_data_register_def','VerifNum(this)');
+ $form->setOnchange('max_length','VerifNum(this)');
+ }
+ /**
+ * Methode setTaille
+ */
+ function setTaille(&$form, $maj) {
+ $form->setTaille("extra_data_register_def", 11);
+ $form->setTaille("name", 30);
+ $form->setTaille("description", 30);
+ $form->setTaille("type", 15);
+ $form->setTaille("object_name", 30);
+ $form->setTaille("max_length", 11);
+ $form->setTaille("alias_champ_fusion", 30);
+ }
+
+ /**
+ * Methode setMax
+ */
+ function setMax(&$form, $maj) {
+ $form->setMax("extra_data_register_def", 11);
+ $form->setMax("name", 50);
+ $form->setMax("description", 255);
+ $form->setMax("type", 15);
+ $form->setMax("object_name", 50);
+ $form->setMax("max_length", 11);
+ $form->setMax("alias_champ_fusion", 100);
+ }
+
+
+ function setLib(&$form, $maj) {
+ //libelle des champs
+ $form->setLib('extra_data_register_def', __('extra_data_register_def'));
+ $form->setLib('name', __('name'));
+ $form->setLib('description', __('description'));
+ $form->setLib('type', __('type'));
+ $form->setLib('object_name', __('object_name'));
+ $form->setLib('max_length', __('max_length'));
+ $form->setLib('alias_champ_fusion', __('alias_champ_fusion'));
+ }
+ /**
+ *
+ */
+ 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
+ //==================================
+
+ /**
+ * Methode clesecondaire
+ */
+ function cleSecondaire($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ // On appelle la methode de la classe parent
+ parent::cleSecondaire($id);
+ // Verification de la cle secondaire : extra_data_register_values
+ $this->rechercheTable($this->f->db, "extra_data_register_values", "definition_ref", $id);
+ }
+
+
+}

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_values.class.php (from rev 18039, branches/6.6.0-develop/gen/obj/extra_data_register_values.class.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_values.class.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/obj/extra_data_register_values.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,280 @@
+<?php
+//$Id$
+//gen openMairie le 10/04/2024 15:38
+
+require_once "../obj/om_dbform.class.php";
+
+class extra_data_register_values_gen extends om_dbform {
+
+ protected $_absolute_class_name = "extra_data_register_values";
+
+ var $table = "extra_data_register_values";
+ var $clePrimaire = "extra_data_register_values";
+ var $typeCle = "N";
+ var $required_field = array(
+ "definition_ref",
+ "extra_data_register_values"
+ );
+ var $unique_key = array(
+ array("definition_ref","object_id"),
+ );
+ var $foreign_keys_extended = array(
+ "extra_data_register_def" => array("extra_data_register_def", ),
+ );
+
+ /**
+ *
+ * @return string
+ */
+ function get_default_libelle() {
+ return $this->getVal($this->clePrimaire)."&nbsp;".$this->getVal("definition_ref");
+ }
+
+ /**
+ *
+ * @return array
+ */
+ function get_var_sql_forminc__champs() {
+ return array(
+ "extra_data_register_values",
+ "definition_ref",
+ "object_id",
+ "value_int",
+ "value_str",
+ "value_text",
+ "value_json",
+ "value_blob",
+ "value_timestamp",
+ );
+ }
+
+ /**
+ *
+ * @return string
+ */
+ function get_var_sql_forminc__sql_definition_ref() {
+ return "SELECT extra_data_register_def.extra_data_register_def, extra_data_register_def.name FROM ".DB_PREFIXE."extra_data_register_def ORDER BY extra_data_register_def.name ASC";
+ }
+
+ /**
+ *
+ * @return string
+ */
+ function get_var_sql_forminc__sql_definition_ref_by_id() {
+ return "SELECT extra_data_register_def.extra_data_register_def, extra_data_register_def.name FROM ".DB_PREFIXE."extra_data_register_def WHERE extra_data_register_def = <idx>";
+ }
+
+
+
+
+ function setvalF($val = array()) {
+ //affectation valeur formulaire
+ if (!is_numeric($val['extra_data_register_values'])) {
+ $this->valF['extra_data_register_values'] = ""; // -> requis
+ } else {
+ $this->valF['extra_data_register_values'] = $val['extra_data_register_values'];
+ }
+ if (!is_numeric($val['definition_ref'])) {
+ $this->valF['definition_ref'] = ""; // -> requis
+ } else {
+ $this->valF['definition_ref'] = $val['definition_ref'];
+ }
+ if ($val['object_id'] == "") {
+ $this->valF['object_id'] = NULL;
+ } else {
+ $this->valF['object_id'] = $val['object_id'];
+ }
+ if (!is_numeric($val['value_int'])) {
+ $this->valF['value_int'] = NULL;
+ } else {
+ $this->valF['value_int'] = $val['value_int'];
+ }
+ if ($val['value_str'] == "") {
+ $this->valF['value_str'] = NULL;
+ } else {
+ $this->valF['value_str'] = $val['value_str'];
+ }
+ $this->valF['value_text'] = $val['value_text'];
+ $this->valF['value_json'] = $val['value_json'];
+ $this->valF['value_blob'] = $val['value_blob'];
+ $this->valF['value_timestamp'] = $val['value_timestamp'];
+ }
+
+ //=================================================
+ //cle primaire automatique [automatic primary key]
+ //==================================================
+
+ function setId(&$dnu1 = null) {
+ //numero automatique
+ $this->valF[$this->clePrimaire] = $this->f->db->nextId(DB_PREFIXE.$this->table);
+ }
+
+ function setValFAjout($val = array()) {
+ //numero automatique -> pas de controle ajout cle primaire
+ }
+
+ function verifierAjout($val = array(), &$dnu1 = null) {
+ //numero automatique -> pas de verfication de cle primaire
+ }
+
+ //==========================
+ // 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("extra_data_register_values", "hidden");
+ if ($this->is_in_context_of_foreign_key("extra_data_register_def", $this->retourformulaire)) {
+ $form->setType("definition_ref", "selecthiddenstatic");
+ } else {
+ $form->setType("definition_ref", "select");
+ }
+ $form->setType("object_id", "text");
+ $form->setType("value_int", "text");
+ $form->setType("value_str", "text");
+ $form->setType("value_text", "textarea");
+ $form->setType("value_json", "text");
+ $form->setType("value_blob", "text");
+ $form->setType("value_timestamp", "text");
+ }
+
+ // MDOE MODIFIER
+ if ($maj == 1 || $crud == 'update') {
+ $form->setType("extra_data_register_values", "hiddenstatic");
+ if ($this->is_in_context_of_foreign_key("extra_data_register_def", $this->retourformulaire)) {
+ $form->setType("definition_ref", "selecthiddenstatic");
+ } else {
+ $form->setType("definition_ref", "select");
+ }
+ $form->setType("object_id", "text");
+ $form->setType("value_int", "text");
+ $form->setType("value_str", "text");
+ $form->setType("value_text", "textarea");
+ $form->setType("value_json", "text");
+ $form->setType("value_blob", "text");
+ $form->setType("value_timestamp", "text");
+ }
+
+ // MODE SUPPRIMER
+ if ($maj == 2 || $crud == 'delete') {
+ $form->setType("extra_data_register_values", "hiddenstatic");
+ $form->setType("definition_ref", "selectstatic");
+ $form->setType("object_id", "hiddenstatic");
+ $form->setType("value_int", "hiddenstatic");
+ $form->setType("value_str", "hiddenstatic");
+ $form->setType("value_text", "hiddenstatic");
+ $form->setType("value_json", "hiddenstatic");
+ $form->setType("value_blob", "hiddenstatic");
+ $form->setType("value_timestamp", "hiddenstatic");
+ }
+
+ // MODE CONSULTER
+ if ($maj == 3 || $crud == 'read') {
+ $form->setType("extra_data_register_values", "static");
+ $form->setType("definition_ref", "selectstatic");
+ $form->setType("object_id", "static");
+ $form->setType("value_int", "static");
+ $form->setType("value_str", "static");
+ $form->setType("value_text", "textareastatic");
+ $form->setType("value_json", "static");
+ $form->setType("value_blob", "static");
+ $form->setType("value_timestamp", "static");
+ }
+
+ }
+
+
+ function setOnchange(&$form, $maj) {
+ //javascript controle client
+ $form->setOnchange('extra_data_register_values','VerifNum(this)');
+ $form->setOnchange('definition_ref','VerifNum(this)');
+ $form->setOnchange('value_int','VerifNum(this)');
+ }
+ /**
+ * Methode setTaille
+ */
+ function setTaille(&$form, $maj) {
+ $form->setTaille("extra_data_register_values", 11);
+ $form->setTaille("definition_ref", 11);
+ $form->setTaille("object_id", 30);
+ $form->setTaille("value_int", 11);
+ $form->setTaille("value_str", 30);
+ $form->setTaille("value_text", 80);
+ $form->setTaille("value_json", 10);
+ $form->setTaille("value_blob", 10);
+ $form->setTaille("value_timestamp", 8);
+ }
+
+ /**
+ * Methode setMax
+ */
+ function setMax(&$form, $maj) {
+ $form->setMax("extra_data_register_values", 11);
+ $form->setMax("definition_ref", 11);
+ $form->setMax("object_id", 255);
+ $form->setMax("value_int", 11);
+ $form->setMax("value_str", 255);
+ $form->setMax("value_text", 6);
+ $form->setMax("value_json", -5);
+ $form->setMax("value_blob", -5);
+ $form->setMax("value_timestamp", 8);
+ }
+
+
+ function setLib(&$form, $maj) {
+ //libelle des champs
+ $form->setLib('extra_data_register_values', __('extra_data_register_values'));
+ $form->setLib('definition_ref', __('definition_ref'));
+ $form->setLib('object_id', __('object_id'));
+ $form->setLib('value_int', __('value_int'));
+ $form->setLib('value_str', __('value_str'));
+ $form->setLib('value_text', __('value_text'));
+ $form->setLib('value_json', __('value_json'));
+ $form->setLib('value_blob', __('value_blob'));
+ $form->setLib('value_timestamp', __('value_timestamp'));
+ }
+ /**
+ *
+ */
+ function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
+
+ // definition_ref
+ $this->init_select(
+ $form,
+ $this->f->db,
+ $maj,
+ null,
+ "definition_ref",
+ $this->get_var_sql_forminc__sql("definition_ref"),
+ $this->get_var_sql_forminc__sql("definition_ref_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('extra_data_register_def', $this->retourformulaire))
+ $form->setVal('definition_ref', $idxformulaire);
+ }// fin validation
+ $this->set_form_default_values($form, $maj, $validation);
+ }// fin setValsousformulaire
+
+ //==================================
+ // cle secondaire
+ //==================================
+
+
+}

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_def.inc.php (from rev 18039, branches/6.6.0-develop/gen/sql/pgsql/extra_data_register_def.inc.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_def.inc.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_def.inc.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,61 @@
+<?php
+//$Id$
+//gen openMairie le 17/04/2024 21:21
+
+$DEBUG=0;
+$serie=15;
+$ent = __("application")." -> ".__("extra_data_register_def");
+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."extra_data_register_def";
+// SELECT
+$champAffiche = array(
+ 'extra_data_register_def.extra_data_register_def as "'.__("extra_data_register_def").'"',
+ 'extra_data_register_def.name as "'.__("name").'"',
+ 'extra_data_register_def.description as "'.__("description").'"',
+ 'extra_data_register_def.type as "'.__("type").'"',
+ 'extra_data_register_def.object_name as "'.__("object_name").'"',
+ 'extra_data_register_def.max_length as "'.__("max_length").'"',
+ 'extra_data_register_def.alias_champ_fusion as "'.__("alias_champ_fusion").'"',
+ );
+//
+$champNonAffiche = array(
+ );
+//
+$champRecherche = array(
+ 'extra_data_register_def.extra_data_register_def as "'.__("extra_data_register_def").'"',
+ 'extra_data_register_def.name as "'.__("name").'"',
+ 'extra_data_register_def.description as "'.__("description").'"',
+ 'extra_data_register_def.type as "'.__("type").'"',
+ 'extra_data_register_def.object_name as "'.__("object_name").'"',
+ 'extra_data_register_def.max_length as "'.__("max_length").'"',
+ 'extra_data_register_def.alias_champ_fusion as "'.__("alias_champ_fusion").'"',
+ );
+$tri="ORDER BY extra_data_register_def.name ASC NULLS LAST";
+$edition="extra_data_register_def";
+/**
+ * Gestion de la clause WHERE => $selection
+ */
+// Filtre listing standard
+$selection = "";
+
+/**
+ * Gestion SOUSFORMULAIRE => $sousformulaire
+ */
+$sousformulaire = array(
+ 'extra_data_register_values',
+);
+

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_values.inc.php (from rev 18039, branches/6.6.0-develop/gen/sql/pgsql/extra_data_register_values.inc.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_values.inc.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/gen/sql/pgsql/extra_data_register_values.inc.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,64 @@
+<?php
+//$Id$
+//gen openMairie le 10/04/2024 15:38
+
+$DEBUG=0;
+$serie=15;
+$ent = __("application")." -> ".__("extra_data_register_values");
+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."extra_data_register_values
+ LEFT JOIN ".DB_PREFIXE."extra_data_register_def
+ ON extra_data_register_values.definition_ref=extra_data_register_def.extra_data_register_def ";
+// SELECT
+$champAffiche = array(
+ 'extra_data_register_values.extra_data_register_values as "'.__("extra_data_register_values").'"',
+ 'extra_data_register_def.name as "'.__("definition_ref").'"',
+ 'extra_data_register_values.object_id as "'.__("object_id").'"',
+ 'extra_data_register_values.value_int as "'.__("value_int").'"',
+ 'extra_data_register_values.value_str as "'.__("value_str").'"',
+ 'extra_data_register_values.value_json as "'.__("value_json").'"',
+ 'extra_data_register_values.value_blob as "'.__("value_blob").'"',
+ 'extra_data_register_values.value_timestamp as "'.__("value_timestamp").'"',
+ );
+//
+$champNonAffiche = array(
+ 'extra_data_register_values.value_text as "'.__("value_text").'"',
+ );
+//
+$champRecherche = array(
+ 'extra_data_register_values.extra_data_register_values as "'.__("extra_data_register_values").'"',
+ 'extra_data_register_def.name as "'.__("definition_ref").'"',
+ 'extra_data_register_values.object_id as "'.__("object_id").'"',
+ 'extra_data_register_values.value_int as "'.__("value_int").'"',
+ 'extra_data_register_values.value_str as "'.__("value_str").'"',
+ );
+$tri="ORDER BY extra_data_register_def.name ASC NULLS LAST";
+$edition="extra_data_register_values";
+/**
+ * Gestion de la clause WHERE => $selection
+ */
+// Filtre listing standard
+$selection = "";
+// Liste des clés étrangères avec leurs éventuelles surcharges
+$foreign_keys_extended = array(
+ "extra_data_register_def" => array("extra_data_register_def", ),
+);
+// Filtre listing sous formulaire - extra_data_register_def
+if (in_array($retourformulaire, $foreign_keys_extended["extra_data_register_def"])) {
+ $selection = " WHERE (extra_data_register_values.definition_ref = ".intval($idxformulaire).") ";
+}
+

Index: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj 2024-06-21 13:58:47 UTC (rev 18043)

Property changes on: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj
___________________________________________________________________
Modified: svn:mergeinfo
## -672,7 +672,9 ##
/branches/6.5.0-develop-error-contrainte-traitement-sig/obj:17384-17432
/branches/6.5.0-develop_fix_avis_produit_onglet_pieces/obj:17288-17414
/branches/6.6.0-10411/obj:17736-17870
-/branches/6.6.0-develop/obj:17864-18018
+/branches/6.6.0-develop/obj:17864-18039
+/branches/6.6.0-develop--fix-evol-mod/obj:17681-18023
+/branches/6.6.0-develop--impl-extra-data/obj:17897-18034
/branches/6.6.0-develop--improve-task/obj:17580-17609
/branches/6.6.0-develop-10391-SupportPlatAuSousDossier/obj:17581-17697
/branches/6.6.0-develop-10409-GestionTODO/obj:17700-17768
Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_def.class.php (from rev 18039, branches/6.6.0-develop/obj/extra_data_register_def.class.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_def.class.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_def.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,9 @@
+<?php
+//$Id$
+//gen openMairie le 25/03/2024 14:46
+
+require_once "../gen/obj/extra_data_register_def.class.php";
+
+class extra_data_register_def extends extra_data_register_def_gen {
+
+}

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_values.class.php (from rev 18039, branches/6.6.0-develop/obj/extra_data_register_values.class.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_values.class.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_register_values.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,18 @@
+<?php
+//$Id$
+//gen openMairie le 25/03/2024 14:46
+
+require_once "../gen/obj/extra_data_register_values.class.php";
+
+class extra_data_register_values extends extra_data_register_values_gen {
+
+ function setvalF($val = array()) {
+ foreach(array('int', 'str', 'text', 'json', 'blob', 'timestamp') as $type) {
+ $key = "value_$type";
+ if (! isset($val[$key])) {
+ $val[$key] = null;
+ }
+ }
+ return parent::setValF($val);
+ }
+}

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.abstract.php (from rev 18039, branches/6.6.0-develop/obj/extra_data_store.abstract.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.abstract.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.abstract.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,104 @@
+<?php
+
+require_once __DIR__.'/utils.class.php';
+
+/**
+ * Interface d'implémentation d'un stockage de données « supplémentaires »
+ */
+abstract class extra_data_store_abs {
+
+ /**
+ * Initialisation d'une instance.
+ *
+ * @param om_application $framework Une instance du framwork.
+ *
+ * @return extra_data_store_abs
+ */
+ public function __construct(application $framework) {
+ $this->framework = $framework;
+ }
+
+ /**
+ * Déclare une donnée « supplémentaire ».
+ *
+ * @param string $object_name Nom de l'objet auquel est rattaché cette donnée
+ * @param string $name Nom de la donnée
+ * @param string $type Type de la donnée (int, str, json, blob, timestamp, etc)
+ * @param int $length Taille maximale de la donnée
+ * @param string $libelle Description de la donnée (dans les formulaires par ex.)
+ * @param bool $list 'true' si le champ doit être montré dans les listing
+ * @param bool $search 'true' si le champ doit être recherchable
+ * @param string $alias Alias de champ de fusion
+ *
+ * @return bool|string 'true' si l'opération s'est bien passé, sinon un message d'erreur
+ */
+ abstract public function setup_data(string $object_name, string $name, string $type, int $length, string $libelle, bool $list = false, bool $search = false, string $alias = '');
+
+ /**
+ * Enregistre une donnée « supplémentaire » en base de données.
+ *
+ * @param string $object_name Le nom de l'objet (ou sa classe) correspondant à sa table en BDD
+ * @param array $object_ids La liste des identifiants des objets concernés
+ * @param string $data_name Le nom de la valeur stockée (nom du champ ou de la clé)
+ * @param string $data_type Le type de donnée à stocker (int, str, json, blob, timestamp, etc.)
+ * @param mixed $data_value La valeur à stocker
+ *
+ * @return extra_data_result|false
+ * @return array ([(<id objet>, <id donnée>), ...]|null, <message>|null)
+ * si l'opération a échouée le premier élément sera null,
+ * et un message d'erreur indiquera la raison de l'échec,
+ * sinon c'est l'inverse, le premier élément sera un tableau et il n'y
+ * aura aucun message (null).
+ */
+ abstract public function store_data(string $object_name, array $object_ids, string $data_name, string $data_type, $data_value);
+
+ /**
+ * Récupère une donnée « supplémentaire » en base de données.
+ *
+ * @param string $object_name Le nom de l'objet (ou sa classe) correspondant à sa table en BDD
+ * @param array $object_ids La liste des identifiants des objets concernés
+ * @param string $data_name Le nom de la valeur stockée (nom du champ ou de la clé)
+ * @param string $data_type Le type de donnée à stocker (int, str, json, blob, timestamp, etc.)
+ *
+ * @return extra_data_result
+ * @return array ([(<id objet>, <id donnée>, <valeur>), ...]|null, <message>|null)
+ * si l'opération a échouée le premier élément sera null,
+ * et un message d'erreur indiquera la raison de l'échec,
+ * sinon c'est l'inverse, le premier élément sera un tableau et il n'y
+ * aura aucun message (null).
+ */
+ abstract public function get_data(string $object_name, array $object_ids, string $data_name, string $data_type);
+
+ // TODO document
+ abstract public function update_data(array $data_ids, string $data_type, $data_value);
+
+ // TODO document
+ abstract public function delete_data(array $data_ids, string $data_type);
+
+ /**
+ * Log un message en lui ajoutant un préfixe.
+ *
+ * @param string $method La méthode d'où provient le message (càd: __METHOD__)
+ * @param string $message Le message à écire dans le ficheir de logs
+ * @param string $level Le niveau de log
+ *
+ * @return void
+ */
+ protected function log(string $method, string $message, string $level = 'DEBUG') {
+
+ $this->framework->log($method, $message, $level);
+ }
+}
+
+/**
+ * Représente un résultat d'un appel à l'une des méthodes store/get.
+ */
+class extra_data_result {
+ public ?array $items = null;
+ public ?string $error_message = null;
+
+ public function __construct(?array $items, ?string $err_msg) {
+ $this->items = $items;
+ $this->error_message = $err_msg;
+ }
+}

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.impl_2_tables.php (from rev 18039, branches/6.6.0-develop/obj/extra_data_store.impl_2_tables.php)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.impl_2_tables.php (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/extra_data_store.impl_2_tables.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,371 @@
+<?php
+
+require_once __DIR__.'/extra_data_store.abstract.php';
+
+//use \RuntimeException;
+
+class extra_data_store_2_tables extends extra_data_store_abs {
+
+ /**
+ * Déclare une donnée « supplémentaire ».
+ *
+ * @param string $object_name Nom de l'objet auquel est rattaché cette donnée
+ * @param string $name Nom de la donnée
+ * @param string $type Type de la donnée (int, str, json, blob, timestamp, etc)
+ * @param int $length Taille maximale de la donnée
+ * @param string $libelle Description de la donnée (dans les formulaires par ex.)
+ * @param bool $list 'true' si le champ doit être montré dans les listing
+ * @param bool $search 'true' si le champ doit être recherchable
+ * @param string $alias Alias de champ de fusion
+ *
+ * @return bool|string 'true' si l'opération s'est bien passé, sinon un message d'erreur
+ */
+ public function setup_data(string $object_name, string $name, string $type, int $length, string $libelle, bool $list = false, bool $search = false, string $alias = '') {
+ // si le champ n'a pas été défini dans la table de définition
+ if (! ($field_def_inst = $this->get_field_definition($object_name, $name))) {
+
+ // on le défini
+ $val = array(
+ 'extra_data_register_def' => ']',
+ 'object_name' => $object_name,
+ 'name' => $name,
+ 'type' => $type,
+ 'max_length' => $length,
+ 'description' => $libelle,
+ 'alias_champ_fusion' => ! empty($alias) ? $alias : null
+ );
+ $field_def_inst = $this->framework->get_inst__om_dbform(
+ array('obj' => 'extra_data_register_def', 'idx' => ']'));
+ $this->log(__METHOD__, "ajoute le champ dynamique ($object_name, $name) avec: ".var_export($val, true));
+ if (! ($res = $field_def_inst->ajouter($val))) {
+ $err_msg = sprintf(
+ __("Échec de l'enregistrement de la définition du champ dynamique '%s'."), $name);
+ $err_msg_detail = $this->framework->remove_html_tags($field_def_inst->msg);
+ $this->log(__METHOD__, $err_msg .' '.sprintf(__("Détail: %s."), $err_msg_detail),
+ 'CRITICAL');
+ return $err_msg;
+ }
+ $this->log(__METHOD__, "ajout du champ dynamique ($object_name, $name)");
+ }
+ return true;
+ }
+
+ /**
+ * Enregistre une donnée « supplémentaire » en base de données.
+ *
+ * @param string $object_name Le nom de l'objet (ou sa classe) correspondant à sa table en BDD
+ * @param array $object_ids La liste des identifiants des objets concernés
+ * @param string $data_name Le nom de la valeur stockée (nom du champ ou de la clé)
+ * @param string $data_type Le type de donnée à stocker (int, str, json, blob, timestamp, etc.)
+ * @param mixed $data_value La valeur à stocker
+ *
+ * @return extra_data_result
+ * @return array ([(<id objet>, <id donnée>), ...]|null, <message>|null)
+ * si l'opération a échouée le premier élément sera null,
+ * et un message d'erreur indiquera la raison de l'échec,
+ * sinon c'est l'inverse, le premier élément sera un tableau et il n'y
+ * aura aucun message (null).
+ */
+ public function store_data(string $object_name, array $object_ids, string $data_name, string $data_type, $data_value) {
+ // récupération de la définition du champ
+ $def_id = $this->get_field_definition_id($object_name, $data_name);
+ if (empty($def_id)) {
+ return new extra_data_result(null, sprintf(
+ __("Erreur: aucune définition pour l'objet '%s' et la donnée '%s'"),
+ $object_name, $data_name));
+ }
+
+ // nombre d'objets concernés
+ $object_ids_count = count($object_ids);
+
+ // TODO implémenter le cas avec aucun identifiant d'objet (valeur de classe)
+
+ $value_name = "value_$data_type";
+
+ // cas d'un identifiant unique d'objet
+ if ($object_ids_count === 1) {
+
+ // récupère l'instance de la valeur du champ dynamique
+ $obj_id = $object_ids[0];
+ $obj_id_escaped = $this->framework->db->escapeSimple($obj_id);
+ $sqlWhere = " definition_ref = $def_id AND object_id = '$obj_id_escaped'";
+ $field_val_inst = $this->framework->findObjectByCondition(
+ 'extra_data_register_values', $sqlWhere);
+
+ // la valeur existe
+ if (! empty($field_val_inst)) {
+ $val = $field_val_inst->get_array_val();
+ foreach($val as $key => $value) {
+ if (strpos($key, 'value_') === 0) {
+ $val[$key] = null;
+ }
+ }
+ $val[$value_name] = $data_value;
+ $this->log(__METHOD__, "updating value record with: ".
+ var_export($val, true));
+
+ // modification de la valeur
+ $field_val_inst->setParameter('maj', 1);
+ if (! $field_val_inst->modifier($val)) {
+ $this->log(
+ __METHOD__,
+ "failed to update value record for ".
+ "'extra_data_register_values' with: ".var_export($val, true).
+ ". Detail: ".$this->framework->remove_html_tags($field_val_inst->msg),
+ 'CRITICAL');
+ return new extra_data_result(null, $this->framework->remove_html_tags($field_val_inst->msg));
+ } else {
+ $val_id = $field_val_inst->getVal($field_val_inst->clePrimaire);
+ $this->log(__METHOD__,
+ "valeur modifiée (#$val_id, d:$def_id, obj:$object_name, ".
+ "id:$obj_id, f:$data_name, v:$value_name)".
+ ". Detail: ".$this->framework->remove_html_tags($field_val_inst->msg),
+ 'INFO');
+ }
+
+ // nouvelle valeur
+ } else {
+ $val = array(
+ 'extra_data_register_values' => ']',
+ $value_name => $data_value,
+ 'definition_ref' => $def_id,
+ 'object_id' => $obj_id);
+ $field_val_inst = $this->framework->get_inst__om_dbform(
+ array('obj' => 'extra_data_register_values', 'idx' => ']'));
+ $this->log(__METHOD__, "adding value record with: ".
+ var_export($val, true));
+
+ // ajout de la valeur
+ $this->log(__METHOD__, "setting 'maj' = 0");
+ $field_val_inst->setParameter('maj', 0);
+ if (! $field_val_inst->ajouter($val)) {
+ $this->log(
+ __METHOD__,
+ "failed to add value record for ".
+ "'extra_data_register_values' with: ".var_export($val, true).
+ ". Detail: ".$this->framework->remove_html_tags($field_val_inst->msg),
+ 'CRITICAL');
+ return array(null, $this->framework->remove_html_tags($field_val_inst->msg));
+ } else {
+ $val_id = $field_val_inst->getVal($field_val_inst->clePrimaire);
+ $this->log(__METHOD__,
+ "valeur ajoutée (#$val_id, d:$def_id, obj:$object_name, ".
+ "id:$obj_id, f:$data_name, v:$value_name).",
+ 'INFO');
+ }
+ $field_val_inst = $field_val_inst;
+ }
+ return new extra_data_result(
+ array(array($obj_id, $val_id)), null);
+ }
+
+ // multiple objets concernés
+ elseif ($object_ids_count > 1) {
+
+ // prépare une requête SQL de modification multiple
+ // qui insère les nouvelles données et en cas de conflit
+ // modifie les données existantes
+ $sql =
+ "INSERT INTO extra_data_register_values (
+ extra_data_register_values,
+ definition_ref,
+ object_id,
+ $value_name)
+ VALUES ";
+ foreach($object_ids as $obj_id) {
+ $obj_id_escaped = $this->framework->db->escapeSimple($obj_id);
+ $data_value_escaped = $this->framework->db->escapeSimple($data_value);
+ if ($data_type != 'int') {
+ $data_value_escaped = "'$data_value_escaped'";
+ }
+ $sql .= "
+ (nextval('extra_data_register_values'),
+ $def_id, '$obj_id_escaped', $data_value_escaped),";
+ }
+ $sql = preg_replace(',$', '', $sql);
+ $sql .= "
+ ON CONFLICT (definition_ref, object_id) DO UPDATE SET
+ $value_name = EXCLUDED.$data_type
+ RETURNING object_id, extra_data_register_values;
+ ";
+
+ $this->log(__METHOD__, "sql: $sql");
+
+ // exécute la requête SQL
+ $qres = $this->framework->execute_db_query($sql, array('origin', __METHOD__));
+
+ // si quelque chose s'est mal passé
+ if ($qres['code'] != 'OK') {
+
+ // on renvoie le message d'erreur
+ return array(null, $this->framework->remove_html_tags($qres['message']));
+ }
+
+ // sinon on récupère la liste des identifiants des données
+ $tuples = array();
+ foreach($qres['result'] as $qr) {
+ $tuples[] = array($qr['object_id'], $qr['extra_data_register_values']);
+ }
+ return new extra_data_result($tuples, null);
+ }
+ return false;
+ }
+
+ /**
+ * Récupère une donnée « supplémentaire » en base de données.
+ *
+ * @param string $object_name Le nom de l'objet (ou sa classe) correspondant à sa table en BDD
+ * @param array $object_ids La liste des identifiants des objets concernés
+ * @param string $data_name Le nom de la valeur stockée (nom du champ ou de la clé)
+ * @param string $data_type Le type de donnée à stocker (int, str, json, blob, timestamp, etc.)
+ *
+ * @return extra_data_result
+ * @return array ([(<id objet>, <id donnée>, <valeur>), ...]|null, <message>|null)
+ * si l'opération a échouée le premier élément sera null,
+ * et un message d'erreur indiquera la raison de l'échec,
+ * sinon c'est l'inverse, le premier élément sera un tableau et il n'y
+ * aura aucun message (null).
+ */
+ public function get_data(string $object_name, array $object_ids, string $data_name, string $data_type) {
+ // récupération de la définition du champ
+ $def_id = $this->get_field_definition_id($object_name, $data_name);
+ if (empty($def_id)) {
+ return new extra_data_result(null, sprintf(
+ __("Erreur: aucune définition pour l'objet '%s' et la donnée '%s'"),
+ $object_name, $data_name));
+ }
+
+ // nombre d'objets concernés
+ $object_ids_count = count($object_ids);
+
+ // TODO implémenter le cas avec aucun identifiant d'objet (valeur de classe)
+
+ $value_name = "value_$data_type";
+
+ // cas d'un identifiant unique d'objet
+ if ($object_ids_count === 1) {
+
+ // récupère l'instance de la valeur du champ dynamique
+ $obj_id = $object_ids[0];
+ $obj_id_escaped = $this->framework->db->escapeSimple($obj_id);
+ $sqlWhere = " definition_ref = $def_id AND object_id = '$obj_id_escaped'";
+ $field_val_inst = $this->framework->findObjectByCondition(
+ 'extra_data_register_values', $sqlWhere);
+
+ // la valeur existe
+ if (! empty($field_val_inst)) {
+ $val_id = $field_val_inst->getVal($field_val_inst->clePrimaire);
+ $value = $field_val_inst->getVal($value_name);
+ $this->framework->log(__METHOD__, "La valeur '#$val_id' pour l'objet '#$obj_id' (def: $def_id) vaut ($value_name): ".var_export($value, true));
+ $this->framework->log(__METHOD__, "champs: ".print_r($field_val_inst->champs, true));
+ $this->framework->log(__METHOD__, "val: ".print_r($field_val_inst->val, true));
+ return new extra_data_result(
+ array(array($obj_id, $val_id, $value)), null);
+ }
+ $this->framework->log(__METHOD__, "La valeur pour l'objet '#$obj_id' (def: $def_id) n'existe pas");
+
+ // la valeur n'existe pas
+ return new extra_data_result(
+ array(array($obj_id, $val_id, $value)), null);
+ }
+
+ // multiple objets concernés
+ elseif ($object_ids_count > 1) {
+
+ /*if ($object_ids_count > 1000) {
+ throw new ExtraDataException(
+ __("Liste d'objets supérieure à 1000 éléments non supportée"));
+ }*/
+
+ // prépare une requête SQL d'interrogation multiple
+ $sql = "
+ SELECT object_id, extra_data_register_values, $value_name
+ FROM extra_data_register_values
+ WHERE definition_ref = $def_id AND object_id IN (";
+ foreach($object_ids as $obj_id) {
+ $obj_id_escaped = $this->framework->db->escapeSimple($obj_id);
+ $sql .= "'$obj_id_escaped',";
+ }
+ $sql = preg_replace(',$', '', $sql);
+ $sql .= ");";
+
+ $qres = $this->framework->get_all_results_from_db_query($sql, array('origin' => __METHOD__));
+
+ // si quelque chose s'est mal passé
+ if ($qres['code'] != 'OK') {
+
+ // on renvoie le message d'erreur
+ return new extra_data_result(null, $this->framework->remove_html_tags($qres['message']));
+ }
+
+ // sinon on récupère la liste des identifiants des données
+ $tuples = array();
+ foreach($qres['result'] as $qr) {
+ $tuples[] = array(
+ $qr['object_id'], $qr['extra_data_register_values'], $qr[$value_name]);
+ }
+
+ return new extra_data_result($tuples, null);
+ }
+
+ // aucun objet concerné
+ return new extra_data_result(array(), null);
+ }
+
+ // TODO implémenter la mise à jour d'une donnée (puisqu'on fourni l'id lors du stockage)
+ public function update_data(array $data_ids, string $data_type, $data_value) {
+ throw new RuntimeException("Not implemented yet");
+ }
+
+ // TODO implémenter la suppression de données
+ public function delete_data(array $data_ids, string $data_type) {
+ throw new RuntimeException("Not implemented yet");
+ }
+
+ /**
+ * Renvoie un objet représentant la définition de la donnée, stockée en BDD.
+ *
+ * @param string $object_name L'objet concerné par cette donnée
+ * @param string $data_name Le nom de la donnée
+ *
+ * @return boolean 'true' si le champ est déjà défini, 'false' sinon
+ */
+ protected function get_field_definition(string $object_name, string $data_name) {
+ $this->log(__METHOD__, 'BEGIN');
+ $data_name_escaped = $this->framework->db->escapeSimple($data_name);
+ $sqlWhere = "name = '".$data_name_escaped."'";
+ if (! empty($object_name)) {
+ $object_name_escaped = $this->framework->db->escapeSimple($object_name);
+ $sqlWhere .= " AND object_name = '".$object_name_escaped."'";
+ }
+ $this->log(__METHOD__, "sql WHERE: $sqlWhere");
+ $ret = $this->framework->findObjectByCondition('extra_data_register_def', $sqlWhere);
+ if (! empty($ret)) {
+ $this->log(__METHOD__, 'return: '.get_class($ret).'#'.$ret->getVal($ret->clePrimaire));
+ } else {
+ $this->log(__METHOD__, 'return: '.var_export($ret, true));
+ }
+ $this->log(__METHOD__, 'END');
+ return $ret;
+ }
+
+ /**
+ * Renvoie l'identifiant de l'enregistrement en BDD de la définition du champ dynamique.
+ *
+ * @param string $object_name Le type d'objet auquel est rattaché le champ dynamique
+ * @param string $name Le nom du champ dynamique
+ *
+ * @return string
+ */
+ protected function get_field_definition_id(string $object_name, string $name) {
+ if (empty($this->field_def_inst)) {
+ if (! ($field_def_inst = $this->get_field_definition($object_name, $name))) {
+ throw new RuntimeException(
+ "Échec de la récupération de la définition du champ ".
+ "($object_name, $name)");
+ }
+ $this->field_def_inst = $field_def_inst;
+ }
+ return $this->field_def_inst->getVal($this->field_def_inst->clePrimaire);
+ }
+}

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/instruction.class.php
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/instruction.class.php 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/instruction.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -112,27 +112,57 @@
* Méthode appelée par le module_manager lors de la récupération des modules de cet objet.
* Permet d'ajouer des modules en plus de ceux récupérer par défaut par le module_manager.
*
+ * @param bool $only_for_class Ne renvoie que les modules pour la classe de l'objet
+ *
* @return array Liste de modules supplémentaires pour cet objet
*/
- public function get_modules_append() {
+ public function get_modules_append(bool $only_for_class = false) {
$modules = array();

- // si on est dans le cadre de l'affichage d'une nouvelle instruction
- $action = $this->f->get_submitted_get_value('action');
- if ($action == '0') {
+ // si on est sur un dossier d'instruction
+ if ($this->f->contexte_dossier_instruction()) {
+ $idx = $this->f->get_submitted_get_value('idxformulaire');
+ if (! empty($idx)) {

- // si on est sur un dossier d'instruction
- if ($this->f->contexte_dossier_instruction()) {
- $idx = $this->f->get_submitted_get_value('idxformulaire');
- if (! empty($idx)) {
+ // si on est dans le cadre de l'affichage d'une nouvelle instruction
+ $action = $this->f->get_submitted_get_value('action');
+ if ($action == '0') {

// ajoute les modules des évènements possible sur le dossier courant
$evenements_data = $this->get_var_sql_forminc__sql_evenement();
- $evenements_ids = array_map(function($item) { return $item['evenement']; }, $evenements_data);
+ $evenements_ids = array_column($evenements_data, 'evenement');
$this->f->log(__METHOD__, 'evenements: '.implode(',', $evenements_ids));
$modules = $this->f->module_manager->get_modules_for_object_name_and_ids(
'evenement', $evenements_ids, $this, false);
}
+
+ // si on est dans le cadre d'un listing
+ else if (is_null($action) || $action === '') {
+
+ // récupère la liste des évènements d'instructions du dossier d'instruction
+ $sql = sprintf("
+ SELECT
+ evenement
+ FROM
+ ".DB_PREFIXE."instruction
+ WHERE
+ dossier = '%s'
+ ", $this->f->db->escapeSimple($idx));
+ $qres = $this->f->get_all_results_from_db_query(
+ $sql, array('origin' => __METHOD__));
+ if ($qres['code'] !== 'OK') {
+ $err_msg = "Failed to execute SQL: $sql. Detail: ".($qres['message'] ?? '');
+ $this->f->log(__METHOD__, $err_msg, 'ERROR');
+ throw new RuntimeException($err_msg);
+ }
+
+ // ajoute les modules des évènements des instructions du dossier courant
+ $evenements_ids = array_column($qres['result'], 'evenement');
+ $this->f->log(__METHOD__, 'evenements: '.implode(',', $evenements_ids));
+ $linked_object = ! $only_for_class ? $this : null;
+ $modules = $this->f->module_manager->get_modules_for_object_name_and_ids(
+ 'evenement', $evenements_ids, $linked_object, false);
+ }
}
}
return $modules;

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/lien_module.class.php
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/lien_module.class.php 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/lien_module.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -149,4 +149,26 @@
$form->setSelect('module', $modules_select_options);
}
}
+
+ public function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ $this->f->log(__METHOD__, 'BEGIN');
+ $res = parent::triggerajouterapres($id, $dnu1, $val, $dnu2);
+ $module = $this->f->module_manager->get_module_for_link_instance($this);
+ if (empty($module)) {
+ throw new RuntimeException("Failed to get module");
+ }
+ $module->setup('add');
+ $this->f->log(__METHOD__, 'END');
+ }
+
+ public function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ $this->f->log(__METHOD__, 'BEGIN');
+ $res = parent::triggermodifierapres($id, $dnu1, $val, $dnu2);
+ $module = $this->f->module_manager->get_module_for_link_instance($this);
+ if (empty($module)) {
+ throw new RuntimeException("Failed to get module");
+ }
+ $module->setup('edit');
+ $this->f->log(__METHOD__, 'END');
+ }
}

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module.class.php
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module.class.php 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -119,9 +119,11 @@
/**
* Permet d'effectuer des actions lors de l'instanciation
*
+ * @param string $action L'action en cours (add, edit, delete)
+ *
* @return void
*/
- public function setup() {
+ public function setup(string $action) {
$this->log(__METHOD__, 'BEGIN');
$this->log(__METHOD__, 'END');
}

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module_manager.class.php
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module_manager.class.php 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/module_manager.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -6,8 +6,10 @@
namespace Module;

require_once __DIR__."/utils.class.php";
+require_once __DIR__."/lien_module.class.php";
use \application;
use \om_dbform;
+use \lien_module;
use \RuntimeException;

class module_manager
@@ -422,7 +424,24 @@
return;
}
$this->log(__METHOD__, "($hook, $object_name) BEGIN");
- $modules = $this->get_modules_for_object_name_and_ids($object_name);
+
+ // instancie un objet vide, permettant d'appeler les méthodes de surcharge des
+ // modules (de la classe de l'objet)
+ $object_empty = $this->framework->get_inst__om_dbform(array(
+ 'obj' => $object_name,
+ 'idx' => ']',
+ ));
+
+ // charge les modules en passant par l'objet ou bien la méthode « standard »
+ if (is_null($modules = $object_empty->get_modules_override(true))) {
+ $modules = $this->get_modules_for_object_name_and_ids($object_name);
+
+ // charge les éventuels modules supplémentaires
+ if (! empty($extra_modules = $object_empty->get_modules_append(true))) {
+ $modules = array_merge($modules, $extra_modules);
+ }
+ }
+
foreach($modules as $module) {
$method_name = $object_name.'_'.$hook;
if(method_exists($module, $method_name)) {
@@ -590,7 +609,7 @@
$this->log(__METHOD__, "($object_name, $object_ids_text) loading modules for hash".
" '$object_class_hash'");
$object_class_modules = $this->load_modules_for_object_name_and_ids(
- $object_name, '', $object);
+ $object_name, null, $object);
$this->modules_by_object[$object_class_hash] = $object_class_modules;
} else {
$this->log(__METHOD__, "($object_name, $object_ids_text) getting preloaded modules".
@@ -792,7 +811,6 @@
$module_instance = new $module_class_path($module_dir, $this->framework, $wf_module_link, $object);
$this->log(__METHOD__, "$debug_base module: loaded module '$module_class_path'");
$module_instance->set_parameters($wf_module_link->getVal('parametres'), 'ini');
- $module_instance->setup();
$modules[] = $module_instance;
}
$this->log(__METHOD__, "$debug_base END");
@@ -880,4 +898,40 @@
}
return $this->modules_related[$object_name];
}*/
+
+ /**
+ * Renvoi un module correspondant à l'instance de lien_module fournie.
+ *
+ * @param lien_module $wf_module_link Instance de lien module
+ * @param mixed $object Un objet métier à associer au module
+ *
+ * @return module|null
+ */
+ public function get_module_for_link_instance(lien_module $wf_module_link, $object = null) {
+ $module_name = $wf_module_link->getVal('module');
+ $module_dir = $this->get_modules_dir();
+ $module_script = "$module_dir/$module_name.php";
+ $this->log(__METHOD__, "script '$module_script'");
+
+ if (! is_file($module_script)) {
+ $module_dir = dirname($module_script).'/'.basename($module_script, '.php');
+ if (! is_dir($module_dir)) return null;
+ $module_script = "$module_dir/$module_name.php";
+ if (! is_file($module_script)) return null;
+ }
+
+ $this->log(__METHOD__, "module: loading module '$module_script'");
+ $module_name = basename($module_script, '.php');
+ $this->log(__METHOD__, "loading module '$module_name' (id:".$wf_module_link->getVal($wf_module_link->clePrimaire).", ordre:".$wf_module_link->getVal('ordre').")");
+ require_once $module_script;
+ $module_name_camel = str_replace(' ', '', ucfirst(preg_replace('/[^a-zA-Z0-9]/', ' ', $module_name)));
+ $module_namespace = "Module\\$module_name_camel";
+ $module_class = $module_name;
+ $module_class_path = $module_namespace.'\\'.$module_class;
+ $this->log(__METHOD__, "module: module classpath '$module_class_path'");
+ $module_instance = new $module_class_path($module_dir, $this->framework, $wf_module_link, $object);
+ $this->log(__METHOD__, "module: loaded module '$module_class_path'");
+ $module_instance->set_parameters($wf_module_link->getVal('parametres'), 'ini');
+ return $module_instance;
+ }
}

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/om_dbform.class.php
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/om_dbform.class.php 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/om_dbform.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -359,6 +359,14 @@
$data = array('val' => &$val, 'id' => $id);
$this->f->module_manager->run_hooks('triggerajouterapres_pre', $this, $data);
$res = parent::triggerajouterapres($id, $dnu1, $val);
+
+ // Assigner les champs 'valF' à 'val' lorsque l'ajout a réussi;
+ if ($res !== false) {
+ foreach($this->champs as $index => $champ) {
+ $this->val[$index] = isset($this->valF[$champ]) ? $this->valF[$champ] : null;
+ }
+ }
+
$data = array('val' => &$val, 'id' => $id, 'result' => &$res);
$this->f->module_manager->run_hooks('triggerajouterapres_post', $this, $data);
return $res;
@@ -2048,7 +2056,6 @@
$res = parent::ajouter($val, $dnu1, $dnu2);

$data = array('val' => &$val, 'res' => &$res);
- $this->f->module_manager->run_hooks('ajouter_post', $this, $data);

if ($res !== false) {
foreach($this->champs as $index => $champ) {
@@ -2056,6 +2063,7 @@
}
}

+ $this->f->module_manager->run_hooks('ajouter_post', $this, $data);
return $res;
}

@@ -2396,9 +2404,11 @@
* Méthode appelée par le module_manager lors de la récupération des modules de cet objet.
* Permet d'ajouer des modules en plus de ceux récupérés par défaut par le module_manager.
*
+ * @param bool $only_for_class Ne renvoie que les modules pour la classe de l'objet
+ *
* @return array Liste de modules supplémentaires pour cet objet
*/
- public function get_modules_append() {
+ public function get_modules_append(bool $only_for_class = false) {
return array();
}

@@ -2406,11 +2416,13 @@
* Méthode appelée par le module_manager lors de la récupération des modules de cet objet.
* Permet de définir les modules à la place de ceux récupérés par défaut par le module_manager.
*
+ * @param bool $only_for_class Ne renvoie que les modules pour la classe de l'objet
+ *
* @return array|null Liste de modules pour cet objet, ou 'null' pour indiquer que
* cette méthode ne remplace pas les modules par défaut (un 'array' vide voudrait dire
* qu'il n'y a aucun module, ce qui est un remplacement valide)
*/
- public function get_modules_override() {
+ public function get_modules_override(bool $only_for_class = false) {
return null;
}
}

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/utils.class.php
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/utils.class.php 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/obj/utils.class.php 2024-06-21 13:58:47 UTC (rev 18043)
@@ -115,6 +115,8 @@
require_once __DIR__."/module_manager.class.php";
use Module\module_manager;

+require_once __DIR__.'/extra_data_store.impl_2_tables.php';
+
/**
*
*/
@@ -193,6 +195,11 @@
public $module_manager;

/**
+ * Instance du stockage de données « supplémentaires »
+ */
+ public $extra_data_store;
+
+ /**
* Surcharge pour instancier le module manager et pour définir le niveau de log
*/
function __construct($flag = null, $right = null, $title = null) {
@@ -211,6 +218,8 @@
}

$this->module_manager = new module_manager($this);
+
+ $this->extra_data_store = new extra_data_store_2_tables($this);
}

/**
@@ -7155,6 +7164,29 @@
}

/**
+ * Renvoie une instance du stockage de données « supplémentaires
+ *
+ * @return extra_data_store_abs
+ */
+ public function get_extra_data_store() {
+ return $this->extra_data_store;
+ }
+
+ /**
+ * Retire les balises HTML d'un message
+ *
+ * @param string $html_msg Le message avec des balises HTML
+ *
+ * @return string Le message sans les balises HTML
+ */
+ public function remove_html_tags(string $html_msg) {
+ return strip_tags(
+ str_replace('..', '.',
+ str_replace('. . ', '. ',
+ str_replace(array('<br>', '<br/>', '<br />'), '. ', $html_msg))));
+ }
+
+ /**
*
* recuperer_parametrage_annexe
* Récupère les paramétrage des annexes pour une instruction donnée.

Index: branches/6.6.0-develop_evo_type_avis_pec_incompl/tests
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/tests 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/tests 2024-06-21 13:58:47 UTC (rev 18043)

Property changes on: branches/6.6.0-develop_evo_type_avis_pec_incompl/tests
___________________________________________________________________
Modified: svn:mergeinfo
## -666,7 +666,9 ##
/branches/6.5.0-develop-error-contrainte-traitement-sig/tests:17384-17432
/branches/6.5.0-develop_fix_avis_produit_onglet_pieces/tests:17288-17414
/branches/6.6.0-10411/tests:17736-17870
-/branches/6.6.0-develop/tests:17864-18018
+/branches/6.6.0-develop/tests:17864-18039
+/branches/6.6.0-develop--fix-evol-mod/tests:17681-18023
+/branches/6.6.0-develop--impl-extra-data/tests:17897-18034
/branches/6.6.0-develop--improve-task/tests:17580-17609
/branches/6.6.0-develop-10391-SupportPlatAuSousDossier/tests:17581-17697
/branches/6.6.0-develop-10409-GestionTODO/tests:17700-17768
Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_def.robot (from rev 18039, branches/6.6.0-develop/tests/resources/app/gen/extra_data_register_def.robot)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_def.robot (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_def.robot 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,72 @@
+*** Settings ***
+Documentation CRUD de la table extra_data_register_def
+... @author generated
+... @package openADS
+... @version 18/06/2024 10:06
+
+*** Keywords ***
+
+Depuis le contexte extra_data_register_def
+ [Documentation] Accède au formulaire
+ [Arguments] ${extra_data_register_def}
+
+ # On accède au tableau
+ Go To Tab extra_data_register_def
+ # On recherche l'enregistrement
+ Use Simple Search extra_data_register_def ${extra_data_register_def}
+ # On clique sur le résultat
+ Click On Link ${extra_data_register_def}
+ # On vérifie qu'il n'y a pas d'erreur
+ Page Should Not Contain Errors
+
+Ajouter extra_data_register_def
+ [Documentation] Crée l'enregistrement
+ [Arguments] ${values}
+
+ # On accède au tableau
+ Go To Tab extra_data_register_def
+ # On clique sur le bouton ajouter
+ Click On Add Button
+ # On saisit des valeurs
+ Saisir extra_data_register_def ${values}
+ # On valide le formulaire
+ Click On Submit Button
+ # On récupère l'ID du nouvel enregistrement
+ ${extra_data_register_def} = Get Text css=div.form-content span#extra_data_register_def
+ # On le retourne
+ [Return] ${extra_data_register_def}
+
+Modifier extra_data_register_def
+ [Documentation] Modifie l'enregistrement
+ [Arguments] ${extra_data_register_def} ${values}
+
+ # On accède à l'enregistrement
+ Depuis le contexte extra_data_register_def ${extra_data_register_def}
+ # On clique sur le bouton modifier
+ Click On Form Portlet Action extra_data_register_def modifier
+ # On saisit des valeurs
+ Saisir extra_data_register_def ${values}
+ # On valide le formulaire
+ Click On Submit Button
+
+Supprimer extra_data_register_def
+ [Documentation] Supprime l'enregistrement
+ [Arguments] ${extra_data_register_def}
+
+ # On accède à l'enregistrement
+ Depuis le contexte extra_data_register_def ${extra_data_register_def}
+ # On clique sur le bouton supprimer
+ Click On Form Portlet Action extra_data_register_def supprimer
+ # On valide le formulaire
+ Click On Submit Button
+
+Saisir extra_data_register_def
+ [Documentation] Remplit le formulaire
+ [Arguments] ${values}
+
+ Si "name" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "description" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "type" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "object_name" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "max_length" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "alias_champ_fusion" existe dans "${values}" on execute "Input Text" dans le formulaire
\ No newline at end of file

Copied: branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_values.robot (from rev 18039, branches/6.6.0-develop/tests/resources/app/gen/extra_data_register_values.robot)
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_values.robot (rev 0)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/extra_data_register_values.robot 2024-06-21 13:58:47 UTC (rev 18043)
@@ -0,0 +1,74 @@
+*** Settings ***
+Documentation CRUD de la table extra_data_register_values
+... @author generated
+... @package openADS
+... @version 18/06/2024 10:06
+
+*** Keywords ***
+
+Depuis le contexte extra_data_register_values
+ [Documentation] Accède au formulaire
+ [Arguments] ${extra_data_register_values}
+
+ # On accède au tableau
+ Go To Tab extra_data_register_values
+ # On recherche l'enregistrement
+ Use Simple Search extra_data_register_values ${extra_data_register_values}
+ # On clique sur le résultat
+ Click On Link ${extra_data_register_values}
+ # On vérifie qu'il n'y a pas d'erreur
+ Page Should Not Contain Errors
+
+Ajouter extra_data_register_values
+ [Documentation] Crée l'enregistrement
+ [Arguments] ${values}
+
+ # On accède au tableau
+ Go To Tab extra_data_register_values
+ # On clique sur le bouton ajouter
+ Click On Add Button
+ # On saisit des valeurs
+ Saisir extra_data_register_values ${values}
+ # On valide le formulaire
+ Click On Submit Button
+ # On récupère l'ID du nouvel enregistrement
+ ${extra_data_register_values} = Get Text css=div.form-content span#extra_data_register_values
+ # On le retourne
+ [Return] ${extra_data_register_values}
+
+Modifier extra_data_register_values
+ [Documentation] Modifie l'enregistrement
+ [Arguments] ${extra_data_register_values} ${values}
+
+ # On accède à l'enregistrement
+ Depuis le contexte extra_data_register_values ${extra_data_register_values}
+ # On clique sur le bouton modifier
+ Click On Form Portlet Action extra_data_register_values modifier
+ # On saisit des valeurs
+ Saisir extra_data_register_values ${values}
+ # On valide le formulaire
+ Click On Submit Button
+
+Supprimer extra_data_register_values
+ [Documentation] Supprime l'enregistrement
+ [Arguments] ${extra_data_register_values}
+
+ # On accède à l'enregistrement
+ Depuis le contexte extra_data_register_values ${extra_data_register_values}
+ # On clique sur le bouton supprimer
+ Click On Form Portlet Action extra_data_register_values supprimer
+ # On valide le formulaire
+ Click On Submit Button
+
+Saisir extra_data_register_values
+ [Documentation] Remplit le formulaire
+ [Arguments] ${values}
+
+ Si "definition_ref" existe dans "${values}" on execute "Select From List By Label" dans le formulaire
+ Si "object_id" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "value_int" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "value_str" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "value_text" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "value_json" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "value_blob" existe dans "${values}" on execute "Input Text" dans le formulaire
+ Si "value_timestamp" existe dans "${values}" on execute "Input Text" dans le formulaire
\ No newline at end of file

Modified: branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/gen_resources.robot
===================================================================
--- branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/gen_resources.robot 2024-06-21 13:50:19 UTC (rev 18042)
+++ branches/6.6.0-develop_evo_type_avis_pec_incompl/tests/resources/app/gen/gen_resources.robot 2024-06-21 13:58:47 UTC (rev 18043)
@@ -2,7 +2,7 @@
Documentation Ressources de mots-clefs générés
... @author generated
... @package openADS
-... @version 07/06/2024 09:06
+... @version 18/06/2024 10:06

Resource action.robot
Resource affectation_automatique.robot
@@ -56,6 +56,8 @@
Resource etat_dossier_autorisation.robot
Resource evenement.robot
Resource evenement_type_habilitation_tiers_consulte.robot
+Resource extra_data_register_def.robot
+Resource extra_data_register_values.robot
Resource famille_travaux.robot
Resource genre.robot
Resource groupe.robot

Reply all
Reply to author
Forward
0 new messages