Loading CHANGELOG.md +6 −1 Original line number Diff line number Diff line CHANGELOG ========= 6.1.0 (22/08/2023) ------------------ - Refonte du dispositif, plus aucun package utilisé 6.0.2 (19/06/2023) ------------------ - Pb de caractère "NUL" enlevé grâce à un TRIM - Pb de caractère "NULL" enlevé grâce à un TRIM 6.0.1 (23/03/2023) ------------------ Loading autoload_classmap.php +1 −25 Original line number Diff line number Diff line <?php // Generated by UnicaenCode return [ 'UnicaenTbl\Controller\AdminController' => __DIR__ . '/src/Controller/AdminController.php', 'UnicaenTbl\Controller\Factory\AdminControllerFactory' => __DIR__ . '/src/Controller/Factory/AdminControllerFactory.php', 'UnicaenTbl\Entity\Column' => __DIR__ . '/src/Entity/Column.php', 'UnicaenTbl\Entity\TableauBord' => __DIR__ . '/src/Entity/TableauBord.php', 'UnicaenTbl\Entity\Traits\TableauBordAwareTrait' => __DIR__ . '/src/Entity/Traits/TableauBordAwareTrait.php', 'UnicaenTbl\Form\ActualisationForm' => __DIR__ . '/src/Form/ActualisationForm.php', 'UnicaenTbl\Form\Factory\ActualisationFormFactory' => __DIR__ . '/src/Form/Factory/ActualisationFormFactory.php', 'UnicaenTbl\Form\Traits\ActualisationFormAwareTrait' => __DIR__ . '/src/Form/Traits/ActualisationFormAwareTrait.php', 'UnicaenTbl\Module' => __DIR__ . '/Module.php', 'UnicaenTbl\Options\Factory\ModuleOptionsFactory' => __DIR__ . '/src/Options/Factory/ModuleOptionsFactory.php', 'UnicaenTbl\Options\ModuleOptions' => __DIR__ . '/src/Options/ModuleOptions.php', 'UnicaenTbl\Options\Traits\ModuleOptionsAwareTrait' => __DIR__ . '/src/Options/Traits/ModuleOptionsAwareTrait.php', 'UnicaenTbl\Provider\Privilege\Privileges' => __DIR__ . '/src/Provider/Privilege/Privileges.php', 'UnicaenTbl\Service\AbstractService' => __DIR__ . '/src/Service/AbstractService.php', 'UnicaenTbl\Service\CollectorService' => __DIR__ . '/src/Service/CollectorService.php', 'UnicaenTbl\Service\Factory\CollectorServiceFactory' => __DIR__ . '/src/Service/Factory/CollectorServiceFactory.php', 'UnicaenTbl\Service\Factory\QueryGeneratorServiceFactory' => __DIR__ . '/src/Service/Factory/QueryGeneratorServiceFactory.php', 'UnicaenTbl\Service\Factory\SchemaServiceFactory' => __DIR__ . '/src/Service/Factory/SchemaServiceFactory.php', 'UnicaenTbl\Service\Factory\TableauBordServiceFactory' => __DIR__ . '/src/Service/Factory/TableauBordServiceFactory.php', 'UnicaenTbl\Service\QueryGeneratorService' => __DIR__ . '/src/Service/QueryGeneratorService.php', 'UnicaenTbl\Service\SchemaService' => __DIR__ . '/src/Service/SchemaService.php', 'UnicaenTbl\Service\TableauBordService' => __DIR__ . '/src/Service/TableauBordService.php', 'UnicaenTbl\Service\Traits\QueryGeneratorServiceAwareTrait' => __DIR__ . '/src/Service/Traits/QueryGeneratorServiceAwareTrait.php', 'UnicaenTbl\Service\Traits\SchemaServiceAwareTrait' => __DIR__ . '/src/Service/Traits/SchemaServiceAwareTrait.php', 'UnicaenTbl\Service\Traits\TableauBordServiceAwareTrait' => __DIR__ . '/src/Service/Traits/TableauBordServiceAwareTrait.php', ]; No newline at end of file config/module.config.php +18 −113 Original line number Diff line number Diff line Loading @@ -2,131 +2,36 @@ namespace UnicaenTbl; use UnicaenTbl\Controller\AdminController; use UnicaenTbl\Form\ActualisationForm; use UnicaenTbl\Options\ModuleOptions; use UnicaenTbl\Provider\Privilege\Privileges; use UnicaenTbl\Service\CollectorService; use UnicaenTbl\Service\QueryGeneratorService; use UnicaenTbl\Service\SchemaService; use UnicaenTbl\Process\DbDiffProcess; use UnicaenTbl\Process\DbDiffProcessFactory; use UnicaenTbl\Process\PlsqlProcess; use UnicaenTbl\Process\PlsqlProcessFactory; use UnicaenTbl\Service\BddService; use UnicaenTbl\Service\BddServiceFactory; use UnicaenTbl\Service\TableauBordService; return [ 'router' => [ 'routes' => [ 'unicaen-tbl' => [ 'type' => 'Literal', 'options' => [ 'route' => '/unicaen-tbl', 'defaults' => [ 'controller' => AdminController::class, 'action' => 'index', ], ], 'may_terminate' => true, 'child_routes' => [ 'build' => [ 'type' => 'Literal', 'options' => [ 'route' => '/build', 'defaults' => [ 'action' => 'build-procedures', ], ], 'may_terminate' => true, ], 'actualisation' => [ 'type' => 'Segment', 'options' => [ 'route' => '/actualisation/:tableauBord', 'defaults' => [ 'action' => 'actualisation', ], ], 'may_terminate' => true, ], ], ], ], ], 'tableaux_bord' => [], 'console' => [ 'router' => [ 'routes' => [ 'unicaen-tbl' => [ 'options' => [ 'type' => 'catchall', 'route' => 'UnicaenTbl build-procedures', 'defaults' => [ 'controller' => AdminController::class, 'action' => 'build-procedures', ], ], ], ], ], ], 'doctrine' => [ 'driver' => [ 'unicaen_tbl_driver' => [ 'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 'cache' => 'array', 'paths' => [ __DIR__ . '/../src/Entity', ], ], 'orm_default' => [ 'drivers' => [ 'UnicaenTbl\Entity\Db' => 'unicaen_tbl_driver', ], ], ], ], 'view_manager' => [ 'template_path_stack' => [ 'unicaen-tbl' => __DIR__ . '/../view', ], ], 'controllers' => [ 'factories' => [ AdminController::class => Controller\Factory\AdminControllerFactory::class, ], 'entity_manager_name' => 'doctrine.entitymanager.orm_default', ], 'service_manager' => [ 'factories' => [ CollectorService::class => Service\Factory\CollectorServiceFactory::class, ModuleOptions::class => Options\Factory\ModuleOptionsFactory::class, SchemaService::class => Service\Factory\SchemaServiceFactory::class, QueryGeneratorService::class => Service\Factory\QueryGeneratorServiceFactory::class, TableauBordService::class => Service\Factory\TableauBordServiceFactory::class, ], 'aliases' => [ 'unicaen-tbl.process.DbDiff' => DbDiffProcess::class, 'unicaen-tbl.process.Plsql' => PlsqlProcess::class, ], 'form_elements' => [ 'factories' => [ ActualisationForm::class => Form\Factory\ActualisationFormFactory::class, ], ], ModuleOptions::class => Options\Factory\ModuleOptionsFactory::class, TableauBordService::class => Service\TableauBordServiceFactory::class, BddService::class => BddServiceFactory::class, 'bjyauthorize' => [ 'guards' => [ 'UnicaenPrivilege\Guard\PrivilegeController' => [ [ 'controller' => AdminController::class, 'action' => ['index'], 'privileges' => [Privileges::UNICAEN_TBL_ADMIN], ], [ 'controller' => AdminController::class, 'action' => ['actualisation'], 'privileges' => [Privileges::UNICAEN_TBL_ACTUALISATION], ], ], DbDiffProcess::class => DbDiffProcessFactory::class, PlsqlProcess::class => PlsqlProcessFactory::class, ], ], ]; No newline at end of file data/module.sqldeleted 100644 → 0 +0 −22 Original line number Diff line number Diff line /********************************************************************************************* * Privilèges *********************************************************************************************/ / insert into CATEGORIE_PRIVILEGE (ID, CODE, LIBELLE, ORDRE) values ( CATEGORIE_PRIVILEGE_ID_SEQ.NEXTVAL, 'unicaen-tbl', 'Tableaux de bord', 999 ); / insert into PRIVILEGE (ID, CATEGORIE_ID, CODE, LIBELLE, ORDRE) select PRIVILEGE_ID_SEQ.NEXTVAL, cat.id, 'admin', 'Gestion des tableaux de bord', 1 from CATEGORIE_PRIVILEGE cat where code = 'unicaen-tbl'; data/package.sqldeleted 100644 → 0 +0 −335 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE "UNICAEN_TBL" AS ACTIV_TRIGGERS BOOLEAN DEFAULT TRUE; ACTIV_CALCULS BOOLEAN DEFAULT TRUE; TYPE t_params IS RECORD ( p1 VARCHAR2(30), v1 VARCHAR2(80), p2 VARCHAR2(30), v2 VARCHAR2(80), p3 VARCHAR2(30), v3 VARCHAR2(80), p4 VARCHAR2(30), v4 VARCHAR2(80), p5 VARCHAR2(30), v5 VARCHAR2(80) ); CALCUL_PROC_PARAMS t_params; FUNCTION QUERY_APPLY_PARAM( sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB; FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2; PROCEDURE CALCULER( TBL_NAME VARCHAR2 ); PROCEDURE CALCULER( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 ); PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params); PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 ); PROCEDURE ANNULER_DEMANDES; PROCEDURE ANNULER_DEMANDES( TBL_NAME VARCHAR2 ); PROCEDURE CALCULER_DEMANDES; -- AUTOMATIC GENERATION -- -- END OF AUTOMATIC GENERATION -- END UNICAEN_TBL; / CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS TYPE t_dems_values IS TABLE OF BOOLEAN INDEX BY VARCHAR2(80); TYPE t_dems_params IS TABLE OF t_dems_values INDEX BY VARCHAR2(30); TYPE t_dems IS TABLE OF t_dems_params INDEX BY VARCHAR2(30); dems t_dems; FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS res VARCHAR2(120) DEFAULT ''; BEGIN IF param IS NULL THEN RETURN '1=1'; END IF; IF alias IS NOT NULL THEN res := alias || '.'; END IF; IF value IS NULL THEN RETURN res || param || ' IS NULL'; END IF; RETURN res || param || ' = q''[' || value || ']'''; END; FUNCTION QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB IS pos NUMERIC; paramLen NUMERIC; paramComm VARCHAR2(200); debComm NUMERIC; endComm NUMERIC; debReal NUMERIC; realParam VARCHAR2(80); realValue VARCHAR2(120); q CLOB; BEGIN q := sqlQuery; IF param IS NULL THEN RETURN q; END IF; paramlen := length(param); IF value IS NULL THEN realValue := ' IS NULL'; ELSE BEGIN realValue := TO_NUMBER(value); EXCEPTION WHEN VALUE_ERROR THEN realValue := 'q''[' || value || ']'''; END; realValue := '=' || realValue; END IF; LOOP pos := instr(q, '/*@' || param, 1, 1); EXIT WHEN pos = 0; debComm := pos - 1; endComm := instr(q, '*/', pos, 1); paramComm := substr(q, debComm, endComm - debComm); debReal := instr(paramComm, '=', 1, 1); realParam := trim(substr(paramComm, debReal + 1)); --realParam := 'AND ' || substr(q,pos + paramLen + 4,endComm-pos - paramLen - 4); realParam := 'AND ' || realParam || realValue; q := substr(q, 1, debComm) || realParam || substr(q, endComm + 2); END LOOP; RETURN q; END; FUNCTION QUERY_APPLY_PARAMS(sqlQuery VARCHAR2, useParams BOOLEAN DEFAULT FALSE) RETURN CLOB IS q CLOB; BEGIN q := sqlQuery; IF NOT useParams THEN RETURN q; END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p1 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p2 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p2, UNICAEN_TBL.CALCUL_PROC_PARAMS.v2); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p3 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p3, UNICAEN_TBL.CALCUL_PROC_PARAMS.v3); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p4 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p4, UNICAEN_TBL.CALCUL_PROC_PARAMS.v4); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p5 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p5, UNICAEN_TBL.CALCUL_PROC_PARAMS.v5); END IF; RETURN q; END; FUNCTION PARAMS_MAKE_FILTER(useParams BOOLEAN DEFAULT FALSE) RETURN VARCHAR2 IS filter VARCHAR2(4000) DEFAULT ''; BEGIN IF NOT useParams THEN RETURN '1=1'; END IF; IF unicaen_tbl.calcul_proc_params.p1 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p1 || ', t.' || unicaen_tbl.calcul_proc_params.p1 || ') '; IF unicaen_tbl.calcul_proc_params.v1 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v1 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p2 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p2 || ', t.' || unicaen_tbl.calcul_proc_params.p2 || ') '; IF unicaen_tbl.calcul_proc_params.v2 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v2 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p3 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p3 || ', t.' || unicaen_tbl.calcul_proc_params.p3 || ') '; IF unicaen_tbl.calcul_proc_params.v3 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v3 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p4 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p4 || ', t.' || unicaen_tbl.calcul_proc_params.p4 || ') '; IF unicaen_tbl.calcul_proc_params.v4 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v4 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p5 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p5 || ', t.' || unicaen_tbl.calcul_proc_params.p5 || ') '; IF unicaen_tbl.calcul_proc_params.v5 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v5 || ']'''; END IF; END IF; IF filter = '' THEN RETURN '1=1'; END IF; RETURN filter; END; PROCEDURE CALCULER(TBL_NAME VARCHAR2) IS params t_params; BEGIN ANNULER_DEMANDES(TBL_NAME); CALCULER(TBL_NAME, params); END; PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS calcul_proc varchar2(30); params t_params; BEGIN IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF; SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME; params.p1 := param; params.v1 := value; unicaen_tbl.calcul_proc_params := params; IF calcul_proc IS NOT NULL THEN EXECUTE IMMEDIATE 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;'; ELSE EXECUTE IMMEDIATE 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;'; END IF; END; PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params) IS calcul_proc varchar2(30); BEGIN IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF; SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME; unicaen_tbl.calcul_proc_params := params; IF calcul_proc IS NOT NULL THEN EXECUTE IMMEDIATE 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;'; ELSE EXECUTE IMMEDIATE 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;'; END IF; END; PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS BEGIN dems(TBL_NAME)(param)(value) := TRUE; END; PROCEDURE ANNULER_DEMANDES IS BEGIN dems.delete; END; PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS BEGIN IF dems.exists(tbl_name) THEN dems(tbl_name).delete; END IF; END; FUNCTION HAS_DEMANDES RETURN BOOLEAN IS BEGIN RETURN dems.count > 0; END; PROCEDURE CALCULER_DEMANDES IS d t_dems; tbl_name VARCHAR2(30); param VARCHAR2(30); value VARCHAR2(80); BEGIN d := dems; dems.delete; tbl_name := d.FIRST; LOOP EXIT WHEN tbl_name IS NULL; param := d(tbl_name).FIRST; LOOP EXIT WHEN param IS NULL; value := d(tbl_name)(param).FIRST; LOOP EXIT WHEN value IS NULL; calculer(tbl_name, param, value); value := d(tbl_name)(param).NEXT(value); END LOOP; param := d(tbl_name).NEXT(param); END LOOP; tbl_name := d.NEXT(tbl_name); END LOOP; IF HAS_DEMANDES THEN -- pour les boucles !! CALCULER_DEMANDES; END IF; END; -- AUTOMATIC GENERATION -- -- END OF AUTOMATIC GENERATION -- END UNICAEN_TBL; Loading
CHANGELOG.md +6 −1 Original line number Diff line number Diff line CHANGELOG ========= 6.1.0 (22/08/2023) ------------------ - Refonte du dispositif, plus aucun package utilisé 6.0.2 (19/06/2023) ------------------ - Pb de caractère "NUL" enlevé grâce à un TRIM - Pb de caractère "NULL" enlevé grâce à un TRIM 6.0.1 (23/03/2023) ------------------ Loading
autoload_classmap.php +1 −25 Original line number Diff line number Diff line <?php // Generated by UnicaenCode return [ 'UnicaenTbl\Controller\AdminController' => __DIR__ . '/src/Controller/AdminController.php', 'UnicaenTbl\Controller\Factory\AdminControllerFactory' => __DIR__ . '/src/Controller/Factory/AdminControllerFactory.php', 'UnicaenTbl\Entity\Column' => __DIR__ . '/src/Entity/Column.php', 'UnicaenTbl\Entity\TableauBord' => __DIR__ . '/src/Entity/TableauBord.php', 'UnicaenTbl\Entity\Traits\TableauBordAwareTrait' => __DIR__ . '/src/Entity/Traits/TableauBordAwareTrait.php', 'UnicaenTbl\Form\ActualisationForm' => __DIR__ . '/src/Form/ActualisationForm.php', 'UnicaenTbl\Form\Factory\ActualisationFormFactory' => __DIR__ . '/src/Form/Factory/ActualisationFormFactory.php', 'UnicaenTbl\Form\Traits\ActualisationFormAwareTrait' => __DIR__ . '/src/Form/Traits/ActualisationFormAwareTrait.php', 'UnicaenTbl\Module' => __DIR__ . '/Module.php', 'UnicaenTbl\Options\Factory\ModuleOptionsFactory' => __DIR__ . '/src/Options/Factory/ModuleOptionsFactory.php', 'UnicaenTbl\Options\ModuleOptions' => __DIR__ . '/src/Options/ModuleOptions.php', 'UnicaenTbl\Options\Traits\ModuleOptionsAwareTrait' => __DIR__ . '/src/Options/Traits/ModuleOptionsAwareTrait.php', 'UnicaenTbl\Provider\Privilege\Privileges' => __DIR__ . '/src/Provider/Privilege/Privileges.php', 'UnicaenTbl\Service\AbstractService' => __DIR__ . '/src/Service/AbstractService.php', 'UnicaenTbl\Service\CollectorService' => __DIR__ . '/src/Service/CollectorService.php', 'UnicaenTbl\Service\Factory\CollectorServiceFactory' => __DIR__ . '/src/Service/Factory/CollectorServiceFactory.php', 'UnicaenTbl\Service\Factory\QueryGeneratorServiceFactory' => __DIR__ . '/src/Service/Factory/QueryGeneratorServiceFactory.php', 'UnicaenTbl\Service\Factory\SchemaServiceFactory' => __DIR__ . '/src/Service/Factory/SchemaServiceFactory.php', 'UnicaenTbl\Service\Factory\TableauBordServiceFactory' => __DIR__ . '/src/Service/Factory/TableauBordServiceFactory.php', 'UnicaenTbl\Service\QueryGeneratorService' => __DIR__ . '/src/Service/QueryGeneratorService.php', 'UnicaenTbl\Service\SchemaService' => __DIR__ . '/src/Service/SchemaService.php', 'UnicaenTbl\Service\TableauBordService' => __DIR__ . '/src/Service/TableauBordService.php', 'UnicaenTbl\Service\Traits\QueryGeneratorServiceAwareTrait' => __DIR__ . '/src/Service/Traits/QueryGeneratorServiceAwareTrait.php', 'UnicaenTbl\Service\Traits\SchemaServiceAwareTrait' => __DIR__ . '/src/Service/Traits/SchemaServiceAwareTrait.php', 'UnicaenTbl\Service\Traits\TableauBordServiceAwareTrait' => __DIR__ . '/src/Service/Traits/TableauBordServiceAwareTrait.php', ]; No newline at end of file
config/module.config.php +18 −113 Original line number Diff line number Diff line Loading @@ -2,131 +2,36 @@ namespace UnicaenTbl; use UnicaenTbl\Controller\AdminController; use UnicaenTbl\Form\ActualisationForm; use UnicaenTbl\Options\ModuleOptions; use UnicaenTbl\Provider\Privilege\Privileges; use UnicaenTbl\Service\CollectorService; use UnicaenTbl\Service\QueryGeneratorService; use UnicaenTbl\Service\SchemaService; use UnicaenTbl\Process\DbDiffProcess; use UnicaenTbl\Process\DbDiffProcessFactory; use UnicaenTbl\Process\PlsqlProcess; use UnicaenTbl\Process\PlsqlProcessFactory; use UnicaenTbl\Service\BddService; use UnicaenTbl\Service\BddServiceFactory; use UnicaenTbl\Service\TableauBordService; return [ 'router' => [ 'routes' => [ 'unicaen-tbl' => [ 'type' => 'Literal', 'options' => [ 'route' => '/unicaen-tbl', 'defaults' => [ 'controller' => AdminController::class, 'action' => 'index', ], ], 'may_terminate' => true, 'child_routes' => [ 'build' => [ 'type' => 'Literal', 'options' => [ 'route' => '/build', 'defaults' => [ 'action' => 'build-procedures', ], ], 'may_terminate' => true, ], 'actualisation' => [ 'type' => 'Segment', 'options' => [ 'route' => '/actualisation/:tableauBord', 'defaults' => [ 'action' => 'actualisation', ], ], 'may_terminate' => true, ], ], ], ], ], 'tableaux_bord' => [], 'console' => [ 'router' => [ 'routes' => [ 'unicaen-tbl' => [ 'options' => [ 'type' => 'catchall', 'route' => 'UnicaenTbl build-procedures', 'defaults' => [ 'controller' => AdminController::class, 'action' => 'build-procedures', ], ], ], ], ], ], 'doctrine' => [ 'driver' => [ 'unicaen_tbl_driver' => [ 'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 'cache' => 'array', 'paths' => [ __DIR__ . '/../src/Entity', ], ], 'orm_default' => [ 'drivers' => [ 'UnicaenTbl\Entity\Db' => 'unicaen_tbl_driver', ], ], ], ], 'view_manager' => [ 'template_path_stack' => [ 'unicaen-tbl' => __DIR__ . '/../view', ], ], 'controllers' => [ 'factories' => [ AdminController::class => Controller\Factory\AdminControllerFactory::class, ], 'entity_manager_name' => 'doctrine.entitymanager.orm_default', ], 'service_manager' => [ 'factories' => [ CollectorService::class => Service\Factory\CollectorServiceFactory::class, ModuleOptions::class => Options\Factory\ModuleOptionsFactory::class, SchemaService::class => Service\Factory\SchemaServiceFactory::class, QueryGeneratorService::class => Service\Factory\QueryGeneratorServiceFactory::class, TableauBordService::class => Service\Factory\TableauBordServiceFactory::class, ], 'aliases' => [ 'unicaen-tbl.process.DbDiff' => DbDiffProcess::class, 'unicaen-tbl.process.Plsql' => PlsqlProcess::class, ], 'form_elements' => [ 'factories' => [ ActualisationForm::class => Form\Factory\ActualisationFormFactory::class, ], ], ModuleOptions::class => Options\Factory\ModuleOptionsFactory::class, TableauBordService::class => Service\TableauBordServiceFactory::class, BddService::class => BddServiceFactory::class, 'bjyauthorize' => [ 'guards' => [ 'UnicaenPrivilege\Guard\PrivilegeController' => [ [ 'controller' => AdminController::class, 'action' => ['index'], 'privileges' => [Privileges::UNICAEN_TBL_ADMIN], ], [ 'controller' => AdminController::class, 'action' => ['actualisation'], 'privileges' => [Privileges::UNICAEN_TBL_ACTUALISATION], ], ], DbDiffProcess::class => DbDiffProcessFactory::class, PlsqlProcess::class => PlsqlProcessFactory::class, ], ], ]; No newline at end of file
data/module.sqldeleted 100644 → 0 +0 −22 Original line number Diff line number Diff line /********************************************************************************************* * Privilèges *********************************************************************************************/ / insert into CATEGORIE_PRIVILEGE (ID, CODE, LIBELLE, ORDRE) values ( CATEGORIE_PRIVILEGE_ID_SEQ.NEXTVAL, 'unicaen-tbl', 'Tableaux de bord', 999 ); / insert into PRIVILEGE (ID, CATEGORIE_ID, CODE, LIBELLE, ORDRE) select PRIVILEGE_ID_SEQ.NEXTVAL, cat.id, 'admin', 'Gestion des tableaux de bord', 1 from CATEGORIE_PRIVILEGE cat where code = 'unicaen-tbl';
data/package.sqldeleted 100644 → 0 +0 −335 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE "UNICAEN_TBL" AS ACTIV_TRIGGERS BOOLEAN DEFAULT TRUE; ACTIV_CALCULS BOOLEAN DEFAULT TRUE; TYPE t_params IS RECORD ( p1 VARCHAR2(30), v1 VARCHAR2(80), p2 VARCHAR2(30), v2 VARCHAR2(80), p3 VARCHAR2(30), v3 VARCHAR2(80), p4 VARCHAR2(30), v4 VARCHAR2(80), p5 VARCHAR2(30), v5 VARCHAR2(80) ); CALCUL_PROC_PARAMS t_params; FUNCTION QUERY_APPLY_PARAM( sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB; FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2; PROCEDURE CALCULER( TBL_NAME VARCHAR2 ); PROCEDURE CALCULER( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 ); PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params); PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 ); PROCEDURE ANNULER_DEMANDES; PROCEDURE ANNULER_DEMANDES( TBL_NAME VARCHAR2 ); PROCEDURE CALCULER_DEMANDES; -- AUTOMATIC GENERATION -- -- END OF AUTOMATIC GENERATION -- END UNICAEN_TBL; / CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS TYPE t_dems_values IS TABLE OF BOOLEAN INDEX BY VARCHAR2(80); TYPE t_dems_params IS TABLE OF t_dems_values INDEX BY VARCHAR2(30); TYPE t_dems IS TABLE OF t_dems_params INDEX BY VARCHAR2(30); dems t_dems; FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS res VARCHAR2(120) DEFAULT ''; BEGIN IF param IS NULL THEN RETURN '1=1'; END IF; IF alias IS NOT NULL THEN res := alias || '.'; END IF; IF value IS NULL THEN RETURN res || param || ' IS NULL'; END IF; RETURN res || param || ' = q''[' || value || ']'''; END; FUNCTION QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB IS pos NUMERIC; paramLen NUMERIC; paramComm VARCHAR2(200); debComm NUMERIC; endComm NUMERIC; debReal NUMERIC; realParam VARCHAR2(80); realValue VARCHAR2(120); q CLOB; BEGIN q := sqlQuery; IF param IS NULL THEN RETURN q; END IF; paramlen := length(param); IF value IS NULL THEN realValue := ' IS NULL'; ELSE BEGIN realValue := TO_NUMBER(value); EXCEPTION WHEN VALUE_ERROR THEN realValue := 'q''[' || value || ']'''; END; realValue := '=' || realValue; END IF; LOOP pos := instr(q, '/*@' || param, 1, 1); EXIT WHEN pos = 0; debComm := pos - 1; endComm := instr(q, '*/', pos, 1); paramComm := substr(q, debComm, endComm - debComm); debReal := instr(paramComm, '=', 1, 1); realParam := trim(substr(paramComm, debReal + 1)); --realParam := 'AND ' || substr(q,pos + paramLen + 4,endComm-pos - paramLen - 4); realParam := 'AND ' || realParam || realValue; q := substr(q, 1, debComm) || realParam || substr(q, endComm + 2); END LOOP; RETURN q; END; FUNCTION QUERY_APPLY_PARAMS(sqlQuery VARCHAR2, useParams BOOLEAN DEFAULT FALSE) RETURN CLOB IS q CLOB; BEGIN q := sqlQuery; IF NOT useParams THEN RETURN q; END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p1 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p2 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p2, UNICAEN_TBL.CALCUL_PROC_PARAMS.v2); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p3 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p3, UNICAEN_TBL.CALCUL_PROC_PARAMS.v3); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p4 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p4, UNICAEN_TBL.CALCUL_PROC_PARAMS.v4); END IF; IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p5 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p5, UNICAEN_TBL.CALCUL_PROC_PARAMS.v5); END IF; RETURN q; END; FUNCTION PARAMS_MAKE_FILTER(useParams BOOLEAN DEFAULT FALSE) RETURN VARCHAR2 IS filter VARCHAR2(4000) DEFAULT ''; BEGIN IF NOT useParams THEN RETURN '1=1'; END IF; IF unicaen_tbl.calcul_proc_params.p1 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p1 || ', t.' || unicaen_tbl.calcul_proc_params.p1 || ') '; IF unicaen_tbl.calcul_proc_params.v1 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v1 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p2 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p2 || ', t.' || unicaen_tbl.calcul_proc_params.p2 || ') '; IF unicaen_tbl.calcul_proc_params.v2 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v2 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p3 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p3 || ', t.' || unicaen_tbl.calcul_proc_params.p3 || ') '; IF unicaen_tbl.calcul_proc_params.v3 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v3 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p4 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p4 || ', t.' || unicaen_tbl.calcul_proc_params.p4 || ') '; IF unicaen_tbl.calcul_proc_params.v4 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v4 || ']'''; END IF; END IF; IF unicaen_tbl.calcul_proc_params.p5 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; END IF; filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p5 || ', t.' || unicaen_tbl.calcul_proc_params.p5 || ') '; IF unicaen_tbl.calcul_proc_params.v5 IS NULL THEN filter := filter || 'IS NULL'; ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v5 || ']'''; END IF; END IF; IF filter = '' THEN RETURN '1=1'; END IF; RETURN filter; END; PROCEDURE CALCULER(TBL_NAME VARCHAR2) IS params t_params; BEGIN ANNULER_DEMANDES(TBL_NAME); CALCULER(TBL_NAME, params); END; PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS calcul_proc varchar2(30); params t_params; BEGIN IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF; SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME; params.p1 := param; params.v1 := value; unicaen_tbl.calcul_proc_params := params; IF calcul_proc IS NOT NULL THEN EXECUTE IMMEDIATE 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;'; ELSE EXECUTE IMMEDIATE 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;'; END IF; END; PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params) IS calcul_proc varchar2(30); BEGIN IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF; SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME; unicaen_tbl.calcul_proc_params := params; IF calcul_proc IS NOT NULL THEN EXECUTE IMMEDIATE 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;'; ELSE EXECUTE IMMEDIATE 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;'; END IF; END; PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS BEGIN dems(TBL_NAME)(param)(value) := TRUE; END; PROCEDURE ANNULER_DEMANDES IS BEGIN dems.delete; END; PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS BEGIN IF dems.exists(tbl_name) THEN dems(tbl_name).delete; END IF; END; FUNCTION HAS_DEMANDES RETURN BOOLEAN IS BEGIN RETURN dems.count > 0; END; PROCEDURE CALCULER_DEMANDES IS d t_dems; tbl_name VARCHAR2(30); param VARCHAR2(30); value VARCHAR2(80); BEGIN d := dems; dems.delete; tbl_name := d.FIRST; LOOP EXIT WHEN tbl_name IS NULL; param := d(tbl_name).FIRST; LOOP EXIT WHEN param IS NULL; value := d(tbl_name)(param).FIRST; LOOP EXIT WHEN value IS NULL; calculer(tbl_name, param, value); value := d(tbl_name)(param).NEXT(value); END LOOP; param := d(tbl_name).NEXT(param); END LOOP; tbl_name := d.NEXT(tbl_name); END LOOP; IF HAS_DEMANDES THEN -- pour les boucles !! CALCULER_DEMANDES; END IF; END; -- AUTOMATIC GENERATION -- -- END OF AUTOMATIC GENERATION -- END UNICAEN_TBL;