From de7726d0a866042d311e9ca0cf43b0ebc1c46f43 Mon Sep 17 00:00:00 2001 From: Patrick Barroca <pbarroca@afi-sa.fr> Date: Thu, 6 Feb 2020 10:35:55 +0100 Subject: [PATCH] hotline#105091 : Performance : Issue fixed in dynamic library groups management --- VERSIONS_HOTLINE/105091 | 1 + library/Class/UserGroup.php | 28 ++++++++++++++++++++++++++++ library/Class/Users.php | 3 +-- 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 VERSIONS_HOTLINE/105091 diff --git a/VERSIONS_HOTLINE/105091 b/VERSIONS_HOTLINE/105091 new file mode 100644 index 00000000000..e15a2d398cd --- /dev/null +++ b/VERSIONS_HOTLINE/105091 @@ -0,0 +1 @@ + - ticket #105091 : Performance : Correction de la perte de performance suite à la livraison des nouveaux groupes dynamiques \ No newline at end of file diff --git a/library/Class/UserGroup.php b/library/Class/UserGroup.php index 5c2ede4bb45..77f6f19ec96 100644 --- a/library/Class/UserGroup.php +++ b/library/Class/UserGroup.php @@ -22,6 +22,17 @@ class UserGroupLoader extends Storm_Model_Loader { use Trait_MemoryCleaner; + protected static $_dynamics_of_user_cache = []; + + + public function save($model) { + $result = parent::save($model); + if ($model->isDynamic()) + static::$_dynamics_of_user_cache = []; + + return $result; + } + public function getUsersIdsOf($group) { $ids = []; @@ -99,6 +110,23 @@ class UserGroupLoader extends Storm_Model_Loader { public function findAllDynamics() { return Class_UserGroup::findAllBy(['group_type' => Class_UserGroup::TYPE_DYNAMIC]); } + + + public function findAllDynamicsOf($user) { + if ($user->isNew()) + return $this->_realFindAllDynamicsOf($user); + + $key = $user->getId(); + return array_key_exists($key, static::$_dynamics_of_user_cache) + ? static::$_dynamics_of_user_cache[$key] + : (static::$_dynamics_of_user_cache[$key] = $this->_realFindAllDynamicsOf($user)); + } + + + protected function _realFindAllDynamicsOf($user) { + return array_filter(Class_UserGroup::findAllDynamics(), + function($group) use($user) { return $group->hasUser($user); }); + } } diff --git a/library/Class/Users.php b/library/Class/Users.php index 705a8e3410c..8f6a8558eb0 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -827,8 +827,7 @@ class Class_Users extends Storm_Model_Abstract { public function getDynamicUserGroups() { - return array_filter(Class_UserGroup::findAllDynamics(), - function($group) { return $group->hasUser($this); }); + return Class_UserGroup::findAllDynamicsOf($this); } -- GitLab