From 9c3b83e28c8a10f9ad38d3487dae1a3bc9601635 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Tue, 30 Apr 2013 19:51:28 +0200
Subject: [PATCH] Fix retrieval of users with multiple backends

---
 settings/ajax/userlist.php |  9 +++++++--
 settings/js/users.js       | 12 +++++++++---
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/settings/ajax/userlist.php b/settings/ajax/userlist.php
index 87b4239574..4abf54b898 100644
--- a/settings/ajax/userlist.php
+++ b/settings/ajax/userlist.php
@@ -27,9 +27,14 @@ if (isset($_GET['offset'])) {
 } else {
 	$offset = 0;
 }
+if (isset($_GET['limit'])) {
+	$limit = $_GET['limit'];
+} else {
+	$limit = 10;
+}
 $users = array();
 if (OC_User::isAdminUser(OC_User::getUser())) {
-	$batch = OC_User::getDisplayNames('', 10, $offset);
+	$batch = OC_User::getDisplayNames('', $limit, $offset);
 	foreach ($batch as $user => $displayname) {
 		$users[] = array(
 			'name' => $user,
@@ -40,7 +45,7 @@ if (OC_User::isAdminUser(OC_User::getUser())) {
 	}
 } else {
 	$groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
-	$batch = OC_Group::usersInGroups($groups, '', 10, $offset);
+	$batch = OC_Group::usersInGroups($groups, '', $limit, $offset);
 	foreach ($batch as $user) {
 		$users[] = array(
 			'name' => $user,
diff --git a/settings/js/users.js b/settings/js/users.js
index 4a358a4392..690c9ad046 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -19,6 +19,10 @@ function setQuota (uid, quota, ready) {
 var UserList = {
 	useUndo: true,
 	availableGroups: [],
+	offset: 30, //The first 30 users are there. No prob, if less in total.
+				//hardcoded in settings/users.php
+
+	usersToLoad: 10, //So many users will be loaded when user scrolls down
 
 	/**
 	 * @brief Initiate user deletion process in UI
@@ -192,14 +196,17 @@ var UserList = {
 			return;
 		}
 		UserList.updating = true;
-		$.get(OC.Router.generate('settings_ajax_userlist', { offset: UserList.offset }), function (result) {
+		$.get(OC.Router.generate('settings_ajax_userlist', { offset: UserList.offset, limit: UserList.usersToLoad }), function (result) {
 			if (result.status === 'success') {
+				//The offset does not mirror the amount of users available,
+				//because it is backend-dependent. For correct retrieval,
+				//always the limit(requested amount of users) needs to be added.
+				UserList.offset += UserList.usersToLoad;
 				$.each(result.data, function (index, user) {
 					if($('tr[data-uid="' + user.name + '"]').length > 0) {
 						return true;
 					}
 					var tr = UserList.add(user.name, user.displayname, user.groups, user.subadmin, user.quota, false);
-					UserList.offset++;
 					if (index == 9) {
 						$(tr).bind('inview', function (event, isInView, visiblePartX, visiblePartY) {
 							$(this).unbind(event);
@@ -315,7 +322,6 @@ $(document).ready(function () {
 
 	UserList.doSort();
 	UserList.availableGroups = $('#content table').attr('data-groups').split(', ');
-	UserList.offset = $('tbody tr').length;
 	$('tbody tr:last').bind('inview', function (event, isInView, visiblePartX, visiblePartY) {
 		OC.Router.registerLoadedCallback(function () {
 			UserList.update();
-- 
GitLab