From b720a365743f6f904b204bf43f0e9915355794b5 Mon Sep 17 00:00:00 2001 From: valleet01 <thibaut.vallee@unicaen.fr> Date: Fri, 10 Jun 2022 11:24:22 +0200 Subject: [PATCH] =?UTF-8?q?cr=C3=A9ation=20d'un=20branche=20compatible=20L?= =?UTF-8?q?aminas,=20PHP-7.4=20(et=20probablement=208=20mais=20non=20v?= =?UTF-8?q?=C3=A9rifi=C3=A9).=20Dependance=20avec=20Boostrap5=20et=20Unica?= =?UTF-8?q?enPrivilege=20(a=20la=20place=20de=20UnicaenAuth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 +++++----- config/module.config.php | 2 +- .../unicaen/db-import/js/unicaen-db-import.js | 1 + .../Helper/TableValidationHelper.php | 2 +- .../Controller/SynchroController.php | 18 +++++-- .../Privilege/ImportPrivilege.php | 2 +- .../Privilege/LogPrivilege.php | 2 +- .../Privilege/ObservationPrivilege.php | 2 +- .../Privilege/SynchroPrivilege.php | 2 +- .../Service/Database/DatabaseService.php | 3 ++ .../Service/Facade/SynchroFacadeService.php | 53 +++++++++++++++++-- view/unicaen-db-import/import/index.phtml | 1 + view/unicaen-db-import/import/voir.phtml | 1 + view/unicaen-db-import/log/index.phtml | 2 +- view/unicaen-db-import/synchro/index.phtml | 1 + view/unicaen-db-import/synchro/voir.phtml | 1 + 16 files changed, 93 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 6b3d7e1..ee3b973 100644 --- a/README.md +++ b/README.md @@ -399,13 +399,14 @@ return [ [ 'name' => "IMPORT_SIMPLE", 'source' => [ - 'code' => 'UTILISATEUR_OCTOPUS', + 'name' => 'UTILISATEUR_OCTOPUS', 'table' => 'UTILISATEUR', 'connection' => 'orm_B', 'source_code_column' => 'CODE', + 'code' => 'CODE_SOURCE', ], 'destination' => [ - 'code' => 'TABLE UTILISATEUR LOCALE', + 'name' => 'TABLE UTILISATEUR LOCALE', 'table' => 'UTILISATEUR', 'connection' => 'orm_A', 'source_code_column' => 'CODE', @@ -433,13 +434,13 @@ return [ [ 'name' => "IMPORT_REGIONS_API", 'source' => [ - 'code' => 'geo_api', // DOIT correspondre à un `CODE` de la table `SOURCE` + 'name' => 'geo_api', // DOIT correspondre à un `CODE` de la table `SOURCE` 'select' => '/regions?fields=nom,code', 'connection' => 'geo', 'source_code_column' => 'code', ], 'destination' => [ - 'code' => 'Table REGION', + 'name' => 'Table REGION', 'table' => 'REGION', 'connection' => 'orm_A', 'source_code_column' => 'CODE', @@ -471,13 +472,13 @@ return [ [ 'name' => "SYNCHRO_LOCALE_ROLE", 'source' => [ - 'code' => 'app', + 'name' => 'app', 'select' => 'SELECT CODE, LIBELLE, DESCRIPTION FROM SRC_ROLE', 'connection' => 'orm_A', 'source_code_column' => 'CODE', ], 'destination' => [ - 'code' => 'Table ROLE', + 'name' => 'Table ROLE', 'table' => 'ROLE', 'connection' => 'orm_A', 'source_code_column' => 'CODE', @@ -515,13 +516,13 @@ return [ [ 'name' => "SYNCHRO_BDD_EXTERNE", 'source' => [ - 'code' => 'UTILISATEUR_OCTOPUS', + 'name' => 'UTILISATEUR_OCTOPUS', 'select' => 'SELECT CODE, NOM, PRENOM, NAISSANCE FROM UTILISATEUR', 'connection' => 'orm_B', 'source_code_column' => 'CODE', ], 'destination' => [ - 'code' => 'Table UTILISATEUR', + 'name' => 'Table UTILISATEUR', 'table' => 'UTILISATEUR', 'connection' => 'orm_A', 'source_code_column' => 'CODE', @@ -558,13 +559,13 @@ return [ [ 'name' => "SYNCHRO_COMMUNES", 'source' => [ - 'code' => 'geo_api', // DOIT correspondre à un `CODE` de la table `SOURCE` + 'name' => 'geo_api', // DOIT correspondre à un `CODE` de la table `SOURCE` 'select' => '/departements/63/communes?fields=nom,code', 'connection' => 'geo', 'source_code_column' => 'code', ], 'destination' => [ - 'code' => 'Table locale', + 'name' => 'Table locale', 'table' => 'REGION', 'connection' => 'orm_A', 'source_code_column' => 'CODE', @@ -619,13 +620,13 @@ return [ [ 'name' => "IMPORT_PRÉALABLE", // Importation des données externes dans une table intermédiaire 'source' => [ - 'code' => 'FORMATION_FCA', + 'name' => 'FORMATION_FCA', 'select' => 'SELECT ID, CODE, NOM, COMPOSANTE_CODE FROM FORMATION', 'connection' => 'orm_B', 'source_code_column' => 'ID', ], 'destination' => [ - 'code' => 'Table TMP_FORMATION locale', + 'name' => 'Table TMP_FORMATION locale', 'table' => 'TMP_FORMATION', 'connection' => 'orm_A', 'source_code_column' => 'ID', @@ -636,13 +637,13 @@ return [ [ 'name' => "SYNCHRO_FINALE", // Synchro des données mise en forme vers la table finale 'source' => [ - 'code' => 'TABLE SRC_FORMATION DE MA BASE A UTILISANT TMP_FORMATION', + 'name' => 'TABLE SRC_FORMATION DE MA BASE A UTILISANT TMP_FORMATION', 'select' => 'SELECT * FROM SRC_FORMATION', 'connection' => 'orm_A', 'source_code_column' => 'ID', ], 'destination' => [ - 'code' => 'TABLE FORMATION DE MA BASE A', + 'name' => 'TABLE FORMATION DE MA BASE A', 'table' => 'FORMATION', 'connection' => 'orm_A', 'source_code_column' => 'ID', diff --git a/config/module.config.php b/config/module.config.php index 065d84a..cefb239 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -6,7 +6,7 @@ use Doctrine\ORM\Mapping\Driver\XmlDriver; use Doctrine\Persistence\Mapping\Driver\MappingDriverChain; use Laminas\Router\Http\Literal; use Laminas\Router\Http\Segment; -use UnicaenAuth\Guard\PrivilegeController; +use UnicaenPrivilege\Guard\PrivilegeController; use UnicaenDbImport\CodeGenerator\HelperAbstractFactory; use UnicaenDbImport\Config\Config; use UnicaenDbImport\Config\ConfigFactory; diff --git a/public/unicaen/db-import/js/unicaen-db-import.js b/public/unicaen/db-import/js/unicaen-db-import.js index 02fa340..e2e7d34 100644 --- a/public/unicaen/db-import/js/unicaen-db-import.js +++ b/public/unicaen/db-import/js/unicaen-db-import.js @@ -58,6 +58,7 @@ function installLancementMultiple() } else { btn.addClass('disabled'); } + if(urlPattern === undefined){return;} btn.prop("href", urlPattern.replace('__names__', generateNames($checkboxes))); } } \ No newline at end of file diff --git a/src/UnicaenDbImport/CodeGenerator/Helper/TableValidationHelper.php b/src/UnicaenDbImport/CodeGenerator/Helper/TableValidationHelper.php index 3df7d50..0443981 100644 --- a/src/UnicaenDbImport/CodeGenerator/Helper/TableValidationHelper.php +++ b/src/UnicaenDbImport/CodeGenerator/Helper/TableValidationHelper.php @@ -33,7 +33,7 @@ abstract class TableValidationHelper extends Helper * @throws \UnicaenDbImport\CodeGenerator\Helper\HelperException */ public function convertTableExistenceCheckResultToBoolean(array $result): bool - { + { if (! isset($result[0])) { throw new HelperException("Données fournies non exploitables"); } diff --git a/src/UnicaenDbImport/Controller/SynchroController.php b/src/UnicaenDbImport/Controller/SynchroController.php index 3b65aae..d7fed3d 100644 --- a/src/UnicaenDbImport/Controller/SynchroController.php +++ b/src/UnicaenDbImport/Controller/SynchroController.php @@ -2,6 +2,7 @@ namespace UnicaenDbImport\Controller; +use Exception; use Laminas\Http\PhpEnvironment\Response; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\JsonModel; @@ -37,12 +38,16 @@ class SynchroController extends AbstractActionController } else { $synchros = $this->synchroService->getSynchros(); } - $importLogs = $diffCounts = []; foreach ($synchros as $synchro) { $importLog = $this->importLogService->findLastLogForSynchro($synchro); - $importLogs[$synchro->getName()] = $importLog; - $diffCounts[$synchro->getName()] = $this->synchroService->fetchSynchroDiffCount($synchro); + $importLogs[$synchro->getName()] = $importLog; + try{ + $diffCounts[$synchro->getName()] = $this->synchroService->fetchSynchroDiffCount($synchro); + } + catch (Exception $e){ + $this->flashMessenger()->addErrorMessage(sprintf("Erreur rencontrée lors du calcul des différences pour la syncho %s", $synchro)); + } } return [ @@ -62,7 +67,12 @@ class SynchroController extends AbstractActionController { $name = $this->params('name'); $synchro = $this->synchroService->getSynchroByName($name); - $diffCount = $this->synchroService->fetchSynchroDiffCount($synchro); + try{ + $diffCount = $this->synchroService->fetchSynchroDiffCount($synchro); + } + catch (Exception $e){ + $this->flashMessenger()->addErrorMessage(sprintf("Erreur rencontrée lors du calcul des différences pour la syncho %s", $synchro)); + } $importLog = $this->importLogService->findLastLogForSynchro($synchro); return [ diff --git a/src/UnicaenDbImport/Privilege/ImportPrivilege.php b/src/UnicaenDbImport/Privilege/ImportPrivilege.php index 9a8f20f..acab5fd 100644 --- a/src/UnicaenDbImport/Privilege/ImportPrivilege.php +++ b/src/UnicaenDbImport/Privilege/ImportPrivilege.php @@ -2,7 +2,7 @@ namespace UnicaenDbImport\Privilege; -use UnicaenAuth\Provider\Privilege\Privileges; +use UnicaenPrivilege\Provider\Privilege\Privileges; class ImportPrivilege extends Privileges { diff --git a/src/UnicaenDbImport/Privilege/LogPrivilege.php b/src/UnicaenDbImport/Privilege/LogPrivilege.php index ce00e9e..1e44b79 100644 --- a/src/UnicaenDbImport/Privilege/LogPrivilege.php +++ b/src/UnicaenDbImport/Privilege/LogPrivilege.php @@ -2,7 +2,7 @@ namespace UnicaenDbImport\Privilege; -use UnicaenAuth\Provider\Privilege\Privileges; +use UnicaenPrivilege\Provider\Privilege\Privileges; class LogPrivilege extends Privileges { diff --git a/src/UnicaenDbImport/Privilege/ObservationPrivilege.php b/src/UnicaenDbImport/Privilege/ObservationPrivilege.php index f1a8613..34f01c7 100644 --- a/src/UnicaenDbImport/Privilege/ObservationPrivilege.php +++ b/src/UnicaenDbImport/Privilege/ObservationPrivilege.php @@ -2,7 +2,7 @@ namespace UnicaenDbImport\Privilege; -use UnicaenAuth\Provider\Privilege\Privileges; +use UnicaenPrivilege\Provider\Privilege\Privileges; class ObservationPrivilege extends Privileges { diff --git a/src/UnicaenDbImport/Privilege/SynchroPrivilege.php b/src/UnicaenDbImport/Privilege/SynchroPrivilege.php index b3359fe..3a73d25 100644 --- a/src/UnicaenDbImport/Privilege/SynchroPrivilege.php +++ b/src/UnicaenDbImport/Privilege/SynchroPrivilege.php @@ -2,7 +2,7 @@ namespace UnicaenDbImport\Privilege; -use UnicaenAuth\Provider\Privilege\Privileges; +use UnicaenPrivilege\Provider\Privilege\Privileges; class SynchroPrivilege extends Privileges { diff --git a/src/UnicaenDbImport/Service/Database/DatabaseService.php b/src/UnicaenDbImport/Service/Database/DatabaseService.php index eb76d93..8df460c 100644 --- a/src/UnicaenDbImport/Service/Database/DatabaseService.php +++ b/src/UnicaenDbImport/Service/Database/DatabaseService.php @@ -468,6 +468,9 @@ class DatabaseService "les données doivent contenir une colonne SOURCE_ID ou source_id"); } } + else{ + $row['SOURCE_ID'] = $sourceCode; + } return $row; } diff --git a/src/UnicaenDbImport/Service/Facade/SynchroFacadeService.php b/src/UnicaenDbImport/Service/Facade/SynchroFacadeService.php index 8cfc7dc..740bd34 100644 --- a/src/UnicaenDbImport/Service/Facade/SynchroFacadeService.php +++ b/src/UnicaenDbImport/Service/Facade/SynchroFacadeService.php @@ -64,9 +64,33 @@ class SynchroFacadeService extends AbstractFacadeService */ public function fetchSynchroDiff(): array { + $intermediateTable = null; + + if ($this->requiresIntermediateTable) { + $this->fetchSource(); + $intermediateTable = $this->destination->getIntermediateTable(); + if ($this->destination->getIntermediateTableAutoDrop()) { + $this->logger->info("Suppression de la table intermédiaire $intermediateTable"); + $this->databaseService->dropIntermediateTable($intermediateTable); + } else { + $this->databaseService->checkIntermediateTableNotExists($intermediateTable); + } + + $this->logger->info("Création de la table intermédiaire $intermediateTable"); + $this->databaseService->createIntermediateTable($intermediateTable); + $this->logger->info("Peuplement de la table intermédiaire $intermediateTable"); + $this->databaseService->populateTableFromSource($intermediateTable, false); + } + $this->recreateDiffView(); + $result = $this->databaseService->fetchDiffView(); + + if ($this->requiresIntermediateTable) { + $this->logger->info("Suppression de la table intermédiaire"); + $this->databaseService->dropIntermediateTable($intermediateTable); + } - return $this->databaseService->fetchDiffView(); + return $result; } /** @@ -75,9 +99,32 @@ class SynchroFacadeService extends AbstractFacadeService */ public function fetchSynchroDiffCount(): int { + $intermediateTable = null; + + if ($this->requiresIntermediateTable) { + $this->fetchSource(); + $intermediateTable = $this->destination->getIntermediateTable(); + if ($this->destination->getIntermediateTableAutoDrop()) { + $this->logger->info("Suppression de la table intermédiaire $intermediateTable"); + $this->databaseService->dropIntermediateTable($intermediateTable); + } else { + $this->databaseService->checkIntermediateTableNotExists($intermediateTable); + } + + $this->logger->info("Création de la table intermédiaire $intermediateTable"); + $this->databaseService->createIntermediateTable($intermediateTable); + $this->logger->info("Peuplement de la table intermédiaire $intermediateTable"); + $this->databaseService->populateTableFromSource($intermediateTable, false); + } + $this->recreateDiffView(); + $result = $this->databaseService->fetchDiffViewCount(); - return $this->databaseService->fetchDiffViewCount(); + if ($this->requiresIntermediateTable) { + $this->logger->info("Suppression de la table intermédiaire"); + $this->databaseService->dropIntermediateTable($intermediateTable); + } + return $result; } /** @@ -91,7 +138,6 @@ class SynchroFacadeService extends AbstractFacadeService if ($this->requiresIntermediateTable) { $this->fetchSource(); - $intermediateTable = $this->destination->getIntermediateTable(); if ($this->destination->getIntermediateTableAutoDrop()) { $this->logger->info("Suppression de la table intermédiaire $intermediateTable"); @@ -105,7 +151,6 @@ class SynchroFacadeService extends AbstractFacadeService $this->logger->info("Peuplement de la table intermédiaire $intermediateTable"); $this->databaseService->populateTableFromSource($intermediateTable, false); } - $this->recreateDiffView(); if ($this->useImportObserv) { diff --git a/view/unicaen-db-import/import/index.phtml b/view/unicaen-db-import/import/index.phtml index 43fa49e..fd6e215 100644 --- a/view/unicaen-db-import/import/index.phtml +++ b/view/unicaen-db-import/import/index.phtml @@ -162,6 +162,7 @@ $lancable = $this->isAllowed(ImportPrivilege::getResourceId(ImportPrivilege::LAN $(function() { // `conn` est de type `WebSocket` (cf. https://developer.mozilla.org/fr/docs/Web/API/WebSocket) let conn = $("#livelog-div").data('conn'); + if(conn === undefined){return;} conn.addEventListener('open', function(e) { $("#a-lancer-multiple").on('click', function(event) { let trigger = $(this).addClass('disabled'); diff --git a/view/unicaen-db-import/import/voir.phtml b/view/unicaen-db-import/import/voir.phtml index 4c4f5a8..4067b1e 100644 --- a/view/unicaen-db-import/import/voir.phtml +++ b/view/unicaen-db-import/import/voir.phtml @@ -72,6 +72,7 @@ $lancable = $this->isAllowed(ImportPrivilege::getResourceId(ImportPrivilege::LAN $(function() { // `conn` est de type `WebSocket` (cf. https://developer.mozilla.org/fr/docs/Web/API/WebSocket) let conn = $("#livelog-div").data('conn'); + if(conn === undefined){return;} conn.addEventListener('open', function(e) { $("#lancer").on('click', function(event) { let trigger = $(this).addClass('disabled'); diff --git a/view/unicaen-db-import/log/index.phtml b/view/unicaen-db-import/log/index.phtml index 13d7e41..793c1a1 100644 --- a/view/unicaen-db-import/log/index.phtml +++ b/view/unicaen-db-import/log/index.phtml @@ -121,7 +121,7 @@ $synchroConsultable = $this->isAllowed(SynchroPrivilege::getResourceId(SynchroPr <?php endif ?> -<?php echo $paginationControl = $this->paginationControl($importLogs, 'sliding', 'paginator.phtml', ['route' => 'unicaen-db-import/log']) ?> +<?php echo $paginationControl = $this->paginationControl($importLogs, 'sliding', 'unicaen-db-import/paginator', ['route' => 'unicaen-db-import/log']) ?> <?php echo $this->partial('unicaen-db-import/paginator'); ?> diff --git a/view/unicaen-db-import/synchro/index.phtml b/view/unicaen-db-import/synchro/index.phtml index 3761577..079f497 100644 --- a/view/unicaen-db-import/synchro/index.phtml +++ b/view/unicaen-db-import/synchro/index.phtml @@ -188,6 +188,7 @@ $lancable = $this->isAllowed(SynchroPrivilege::getResourceId(SynchroPrivilege::L $(function() { // `conn` est de type `WebSocket` (cf. https://developer.mozilla.org/fr/docs/Web/API/WebSocket) let conn = $("#livelog-div").data('conn'); + if(conn === undefined){return;} conn.addEventListener('open', function(e) { $("#a-lancer-multiple").on('click', function(event) { let trigger = $(this).addClass('disabled'); diff --git a/view/unicaen-db-import/synchro/voir.phtml b/view/unicaen-db-import/synchro/voir.phtml index d5f3def..85f855e 100644 --- a/view/unicaen-db-import/synchro/voir.phtml +++ b/view/unicaen-db-import/synchro/voir.phtml @@ -86,6 +86,7 @@ $lancable = $this->isAllowed(SynchroPrivilege::getResourceId(SynchroPrivilege::L $(function() { // `conn` est de type `WebSocket` (cf. https://developer.mozilla.org/fr/docs/Web/API/WebSocket) let conn = $("#livelog-div").data('conn'); + if(conn === undefined){return;} conn.addEventListener('open', function(e) { $("#lancer").on('click', function(event) { let trigger = $(this).addClass('disabled'); -- GitLab