Commit b720a365 authored by Thibaut Vallee's avatar Thibaut Vallee
Browse files

création d'un branche compatible Laminas, PHP-7.4 (et probablement 8 mais non...

création d'un branche compatible Laminas, PHP-7.4 (et probablement 8 mais non vérifié). Dependance avec Boostrap5 et UnicaenPrivilege (a la place de UnicaenAuth
parent fe9305e2
Pipeline #15287 passed with stage
in 16 seconds
......@@ -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',
......
......@@ -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;
......
......@@ -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
......@@ -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");
}
......
......@@ -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 [
......
......@@ -2,7 +2,7 @@
namespace UnicaenDbImport\Privilege;
use UnicaenAuth\Provider\Privilege\Privileges;
use UnicaenPrivilege\Provider\Privilege\Privileges;
class ImportPrivilege extends Privileges
{
......
......@@ -2,7 +2,7 @@
namespace UnicaenDbImport\Privilege;
use UnicaenAuth\Provider\Privilege\Privileges;
use UnicaenPrivilege\Provider\Privilege\Privileges;
class LogPrivilege extends Privileges
{
......
......@@ -2,7 +2,7 @@
namespace UnicaenDbImport\Privilege;
use UnicaenAuth\Provider\Privilege\Privileges;
use UnicaenPrivilege\Provider\Privilege\Privileges;
class ObservationPrivilege extends Privileges
{
......
......@@ -2,7 +2,7 @@
namespace UnicaenDbImport\Privilege;
use UnicaenAuth\Provider\Privilege\Privileges;
use UnicaenPrivilege\Provider\Privilege\Privileges;
class SynchroPrivilege extends Privileges
{
......
......@@ -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;
}
......
......@@ -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) {
......
......@@ -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');
......
......@@ -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');
......
......@@ -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'); ?>
......
......@@ -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');
......
......@@ -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');
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment