Loading config/autoload/local.php.dist 100644 → 100755 +42 −70 Original line number Diff line number Diff line <?php use Zend\Mail\Transport\Smtp; /** * Fichier de config locale, SANS INFORMATIONS SENSIBLES. */ return [ 'import-api' => [ 'etablissements' => [ // code établissement => [config] 'UNILIM' => [ 'url' => 'https://sygal-import-ws:443', // https://{nom du service docker-compose}:443 'proxy' => false, // indispensable pour docker-compose run/exec 'verify' => false, // si true : cURL error 60: SSL certificate problem: self signed certificate 'user' => 'sygal-app', 'password' => 'xxxxxxxxxxx', ], ], // cf. secret.local.php ], 'doctrine' => [ 'connection' => [ 'orm_default' => [ 'params' => [ 'host' => 'host.domain.fr', 'dbname' => 'DBNAME', 'port' => '1523', 'user' => $user = 'sygal_test', 'password' => 'xxxxxxxxxxx', 'charset' => 'AL32UTF8', 'CURRENT_SCHEMA' => $user, ], ], ], // cf. secret.local.php ], 'fichier' => [ 'root_dir_path' => '/var/www/sygal/upload', ], 'navigation' => [ 'information' => [ 'accueil' => [ 'pages' => [ 'doctorat' => [ 'label' => 'Le doctorat en Normandie', 'title' => "Informations sur le doctorat et sa gestion en Normandie" ], 'ecoles-doctorales' => [ 'label' => 'Les Ecoles Doctorales normandes', 'title' => "Informations sur les Ecoles Doctorales et le Collège des Ecoles doctorales" ], 'guide-these' => [ 'label' => 'Guide de la thèse', 'title' => "Informations sur le déroulement de la thèse et formulaires administratifs à l’intention du doctorant et de ses encadrants" ], ], ], ], ], 'cli_config' => [ 'scheme' => 'http', 'domain' => 'localhost:8000', // cf. secret.local.php ], 'public_files' => [ 'cache_enabled' => false, ], 'unicaen-app' => [ 'mail' => [ 'transport' => Smtp::class, 'transport_options' => [ 'host' => 'smtp.domain.fr', 'port' => 25, ], 'from' => 'ne_pas_repondre@domain.fr', 'redirect_to' => [/*'mail@domain.fr'*/], // cf. secret.local.php 'do_not_send' => false, ], 'ldap' => [ 'connection' => [ 'default' => [ 'params' => $ldapParams = [ 'params' => [ // pas de LDAP ] ] ] Loading @@ -82,22 +41,32 @@ return [ 'maintenance' => [ // activation (true: activé, false: désactivé) 'enable' => false, // message à afficher 'message' => "SyGAL est indisponible pour des raisons de maintenance, veuillez nous excuser pour la gêne occasionnée.", // le mode console est-il aussi concerné (TRUE: oui, FALSE: non) 'include_cli' => false, // liste blanche des adresses IP clientes non concernées 'white_list' => [ //['127.0.0.1'], // localhost // cf. secret.local.php ], ], ], 'unicaen-ldap' => $ldapParams, 'unicaen-ldap' => [ // pas de LDAP ], 'unicaen-auth' => [ 'local' => [ 'enabled' => true, ], 'ldap' => [ 'enabled' => false, ], 'shibboleth' => [ 'enable' => true, 'simulate' => [ 'eppn' => 'id@domain.fr', 'supannEmpId' => 'xxxxxx', // cf. secret.local.php ], 'aliases' => [ 'eppn' => 'HTTP_EPPN', Loading @@ -108,25 +77,28 @@ return [ 'supannCivilite' => 'HTTP_SUPANNCIVILITE', 'displayName' => 'HTTP_DISPLAYNAME', 'sn' => 'HTTP_SN', 'surname' => 'HTTP_SURNAME', 'givenName' => 'HTTP_GIVENNAME', ], 'required_attributes' => [ 'eppn', 'mail', 'eduPersonPrincipalName', 'supannCivilite', 'displayName', 'sn|surname', // i.e. 'sn' ou 'surname' 'givenName', 'supannEtuId|supannEmpId', ], ], 'cas' => [ // 'connection' => [ // 'default' => [ // 'params' => [ // 'hostname' => 'host.domain.fr', // 'port' => 443, // 'version' => "2.0", // 'uri' => "", // 'debug' => false, // ], // ], // ], // pas de CAS ], 'usurpation_allowed_usernames' => [ // cf. secret.local.php ], ], 'zenddevelopertools' => [ /** * General Profiler settings Loading config/autoload/secret.local.php.dist 0 → 100755 +81 −0 Original line number Diff line number Diff line <?php /** * Fichier de config locale, AVEC INFORMATIONS SENSIBLES. */ use Zend\Mail\Transport\Smtp; return [ 'import-api' => [ 'etablissements' => [ // code établissement => [config] 'UNILIM' => [ 'url' => 'https://sygal-import-ws:443', // https://{nom du service docker-compose}:443 'proxy' => false, // indispensable pour docker-compose run/exec 'verify' => false, // si true : cURL error 60: SSL certificate problem: self signed certificate 'user' => 'sygal-app', 'password' => 'xxxxxxxxxxx', ], ], ], 'doctrine' => [ 'connection' => [ 'orm_default' => [ 'params' => [ 'host' => 'host.domain.fr', 'dbname' => 'DBNAME', 'port' => '1523', 'user' => $user = 'sygal', 'password' => 'xxxxxxxxxxx', 'charset' => 'AL32UTF8', 'CURRENT_SCHEMA' => $user, ], ], ], ], 'fichier' => [ 'root_dir_path' => '/var/www/sygal/upload', ], 'cli_config' => [ 'scheme' => 'http', 'domain' => 'localhost:8000', ], 'unicaen-app' => [ 'mail' => [ 'transport' => Smtp::class, 'transport_options' => [ 'host' => 'smtp.unicaen.fr', 'port' => 25, ], 'from' => 'ne_pas_repondre@domain.fr', 'redirect_to' => [ //'e.mail@domain.fr', ], ], 'maintenance' => [ // liste blanche des adresses IP clientes non concernées 'white_list' => [ //['172.17.0.1'], // docker container ip //['195.123.456.789', '194.123.456.789'], ], ], ], 'unicaen-auth' => [ 'shibboleth' => [ 'simulate' => [ //'eppn' => 'username@domain.fr', //'supannEmpId' => '12345', ], ], 'usurpation_allowed_usernames' => [ 'username', 'username@domain.fr', ], ], ]; config/autoload/version.global.php +3 −3 Original line number Diff line number Diff line Loading @@ -2,9 +2,9 @@ return [ 'unicaen-app' => [ 'app_infos' => [ 'version' => '1.0.5', 'date' => '31/01/2019', 'version' => '1.0.6', 'date' => '01/02/2019', ], ], 'comment' => 'Fichier généré le 31/01/2019 à 14:14:46 avec /home/gauthierb/workspace/sygal/bump-version', 'comment' => 'Fichier généré le 01/02/2019 à 11:02:57 avec /home/gauthierb/workspace/sygal/bump-version', ]; module/Import/src/Import/Service/SynchroService.php +27 −10 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Import\Service; use DateTime; use Doctrine\DBAL\ConnectionException; use Doctrine\DBAL\DBALException; use Doctrine\ORM\OptimisticLockException; use Import\Model\SynchroLog; use UnicaenApp\Exception\LogicException; use UnicaenApp\Exception\RuntimeException; Loading Loading @@ -54,11 +53,13 @@ class SynchroService throw new LogicException("Aucun service à synchroniser"); } // ajout en premier des appels de procédures permettant d'enregistrer certains changements durant la synchro $calls = $this->getProcedureCallsForStoringObservImportResults(); // détermination des appels de procédures de synchro à faire $calls = []; foreach ($this->services as $service => $params) { $sqlFilter = isset($params['sql_filter']) ? $params['sql_filter'] : []; $calls = array_merge($calls, $this->getImportProcedureCallsForService($service, $sqlFilter)); $calls = array_merge($calls, $this->getProcedureCallsForImportingService($service, $sqlFilter)); } // suppression des appels en double EN CONSERVANT LE DERNIER appel et non le premier $calls = array_reverse(array_unique(array_reverse($calls))); Loading @@ -80,23 +81,39 @@ class SynchroService try { $connection->executeQuery($plsql); $connection->commit(); $status = 'SUCCESS'; $success = true; $message = null; } catch (DBALException $e) { $status = 'FAILURE'; $message = "Erreur rencontrée lors de l'exécution des procédures de synchro (import) : " . PHP_EOL . $e->getTraceAsString(); $success = false; $message = "Erreur rencontrée lors de l'exécution des procédures de synchro (import) : " . PHP_EOL . $e->getMessage(); try { $connection->rollBack(); } catch (ConnectionException $e) { $message .= PHP_EOL . "Et en plus le rollback a échoué!"; } } } finally { $finishDate = date_create(); $status = $success ? 'SUCCESS' : 'FAILURE'; $this->log($startDate, $finishDate, $plsql, $status, $message); } if (! $success) { throw new RuntimeException($message); } } /** * Retourne les appels de procédures permettant d'enregistrer certains changements durant la synchro. * * @return string[] */ private function getProcedureCallsForStoringObservImportResults() { return [ 'APP_IMPORT.STORE_OBSERV_RESULTS();', ]; } /** * Retourne, pour un service donné, les appels ORDONNÉS de procédures de synchronisation à lancer. * Loading @@ -104,7 +121,7 @@ class SynchroService * @param string $sqlFilter * @return string[] */ private function getImportProcedureCallsForService($serviceName, $sqlFilter = null) private function getProcedureCallsForImportingService($serviceName, $sqlFilter = null) { $sqlFilterSnippet = $sqlFilter ? "'WHERE " . str_replace("'", "''", $sqlFilter) . "'" : ''; Loading Loading
config/autoload/local.php.dist 100644 → 100755 +42 −70 Original line number Diff line number Diff line <?php use Zend\Mail\Transport\Smtp; /** * Fichier de config locale, SANS INFORMATIONS SENSIBLES. */ return [ 'import-api' => [ 'etablissements' => [ // code établissement => [config] 'UNILIM' => [ 'url' => 'https://sygal-import-ws:443', // https://{nom du service docker-compose}:443 'proxy' => false, // indispensable pour docker-compose run/exec 'verify' => false, // si true : cURL error 60: SSL certificate problem: self signed certificate 'user' => 'sygal-app', 'password' => 'xxxxxxxxxxx', ], ], // cf. secret.local.php ], 'doctrine' => [ 'connection' => [ 'orm_default' => [ 'params' => [ 'host' => 'host.domain.fr', 'dbname' => 'DBNAME', 'port' => '1523', 'user' => $user = 'sygal_test', 'password' => 'xxxxxxxxxxx', 'charset' => 'AL32UTF8', 'CURRENT_SCHEMA' => $user, ], ], ], // cf. secret.local.php ], 'fichier' => [ 'root_dir_path' => '/var/www/sygal/upload', ], 'navigation' => [ 'information' => [ 'accueil' => [ 'pages' => [ 'doctorat' => [ 'label' => 'Le doctorat en Normandie', 'title' => "Informations sur le doctorat et sa gestion en Normandie" ], 'ecoles-doctorales' => [ 'label' => 'Les Ecoles Doctorales normandes', 'title' => "Informations sur les Ecoles Doctorales et le Collège des Ecoles doctorales" ], 'guide-these' => [ 'label' => 'Guide de la thèse', 'title' => "Informations sur le déroulement de la thèse et formulaires administratifs à l’intention du doctorant et de ses encadrants" ], ], ], ], ], 'cli_config' => [ 'scheme' => 'http', 'domain' => 'localhost:8000', // cf. secret.local.php ], 'public_files' => [ 'cache_enabled' => false, ], 'unicaen-app' => [ 'mail' => [ 'transport' => Smtp::class, 'transport_options' => [ 'host' => 'smtp.domain.fr', 'port' => 25, ], 'from' => 'ne_pas_repondre@domain.fr', 'redirect_to' => [/*'mail@domain.fr'*/], // cf. secret.local.php 'do_not_send' => false, ], 'ldap' => [ 'connection' => [ 'default' => [ 'params' => $ldapParams = [ 'params' => [ // pas de LDAP ] ] ] Loading @@ -82,22 +41,32 @@ return [ 'maintenance' => [ // activation (true: activé, false: désactivé) 'enable' => false, // message à afficher 'message' => "SyGAL est indisponible pour des raisons de maintenance, veuillez nous excuser pour la gêne occasionnée.", // le mode console est-il aussi concerné (TRUE: oui, FALSE: non) 'include_cli' => false, // liste blanche des adresses IP clientes non concernées 'white_list' => [ //['127.0.0.1'], // localhost // cf. secret.local.php ], ], ], 'unicaen-ldap' => $ldapParams, 'unicaen-ldap' => [ // pas de LDAP ], 'unicaen-auth' => [ 'local' => [ 'enabled' => true, ], 'ldap' => [ 'enabled' => false, ], 'shibboleth' => [ 'enable' => true, 'simulate' => [ 'eppn' => 'id@domain.fr', 'supannEmpId' => 'xxxxxx', // cf. secret.local.php ], 'aliases' => [ 'eppn' => 'HTTP_EPPN', Loading @@ -108,25 +77,28 @@ return [ 'supannCivilite' => 'HTTP_SUPANNCIVILITE', 'displayName' => 'HTTP_DISPLAYNAME', 'sn' => 'HTTP_SN', 'surname' => 'HTTP_SURNAME', 'givenName' => 'HTTP_GIVENNAME', ], 'required_attributes' => [ 'eppn', 'mail', 'eduPersonPrincipalName', 'supannCivilite', 'displayName', 'sn|surname', // i.e. 'sn' ou 'surname' 'givenName', 'supannEtuId|supannEmpId', ], ], 'cas' => [ // 'connection' => [ // 'default' => [ // 'params' => [ // 'hostname' => 'host.domain.fr', // 'port' => 443, // 'version' => "2.0", // 'uri' => "", // 'debug' => false, // ], // ], // ], // pas de CAS ], 'usurpation_allowed_usernames' => [ // cf. secret.local.php ], ], 'zenddevelopertools' => [ /** * General Profiler settings Loading
config/autoload/secret.local.php.dist 0 → 100755 +81 −0 Original line number Diff line number Diff line <?php /** * Fichier de config locale, AVEC INFORMATIONS SENSIBLES. */ use Zend\Mail\Transport\Smtp; return [ 'import-api' => [ 'etablissements' => [ // code établissement => [config] 'UNILIM' => [ 'url' => 'https://sygal-import-ws:443', // https://{nom du service docker-compose}:443 'proxy' => false, // indispensable pour docker-compose run/exec 'verify' => false, // si true : cURL error 60: SSL certificate problem: self signed certificate 'user' => 'sygal-app', 'password' => 'xxxxxxxxxxx', ], ], ], 'doctrine' => [ 'connection' => [ 'orm_default' => [ 'params' => [ 'host' => 'host.domain.fr', 'dbname' => 'DBNAME', 'port' => '1523', 'user' => $user = 'sygal', 'password' => 'xxxxxxxxxxx', 'charset' => 'AL32UTF8', 'CURRENT_SCHEMA' => $user, ], ], ], ], 'fichier' => [ 'root_dir_path' => '/var/www/sygal/upload', ], 'cli_config' => [ 'scheme' => 'http', 'domain' => 'localhost:8000', ], 'unicaen-app' => [ 'mail' => [ 'transport' => Smtp::class, 'transport_options' => [ 'host' => 'smtp.unicaen.fr', 'port' => 25, ], 'from' => 'ne_pas_repondre@domain.fr', 'redirect_to' => [ //'e.mail@domain.fr', ], ], 'maintenance' => [ // liste blanche des adresses IP clientes non concernées 'white_list' => [ //['172.17.0.1'], // docker container ip //['195.123.456.789', '194.123.456.789'], ], ], ], 'unicaen-auth' => [ 'shibboleth' => [ 'simulate' => [ //'eppn' => 'username@domain.fr', //'supannEmpId' => '12345', ], ], 'usurpation_allowed_usernames' => [ 'username', 'username@domain.fr', ], ], ];
config/autoload/version.global.php +3 −3 Original line number Diff line number Diff line Loading @@ -2,9 +2,9 @@ return [ 'unicaen-app' => [ 'app_infos' => [ 'version' => '1.0.5', 'date' => '31/01/2019', 'version' => '1.0.6', 'date' => '01/02/2019', ], ], 'comment' => 'Fichier généré le 31/01/2019 à 14:14:46 avec /home/gauthierb/workspace/sygal/bump-version', 'comment' => 'Fichier généré le 01/02/2019 à 11:02:57 avec /home/gauthierb/workspace/sygal/bump-version', ];
module/Import/src/Import/Service/SynchroService.php +27 −10 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Import\Service; use DateTime; use Doctrine\DBAL\ConnectionException; use Doctrine\DBAL\DBALException; use Doctrine\ORM\OptimisticLockException; use Import\Model\SynchroLog; use UnicaenApp\Exception\LogicException; use UnicaenApp\Exception\RuntimeException; Loading Loading @@ -54,11 +53,13 @@ class SynchroService throw new LogicException("Aucun service à synchroniser"); } // ajout en premier des appels de procédures permettant d'enregistrer certains changements durant la synchro $calls = $this->getProcedureCallsForStoringObservImportResults(); // détermination des appels de procédures de synchro à faire $calls = []; foreach ($this->services as $service => $params) { $sqlFilter = isset($params['sql_filter']) ? $params['sql_filter'] : []; $calls = array_merge($calls, $this->getImportProcedureCallsForService($service, $sqlFilter)); $calls = array_merge($calls, $this->getProcedureCallsForImportingService($service, $sqlFilter)); } // suppression des appels en double EN CONSERVANT LE DERNIER appel et non le premier $calls = array_reverse(array_unique(array_reverse($calls))); Loading @@ -80,23 +81,39 @@ class SynchroService try { $connection->executeQuery($plsql); $connection->commit(); $status = 'SUCCESS'; $success = true; $message = null; } catch (DBALException $e) { $status = 'FAILURE'; $message = "Erreur rencontrée lors de l'exécution des procédures de synchro (import) : " . PHP_EOL . $e->getTraceAsString(); $success = false; $message = "Erreur rencontrée lors de l'exécution des procédures de synchro (import) : " . PHP_EOL . $e->getMessage(); try { $connection->rollBack(); } catch (ConnectionException $e) { $message .= PHP_EOL . "Et en plus le rollback a échoué!"; } } } finally { $finishDate = date_create(); $status = $success ? 'SUCCESS' : 'FAILURE'; $this->log($startDate, $finishDate, $plsql, $status, $message); } if (! $success) { throw new RuntimeException($message); } } /** * Retourne les appels de procédures permettant d'enregistrer certains changements durant la synchro. * * @return string[] */ private function getProcedureCallsForStoringObservImportResults() { return [ 'APP_IMPORT.STORE_OBSERV_RESULTS();', ]; } /** * Retourne, pour un service donné, les appels ORDONNÉS de procédures de synchronisation à lancer. * Loading @@ -104,7 +121,7 @@ class SynchroService * @param string $sqlFilter * @return string[] */ private function getImportProcedureCallsForService($serviceName, $sqlFilter = null) private function getProcedureCallsForImportingService($serviceName, $sqlFilter = null) { $sqlFilterSnippet = $sqlFilter ? "'WHERE " . str_replace("'", "''", $sqlFilter) . "'" : ''; Loading