]> source.dussan.org Git - nextcloud-server.git/commitdiff
Merge branch 'master' into optimize-startup-queries
authorBart Visscher <bartv@thisnet.nl>
Wed, 7 May 2014 15:54:38 +0000 (17:54 +0200)
committerBart Visscher <bartv@thisnet.nl>
Wed, 7 May 2014 15:54:38 +0000 (17:54 +0200)
Conflicts:
apps/files_sharing/lib/sharedstorage.php
tests/lib/group/manager.php

removed hasFilesSharedWith from lib/public/share.php and
sharedstorage.php to fix merge

1  2 
lib/private/group/manager.php
tests/lib/group/manager.php

index 151b185dbf77e12d0adfdebb35321965d3286cfe,d31225e3c2e71c4ff26cdb67b04cdf50929759c0..40c6074b2acce679b49c8f00ead5f35a331fd9bf
@@@ -153,14 -134,8 +153,8 @@@ class Manager extends PublicEmitter 
                $groups = array();
                foreach ($this->backends as $backend) {
                        $groupIds = $backend->getGroups($search, $limit, $offset);
-                       if (!is_null($limit)) {
-                               $limit -= count($groupIds);
-                       }
-                       if (!is_null($offset)) {
-                               $offset -= count($groupIds);
-                       }
                        foreach ($groupIds as $groupId) {
 -                              $groups[$groupId] = $this->getGroupObject($groupId);
 +                              $groups[$groupId] = $this->get($groupId);
                        }
                        if (!is_null($limit) and $limit <= 0) {
                                return array_values($groups);
         * @return \OC\Group\Group[]
         */
        public function getUserGroups($user) {
 +              $uid = $user->getUID();
 +              if (isset($this->cachedUserGroups[$uid])) {
 +                      return $this->cachedUserGroups[$uid];
 +              }
                $groups = array();
                foreach ($this->backends as $backend) {
 -                      $groupIds = $backend->getUserGroups($user->getUID());
 +                      $groupIds = $backend->getUserGroups($uid);
                        foreach ($groupIds as $groupId) {
 -                              $groups[$groupId] = $this->getGroupObject($groupId);
 +                              $groups[$groupId] = $this->get($groupId);
                        }
                }
 -              return array_values($groups);
 +              $this->cachedUserGroups[$uid] = array_values($groups);
 +              return $this->cachedUserGroups[$uid];
        }
+       /**
+        * @brief get a list of all display names in a group
+        * @param string $gid
+        * @param string $search
+        * @param int $limit
+        * @param int $offset
+        * @return array with display names (value) and user ids (key)
+        */
+       public function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+               $group = $this->get($gid);
+               if(is_null($group)) {
+                       return array();
+               }
+               // only user backends have the capability to do a complex search for users
+               $groupUsers  = $group->searchUsers('', $limit, $offset);
+               $search = trim($search);
+               if(!empty($search)) {
+                       //TODO: for OC 7 earliest: user backend should get a method to check selected users against a pattern
+                       $filteredUsers = $this->userManager->search($search);
+                       $testUsers = true;
+               } else {
+                       $filteredUsers = array();
+                       $testUsers = false;
+               }
+               $matchingUsers = array();
+               foreach($groupUsers as $user) {
+                       if(!$testUsers || isset($filteredUsers[$user->getUID()])) {
+                               $matchingUsers[$user->getUID()] = $user->getDisplayName();
+                       }
+               }
+               return $matchingUsers;
+       }
  }
index c39a7d6f33a967f1802584af916e623f230b09f3,9d1f175c1090e0c9261e8193d117f34e892e8488..bab9621e39d59aebd49c58d1d1755b12556963b0
@@@ -344,97 -344,53 +344,147 @@@ class Manager extends \PHPUnit_Framewor
                $this->assertEquals('group2', $group2->getGID());
        }
  
