From bf786c02d9ecc9ce1697033c7a5447908215e7c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr> Date: Tue, 19 Mar 2019 10:11:06 +0000 Subject: [PATCH] =?UTF-8?q?Mise=20en=20place=20d'un=20cache=20pour=20r?= =?UTF-8?q?=C3=A9cup=C3=A9rer=20les=20affectations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.local.php.default | 3 +++ config/application.config.php | 1 - config/autoload/application.global.php | 24 +++++++++---------- config/autoload/unicaen-app.global.php | 2 +- config/autoload/unicaen-auth.global.php | 4 ++-- config/autoload/zenddevelopertools.dev.php | 2 +- .../Application/config/aaa_module.config.php | 11 +++++---- .../Controller/DroitsController.php | 5 ++++ .../Provider/Role/RoleProvider.php | 5 +++- .../Traits/DoctrineCacheAwareTrait.php | 18 ++++++++++++++ 10 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 module/Application/src/Application/Traits/DoctrineCacheAwareTrait.php diff --git a/config.local.php.default b/config.local.php.default index e910c209fc..30b43408b4 100755 --- a/config.local.php.default +++ b/config.local.php.default @@ -128,6 +128,9 @@ return [ /* Configuration LDAP */ 'ldap' => [ + /* Actif (si non, alors seuls les comptes locaux seront autorisés à se connecter à OSE) */ + 'actif' => true, + /* IP ou nom DNS de la machine hébergeant le serveur LDAP */ 'host' => 'ldap.unicaen.fr', diff --git a/config/application.config.php b/config/application.config.php index ddb4efe596..b414fcca39 100755 --- a/config/application.config.php +++ b/config/application.config.php @@ -80,7 +80,6 @@ class AppConfig if ('development' == $env) { $modules[] = 'ZendDeveloperTools'; - $configGlobPaths[] = 'config/autoload/{,*.}{global,local}.php.dev'; } if (self::inConsole() || 'development' == $env){ diff --git a/config/autoload/application.global.php b/config/autoload/application.global.php index 43c1eeaf55..072cb56c25 100755 --- a/config/autoload/application.global.php +++ b/config/autoload/application.global.php @@ -5,12 +5,12 @@ return [ 'connection' => [ 'orm_default' => [ 'params' => [ - 'host' => AppConfig::get('bdd','host'), - 'port' => AppConfig::get('bdd','port'), - 'dbname' => AppConfig::get('bdd','dbname'), - 'user' => AppConfig::get('bdd','username'), - 'password' => AppConfig::get('bdd','password'), - 'charset' => 'AL32UTF8', + 'host' => AppConfig::get('bdd', 'host'), + 'port' => AppConfig::get('bdd', 'port'), + 'dbname' => AppConfig::get('bdd', 'dbname'), + 'user' => AppConfig::get('bdd', 'username'), + 'password' => AppConfig::get('bdd', 'password'), + 'charset' => 'AL32UTF8', 'persistent' => true, ], ], @@ -19,20 +19,20 @@ return [ 'orm_default' => [ 'metadata_cache' => 'array', // 'query_cache' => 'array', - 'result_cache' => 'array', + 'result_cache' => 'filesystem', 'hydration_cache' => 'array', - 'generate_proxies' => AppConfig::get('bdd','generateProxies'), + 'generate_proxies' => AppConfig::get('bdd', 'generateProxies'), 'proxy_dir' => 'data/cache/DoctrineProxy', ], ], ], 'view_manager' => [ - 'display_not_found_reason' => AppConfig::get('global','affichageErreurs'), - 'display_exceptions' => AppConfig::get('global','affichageErreurs'), + 'display_not_found_reason' => AppConfig::get('global', 'affichageErreurs'), + 'display_exceptions' => AppConfig::get('global', 'affichageErreurs'), ], 'cli_config' => [ - 'scheme' => AppConfig::get('global','scheme'), - 'domain' => AppConfig::get('global','domain'), + 'scheme' => AppConfig::get('global', 'scheme'), + 'domain' => AppConfig::get('global', 'domain'), ], ]; \ No newline at end of file diff --git a/config/autoload/unicaen-app.global.php b/config/autoload/unicaen-app.global.php index e138b29f7e..0e2830e880 100755 --- a/config/autoload/unicaen-app.global.php +++ b/config/autoload/unicaen-app.global.php @@ -31,7 +31,7 @@ return [ 'connection' => [ 'default' => [ 'params' => [ - 'host' => AppConfig::get('ldap', 'host'), + 'host' => AppConfig::get('ldap', 'actif', true) ? AppConfig::get('ldap', 'host') : null, 'username' => AppConfig::get('ldap', 'username'), 'password' => AppConfig::get('ldap', 'password'), 'baseDn' => AppConfig::get('ldap', 'baseDn'), diff --git a/config/autoload/unicaen-auth.global.php b/config/autoload/unicaen-auth.global.php index c0ce803550..49030e6362 100755 --- a/config/autoload/unicaen-auth.global.php +++ b/config/autoload/unicaen-auth.global.php @@ -41,7 +41,7 @@ $settings = [ /** * Possibilité ou non de s'authentifier à l'aide d'un compte local. */ - 'enabled' => false, + 'enabled' => !AppConfig::get('ldap', 'actif', true), ], /** @@ -51,7 +51,7 @@ $settings = [ /** * Possibilité ou non de s'authentifier via l'annuaire LDAP ET en local!!. */ - 'enabled' => true, + 'enabled' => AppConfig::get('ldap', 'actif', true), ], /** diff --git a/config/autoload/zenddevelopertools.dev.php b/config/autoload/zenddevelopertools.dev.php index 76e140db84..ed016e4d44 100644 --- a/config/autoload/zenddevelopertools.dev.php +++ b/config/autoload/zenddevelopertools.dev.php @@ -153,7 +153,7 @@ return array( 'doctrine.mapping_collector.orm_default' => false, //'bjy_authorize_role_collector' => false, //'request' => false, - 'memory' => false, + //'memory' => false, ) ) ) diff --git a/module/Application/config/aaa_module.config.php b/module/Application/config/aaa_module.config.php index da68953b38..69e105b735 100755 --- a/module/Application/config/aaa_module.config.php +++ b/module/Application/config/aaa_module.config.php @@ -47,20 +47,23 @@ $config = [ ], ], 'cache' => [ - 'apc' => [ + 'apc' => [ 'namespace' => 'OSE__' . __NAMESPACE__, ], + 'filesystem' => [ + 'directory' => getcwd().'/data/cache/Doctrine', + ], ], ], 'zfcuser' => [ 'user_entity_class' => Entity\Db\Utilisateur::class, ], - 'translator' => [ + 'translator' => [ 'locale' => \AppConfig::get('global', 'locale'), 'translation_file_patterns' => [ [ 'type' => 'gettext', - 'base_dir' => getcwd().'/language', + 'base_dir' => getcwd() . '/language', 'pattern' => '%s.mo', ], ], @@ -236,7 +239,7 @@ $config = [ ], ]; -if ($customCss = \AppConfig::get('etablissement', 'css')){ +if ($customCss = \AppConfig::get('etablissement', 'css')) { $config['public_files']['stylesheets']['999_'] = $customCss; } diff --git a/module/Application/src/Application/Controller/DroitsController.php b/module/Application/src/Application/Controller/DroitsController.php index f77eb870a2..6aa7d05ebe 100755 --- a/module/Application/src/Application/Controller/DroitsController.php +++ b/module/Application/src/Application/Controller/DroitsController.php @@ -6,6 +6,7 @@ use Application\Cache\Traits\CacheContainerTrait; use Application\Entity\Db\Affectation; use Application\Entity\Db\Role; use Application\Form\Droits\Traits\AffectationFormAwareTrait; +use Application\Provider\Role\RoleProvider; use Application\Service\PrivilegeService; use Application\Service\Traits\AffectationServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; @@ -15,6 +16,7 @@ use Application\Service\Traits\StatutIntervenantServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; use Application\Form\Droits\Traits\RoleFormAwareTrait; use Application\Service\Traits\UtilisateurServiceAwareTrait; +use Application\Traits\DoctrineCacheAwareTrait; use UnicaenAuth\Service\Traits\PrivilegeServiceAwareTrait; use Application\Entity\Db\StatutIntervenant; use UnicaenAuth\Entity\Db\Privilege; @@ -38,6 +40,7 @@ class DroitsController extends AbstractController use AffectationFormAwareTrait; use ContextServiceAwareTrait; use CacheContainerTrait; + use DoctrineCacheAwareTrait; @@ -282,6 +285,7 @@ class DroitsController extends AbstractController } } } + $this->getCacheFilesystem()->delete(RoleProvider::class.'/affectations'); return compact('form', 'title', 'errors'); } @@ -297,6 +301,7 @@ class DroitsController extends AbstractController $form = $this->makeFormSupprimer(function()use($affectation){ $this->getServiceAffectation()->delete($affectation); }); + $this->getCacheFilesystem()->delete(RoleProvider::class.'/affectations'); return compact('affectation', 'title', 'form'); } diff --git a/module/Application/src/Application/Provider/Role/RoleProvider.php b/module/Application/src/Application/Provider/Role/RoleProvider.php index ec437dea4e..42922bd3b3 100755 --- a/module/Application/src/Application/Provider/Role/RoleProvider.php +++ b/module/Application/src/Application/Provider/Role/RoleProvider.php @@ -109,7 +109,7 @@ class RoleProvider implements ProviderInterface, EntityManagerAwareInterface // chargement des rôles métiers $query = $this->getEntityManager()->createQuery( - 'SELECT DISTINCT + 'SELECT r, a, s, p FROM Application\Entity\Db\Role r @@ -119,6 +119,9 @@ class RoleProvider implements ProviderInterface, EntityManagerAwareInterface WHERE r.histoDestruction IS NULL' )->setParameter('utilisateur', $utilisateur); + $query->useResultCache(true); + $query->setResultCacheId(__CLASS__.'/affectations'); + $result = $query->getResult(); $rolesPrivileges = $this->getRolesPrivileges(); diff --git a/module/Application/src/Application/Traits/DoctrineCacheAwareTrait.php b/module/Application/src/Application/Traits/DoctrineCacheAwareTrait.php new file mode 100644 index 0000000000..f55c5d9920 --- /dev/null +++ b/module/Application/src/Application/Traits/DoctrineCacheAwareTrait.php @@ -0,0 +1,18 @@ +<?php + +namespace Application\Traits; + +use Doctrine\Common\Cache\FilesystemCache; + +trait DoctrineCacheAwareTrait +{ + /** + * Retourne le cache de système de fichiers de Doctrine + * + * @return FilesystemCache + */ + public function getCacheFilesystem(): FilesystemCache + { + return \Application::$container->get('doctrine.cache.filesystem'); + } +} \ No newline at end of file -- GitLab