diff --git a/connections/mongo/src/main/java/org/keycloak/connections/mongo/api/MongoStore.java b/connections/mongo/src/main/java/org/keycloak/connections/mongo/api/MongoStore.java index 87d3669aa8..36f448cdff 100755 --- a/connections/mongo/src/main/java/org/keycloak/connections/mongo/api/MongoStore.java +++ b/connections/mongo/src/main/java/org/keycloak/connections/mongo/api/MongoStore.java @@ -31,7 +31,7 @@ public interface MongoStore { List loadEntities(Class type, DBObject query, MongoStoreInvocationContext context); - List loadEntities(Class type, DBObject query, DBObject sort, MongoStoreInvocationContext context, int firstResult, int maxResults); + List loadEntities(Class type, DBObject query, DBObject sort, int firstResult, int maxResults, MongoStoreInvocationContext context); int countEntities(Class type, DBObject query, MongoStoreInvocationContext context); diff --git a/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/MongoStoreImpl.java b/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/MongoStoreImpl.java index 889194da37..af4212b46f 100755 --- a/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/MongoStoreImpl.java +++ b/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/MongoStoreImpl.java @@ -281,14 +281,18 @@ public class MongoStoreImpl implements MongoStore { } @Override - public List loadEntities(Class type, DBObject query, DBObject sort, MongoStoreInvocationContext context, int firstResult, int maxResults) { + public List loadEntities(Class type, DBObject query, DBObject sort, int firstResult, int maxResults, MongoStoreInvocationContext context) { // First we should execute all pending tasks before searching DB context.beforeDBSearch(type); DBCollection dbCollection = getDBCollectionForType(type); DBCursor cursor = dbCollection.find(query); - cursor.skip(firstResult); - cursor.limit(maxResults); + if (firstResult != -1) { + cursor.skip(firstResult); + } + if (maxResults != -1) { + cursor.limit(maxResults); + } if (sort != null) { cursor.sort(sort); } diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js index e38b4e1802..571bbfcbb8 100755 --- a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js +++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js @@ -134,18 +134,42 @@ module.controller('UserSocialCtrl', function($scope, realm, user, socialLinks) { module.controller('UserListCtrl', function($scope, realm, User) { $scope.realm = realm; + $scope.page = 0; + + $scope.query = { + realm: realm.realm, + max : 5, + first : 0 + } + + $scope.firstPage = function() { + $scope.query.first = 0; + if ($scope.query.first < 0) { + $scope.query.first = 0; + } + $scope.searchQuery(); + } + + $scope.previousPage = function() { + $scope.query.first -= parseInt($scope.query.max); + if ($scope.query.first < 0) { + $scope.query.first = 0; + } + $scope.searchQuery(); + } + + $scope.nextPage = function() { + $scope.query.first += parseInt($scope.query.max); + $scope.searchQuery(); + } + $scope.searchQuery = function() { $scope.searchLoaded = false; $scope.currentSearch = $scope.search; - var params = { realm: realm.realm }; - if ($scope.search) { - params.search = $scope.search; - } - - $scope.users = User.query(params, function() { + $scope.users = User.query($scope.query, function() { $scope.searchLoaded = true; - $scope.lastSearch = params.search; + $scope.lastSearch = $scope.query.search; }); }; }); diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html index dc54a55e57..d6dcd49c69 100755 --- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html +++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html @@ -15,7 +15,7 @@
-