+       public function testDisplayNamesInGroupMultipleUserBackends() {
+               $user1 = new User('user1', null);
+               $user2 = new User('user2', null);
+               $user3 = new User('user3', null);
+               $user4 = new User('user33', null);
+               /**
+                * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
+                */
+               $backend = $this->getMock('\OC_Group_Database');
+               $backend->expects($this->exactly(1))
+                       ->method('groupExists')
+                       ->with('testgroup')
+                       ->will($this->returnValue(true));
+               $backend->expects($this->once())
+                       ->method('usersInGroup')
+                       ->with('testgroup', '', -1, 0)
+                       ->will($this->returnValue(array('user2', 'user33')));
+               /**
+                * @var \OC\User\Manager $userManager
+                */
+               $userManager = $this->getMock('\OC\User\Manager');
+               $userManager->expects($this->once())
+                       ->method('search')
+                       ->with('user3')
+                       ->will($this->returnValue(array('user3' => $user3, 'user33' => $user4)));
+               $userManager->expects($this->any())
+                       ->method('get')
+                       ->will($this->returnCallback(function($uid) {
+                               switch($uid) {
+                                       case 'user1' : return new User('user1', null);
+                                       case 'user2' : return new User('user2', null);
+                                       case 'user3' : return new User('user3', null);
+                                       case 'user33': return new User('user33', null);
+                                       default:
+                                               return null;
+                               }
+                       }));
+               $manager = new \OC\Group\Manager($userManager);
+               $manager->addBackend($backend);
+               $users = $manager->displayNamesInGroup('testgroup', 'user3');
+               $this->assertEquals(1, count($users));
+               $this->assertTrue(isset($users['user33']));
+       }
++
 +      public function testGetUserGroupsWithAddUser() {
 +              /**
 +               * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
 +               */
 +              $backend = $this->getMock('\OC_Group_Database');
 +              $expectedGroups = array();
 +              $backend->expects($this->any())
 +                      ->method('getUserGroups')
 +                      ->with('user1')
 +                      ->will($this->returnCallback(function () use (&$expectedGroups) {
 +                              return $expectedGroups;
 +                      }));
 +              $backend->expects($this->any())
 +                      ->method('groupExists')
 +                      ->with('group1')
 +                      ->will($this->returnValue(true));
 +              $backend->expects($this->once())
 +                      ->method('implementsActions')
 +                      ->will($this->returnValue(true));
 +
 +              /**
 +               * @var \OC\User\Manager $userManager
 +               */
 +              $userManager = $this->getMock('\OC\User\Manager');
 +              $manager = new \OC\Group\Manager($userManager);
 +              $manager->addBackend($backend);
 +
 +              // prime cache
 +              $user1 = new User('user1', null);
 +              $groups = $manager->getUserGroups($user1);
 +              $this->assertEquals(array(), $groups);
 +
 +              // add user
 +              $group = $manager->get('group1');
 +              $group->addUser($user1);
 +              $expectedGroups = array('group1');
 +
 +              // check result
 +              $groups = $manager->getUserGroups($user1);
 +              $this->assertEquals(1, count($groups));
 +              $group1 = $groups[0];
 +              $this->assertEquals('group1', $group1->getGID());
 +      }
 +
 +      public function testGetUserGroupsWithRemoveUser() {
 +              /**
 +               * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
 +               */
 +              $backend = $this->getMock('\OC_Group_Database');
 +              $expectedGroups = array('group1');
 +              $backend->expects($this->any())
 +                      ->method('getUserGroups')
 +                      ->with('user1')
 +                      ->will($this->returnCallback(function () use (&$expectedGroups) {
 +                              return $expectedGroups;
 +                      }));
 +              $backend->expects($this->any())
 +                      ->method('groupExists')
 +                      ->with('group1')
 +                      ->will($this->returnValue(true));
 +              $backend->expects($this->once())
 +                      ->method('implementsActions')
 +                      ->will($this->returnValue(true));
 +              $backend->expects($this->once())
 +                      ->method('inGroup')
 +                      ->will($this->returnValue(true));
 +              $backend->expects($this->once())
 +                      ->method('removeFromGroup')
 +                      ->will($this->returnValue(true));
 +
 +              /**
 +               * @var \OC\User\Manager $userManager
 +               */
 +              $userManager = $this->getMock('\OC\User\Manager');
 +              $manager = new \OC\Group\Manager($userManager);
 +              $manager->addBackend($backend);
 +
 +              // prime cache
 +              $user1 = new User('user1', null);
 +              $groups = $manager->getUserGroups($user1);
 +              $this->assertEquals(1, count($groups));
 +              $group1 = $groups[0];
 +              $this->assertEquals('group1', $group1->getGID());
 +
 +              // remove user
 +              $group = $manager->get('group1');
 +              $group->removeUser($user1);
 +              $expectedGroups = array();
 +
 +              // check result
 +              $groups = $manager->getUserGroups($user1);
 +              $this->assertEquals(array(), $groups);
 +      }
  }