From a1c88a3e39695a463ff7d0dda74dbdbb59d86f5c Mon Sep 17 00:00:00 2001
From: Michael Gapczynski <mtgap@owncloud.com>
Date: Sat, 11 Aug 2012 16:21:09 -0400
Subject: [PATCH] Add search, limit, offset parameters to usersInGroups()

---
 lib/group.php           | 11 ++++++-----
 lib/group/backend.php   |  2 +-
 lib/group/database.php  | 16 ++++++++++------
 lib/group/dummy.php     |  2 +-
 lib/group/example.php   |  2 +-
 lib/group/interface.php |  2 +-
 6 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/lib/group.php b/lib/group.php
index e47b770f59..72cf5dc89a 100644
--- a/lib/group.php
+++ b/lib/group.php
@@ -264,10 +264,10 @@ class OC_Group {
 	 * @brief get a list of all users in a group
 	 * @returns array with user ids
 	 */
-	public static function usersInGroup($gid){
+	public static function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
 		$users=array();
 		foreach(self::$_usedBackends as $backend){
-			$users=array_merge($backend->usersInGroup($gid),$users);
+			$users = array_merge($backend->usersInGroup($gid, $search, $limit, $offset), $users);
 		}
 		return $users;
 	}
@@ -277,10 +277,11 @@ class OC_Group {
 	 * @param array $gids
 	 * @returns array with user ids
 	 */
-	public static function usersInGroups($gids){
+	public static function usersInGroups($gids, $search = '', $limit = -1, $offset = 0) {
 		$users = array();
-		foreach($gids as $gid){
-			$users = array_merge(array_diff(self::usersInGroup($gid), $users), $users);
+		foreach ($gids as $gid) {
+			// TODO Need to apply limits to groups as total
+			$users = array_merge(array_diff(self::usersInGroup($gid, $search, $limit, $offset), $users), $users);
 		}
 		return $users;
 	}
diff --git a/lib/group/backend.php b/lib/group/backend.php
index 7a7cebc726..4c7d09bcb1 100644
--- a/lib/group/backend.php
+++ b/lib/group/backend.php
@@ -122,7 +122,7 @@ abstract class OC_Group_Backend implements OC_Group_Interface {
 	 * @brief get a list of all users in a group
 	 * @returns array with user ids
 	 */
-	public function usersInGroup($gid){
+	public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
 		return array();
 	}
 
diff --git a/lib/group/database.php b/lib/group/database.php
index 669edc662c..1cb4171f49 100644
--- a/lib/group/database.php
+++ b/lib/group/database.php
@@ -182,12 +182,16 @@ class OC_Group_Database extends OC_Group_Backend {
 	 * @brief get a list of all users in a group
 	 * @returns array with user ids
 	 */
-	public function usersInGroup($gid){
-		$query=OC_DB::prepare('SELECT uid FROM *PREFIX*group_user WHERE gid=?');
-		$users=array();
-		$result=$query->execute(array($gid));
-		while($row=$result->fetchRow()){
-			$users[]=$row['uid'];
+	public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+		if ($limit == -1) {
+			$query = OC_DB::prepare('SELECT uid FROM *PREFIX*group_user WHERE gid = ? AND uid LIKE ?');
+		} else {
+			$query = OC_DB::prepare('SELECT uid FROM *PREFIX*group_user WHERE gid = ? AND uid LIKE ? LIMIT '.$limit.' OFFSET '.$offset);
+		}
+		$result = $query->execute(array($gid, $search.'%'));
+		$users = array();
+		while ($row = $result->fetchRow()) {
+			$users[] = $row['uid'];
 		}
 		return $users;
 	}
diff --git a/lib/group/dummy.php b/lib/group/dummy.php
index 092aa9beda..51eca28f3f 100644
--- a/lib/group/dummy.php
+++ b/lib/group/dummy.php
@@ -149,7 +149,7 @@ class OC_Group_Dummy extends OC_Group_Backend {
 	 * @brief get a list of all users in a group
 	 * @returns array with user ids
 	 */
-	public function usersInGroup($gid){
+	public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
 		if(isset($this->groups[$gid])){
 			return $this->groups[$gid];
 		}else{
diff --git a/lib/group/example.php b/lib/group/example.php
index c33b435ca0..76d1262976 100644
--- a/lib/group/example.php
+++ b/lib/group/example.php
@@ -104,6 +104,6 @@ abstract class OC_Group_Example {
 	 * @brief get a list of all users in a group
 	 * @returns array with user ids
 	 */
-	abstract public static function usersInGroup($gid);
+	abstract public static function usersInGroup($gid, $search = '', $limit = -1, $offset = 0);
 
 }
diff --git a/lib/group/interface.php b/lib/group/interface.php
index f496d502df..12cc07a537 100644
--- a/lib/group/interface.php
+++ b/lib/group/interface.php
@@ -71,6 +71,6 @@ interface OC_Group_Interface {
 	 * @brief get a list of all users in a group
 	 * @returns array with user ids
 	 */
-	public function usersInGroup($gid);
+	public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0);
 
 }
\ No newline at end of file
-- 
GitLab