From 174ab07a4beed45b2d3a477723f6b47a37ecc7ce Mon Sep 17 00:00:00 2001 From: macjohnny Date: Thu, 19 Jun 2014 11:37:46 +0200 Subject: [PATCH] backport of #9104 Update manager.php add caching to getUserGroupIds Update manager.php added description and blank lines in getUserGroupIds Update manager.php defined $uid in getUserGroupIds Update manager.php Update manager.php Update manager.php clean up function getUserGroupIds clean up of function getUserGroupIds and improved caching mechanism of cachedUserGroupIds modified caching mechanism in getUserGroupIds removed cachedUserGroupIds, instead changed indexing in getUserGroups to groupId adapted tests for a groupId indexed group array --- lib/private/group/manager.php | 17 ++++++++++++----- tests/lib/group/manager.php | 20 ++++++++++---------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/lib/private/group/manager.php b/lib/private/group/manager.php index 58a239248727..816e7b427f5b 100644 --- a/lib/private/group/manager.php +++ b/lib/private/group/manager.php @@ -48,6 +48,7 @@ class Manager extends PublicEmitter implements IGroupManager { */ private $cachedUserGroups = array(); + /** * @param \OC\User\Manager $userManager */ @@ -180,18 +181,24 @@ public function getUserGroups($user) { $groups[$groupId] = $this->get($groupId); } } - $this->cachedUserGroups[$uid] = array_values($groups); + $this->cachedUserGroups[$uid] = $groups; return $this->cachedUserGroups[$uid]; } + /** + * get a list of group ids for a user * @param \OC\User\User $user - * @return array with group names + * @return array with group ids */ public function getUserGroupIds($user) { $groupIds = array(); - foreach ($this->backends as $backend) { - $groupIds = array_merge($groupIds, $backend->getUserGroups($user->getUID())); - + $userId = $user->getUID(); + if (isset($this->cachedUserGroups[$userId])) { + return array_keys($this->cachedUserGroups[$userId]); + } else { + foreach ($this->backends as $backend) { + $groupIds = array_merge($groupIds, $backend->getUserGroups($userId)); + } } return $groupIds; } diff --git a/tests/lib/group/manager.php b/tests/lib/group/manager.php index 70d9783946ae..e4b3a5227678 100644 --- a/tests/lib/group/manager.php +++ b/tests/lib/group/manager.php @@ -190,7 +190,7 @@ public function testSearch() { $groups = $manager->search('1'); $this->assertEquals(1, count($groups)); - $group1 = $groups[0]; + $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); } @@ -229,8 +229,8 @@ public function testSearchMultipleBackends() { $groups = $manager->search('1'); $this->assertEquals(2, count($groups)); - $group1 = $groups[0]; - $group12 = $groups[1]; + $group1 = reset($groups); + $group12 = next($groups); $this->assertEquals('group1', $group1->getGID()); $this->assertEquals('group12', $group12->getGID()); } @@ -270,8 +270,8 @@ public function testSearchMultipleBackendsLimitAndOffset() { $groups = $manager->search('1', 2, 1); $this->assertEquals(2, count($groups)); - $group1 = $groups[0]; - $group12 = $groups[1]; + $group1 = reset($groups); + $group12 = next($groups); $this->assertEquals('group1', $group1->getGID()); $this->assertEquals('group12', $group12->getGID()); } @@ -300,7 +300,7 @@ public function testGetUserGroups() { $groups = $manager->getUserGroups(new User('user1', $userBackend)); $this->assertEquals(1, count($groups)); - $group1 = $groups[0]; + $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); } @@ -340,8 +340,8 @@ public function testGetUserGroupsMultipleBackends() { $groups = $manager->getUserGroups(new User('user1', $userBackend)); $this->assertEquals(2, count($groups)); - $group1 = $groups[0]; - $group2 = $groups[1]; + $group1 = reset($groups); + $group2 = next($groups); $this->assertEquals('group1', $group1->getGID()); $this->assertEquals('group2', $group2->getGID()); } @@ -727,7 +727,7 @@ public function testGetUserGroupsWithAddUser() { // check result $groups = $manager->getUserGroups($user1); $this->assertEquals(1, count($groups)); - $group1 = $groups[0]; + $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); } @@ -768,7 +768,7 @@ public function testGetUserGroupsWithRemoveUser() { $user1 = new User('user1', null); $groups = $manager->getUserGroups($user1); $this->assertEquals(1, count($groups)); - $group1 = $groups[0]; + $group1 = reset($groups); $this->assertEquals('group1', $group1->getGID()); // remove user