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