From b126374780c7364da13b89f000e09467732a3cec Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 11 Dec 2013 15:47:36 +0100 Subject: [PATCH 1/3] cache the result from inGroup --- lib/private/group/group.php | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/lib/private/group/group.php b/lib/private/group/group.php index bcd2419b309..694827d100e 100644 --- a/lib/private/group/group.php +++ b/lib/private/group/group.php @@ -18,7 +18,12 @@ class Group { /** * @var \OC\User\User[] $users */ - private $users; + private $users = array(); + + /** + * @var bool $usersLoaded + */ + private $usersLoaded; /** * @var \OC_Group_Backend[] | \OC_Group_Database[] $backend @@ -26,7 +31,7 @@ class Group { private $backends; /** - * @var \OC\Hooks\PublicEmitter $emitter; + * @var \OC\Hooks\PublicEmitter $emitter ; */ private $emitter; @@ -58,7 +63,7 @@ class Group { * @return \OC\User\User[] */ public function getUsers() { - if ($this->users) { + if ($this->usersLoaded) { return $this->users; } @@ -74,6 +79,7 @@ class Group { } $this->users = $this->getVerifiedUsers($userIds); + $this->usersLoaded = true; return $this->users; } @@ -84,8 +90,14 @@ class Group { * @return bool */ public function inGroup($user) { + foreach ($this->users as $cachedUser) { + if ($user->getUID() === $cachedUser->getUID()) { + return true; + } + } foreach ($this->backends as $backend) { if ($backend->inGroup($user->getUID(), $this->gid)) { + $this->users[] = $user; return true; } } @@ -185,6 +197,7 @@ class Group { * @return \OC\User\User[] */ public function searchDisplayName($search, $limit = null, $offset = null) { + $users = array(); foreach ($this->backends as $backend) { if ($backend->implementsActions(OC_GROUP_BACKEND_GET_DISPLAYNAME)) { $userIds = array_keys($backend->displayNamesInGroup($this->gid, $search, $limit, $offset)); @@ -229,17 +242,17 @@ class Group { /** * @brief returns all the Users from an array that really exists - * @param $userIds an array containing user IDs - * @return an Array with the userId as Key and \OC\User\User as value + * @param string[] $userIds an array containing user IDs + * @return \OC\User\User[] an Array with the userId as Key and \OC\User\User as value */ private function getVerifiedUsers($userIds) { - if(!is_array($userIds)) { + if (!is_array($userIds)) { return array(); } $users = array(); foreach ($userIds as $userId) { $user = $this->userManager->get($userId); - if(!is_null($user)) { + if (!is_null($user)) { $users[$userId] = $user; } } From 3d299923786aa818aafeef1cb4dc3778b6fc1692 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 11 Dec 2013 16:25:41 +0100 Subject: [PATCH 2/3] user Group->users as assosiative array --- lib/private/group/group.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/private/group/group.php b/lib/private/group/group.php index 694827d100e..97f1cb8d960 100644 --- a/lib/private/group/group.php +++ b/lib/private/group/group.php @@ -90,14 +90,12 @@ class Group { * @return bool */ public function inGroup($user) { - foreach ($this->users as $cachedUser) { - if ($user->getUID() === $cachedUser->getUID()) { - return true; - } + if (isset($this->users[$user->getUID()])) { + return true; } foreach ($this->backends as $backend) { if ($backend->inGroup($user->getUID(), $this->gid)) { - $this->users[] = $user; + $this->users[$user->getUID()] = $user; return true; } } From 8a86837eac8da8beaa225e339902cab94c46e675 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 12 Dec 2013 13:59:00 +0100 Subject: [PATCH 3/3] remove unneeded ; in comment --- lib/private/group/group.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/private/group/group.php b/lib/private/group/group.php index 97f1cb8d960..8d2aa87a788 100644 --- a/lib/private/group/group.php +++ b/lib/private/group/group.php @@ -31,7 +31,7 @@ class Group { private $backends; /** - * @var \OC\Hooks\PublicEmitter $emitter ; + * @var \OC\Hooks\PublicEmitter $emitter */ private $emitter;