/* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ flowableApp.controller('GroupMgmtController', ['$rootScope', '$scope', '$translate', '$http', '$timeout','$location', '$modal', '$popover', 'IdmService', function ($rootScope, $scope, $translate, $http, $timeout, $location, $modal, $popover, IdmService) { var validUser = true; $rootScope.setMainPageById('groupMgmt'); $scope.model = { loading: true, expanded: {} }; $scope.showCreateGroupPopup = function() { $scope.model.editedGroup = {}; $scope.model.mode = 'create'; _internalCreateModal({ scope: $scope, template: 'views/popup/idm-group-create.html', show: true }, $modal, $scope); }; var fetchUserPage = function() { $scope.model.loadingUsers = true; IdmService.getUsersForGroup($scope.model.selectedGroup.id, $scope.model.userFilter ,$scope.model.userPage, $scope.model.pageSize).then(function(data) { $scope.model.users = data; $scope.model.moreUsers = $scope.model.selectedGroup.userCount > (($scope.model.userPage+1 ) * $scope.model.pageSize); $scope.model.loadingUsers = false; }); }; $scope.selectGroup = function(groupId) { $scope.model.loadingGroup = true; IdmService.getGroup(groupId).then(function (data) { $scope.model.selectedGroup = data; $scope.model.userPage = 0; $scope.model.pageSize = 50; fetchUserPage(); $scope.model.loadingGroup = false; }); }; $scope.showPreviousUsers = function() { $scope.model.userPage--; fetchUserPage(); }; $scope.showNextUsers = function() { $scope.model.userPage++; fetchUserPage(); }; $scope.refreshDelayed = function() { // If already waiting, another wait-cycle will be done // after the current wait is over if($scope.model.waiting) { $scope.model.delayed = true; } else { $scope.scheduleDelayedRefresh(); } }; $scope.scheduleDelayedRefresh = function() { $scope.model.waiting = true; $timeout(function() { $scope.model.waiting = false; if( $scope.model.delayed) { $scope.model.delayed = false; // Delay again $scope.scheduleDelayedRefresh(); } else { $scope.model.userPage = 0; fetchUserPage(); } }, 100); }; $scope.createGroup = function() { $scope.model.loading = true; IdmService.createGroup($scope.model.editedGroup).then(function (data) { $scope.fetchGroups(data.id); $scope.model.loading = false; }); }; $scope.updateGroup = function() { $scope.model.loadingGroup = true; IdmService.updateGroup($scope.model.editedGroup.id, $scope.model.editedGroup).then(function (data) { $scope.model.selectedGroup = data; // Find the entry in the list on the left, and update its name for (var i=0; i<$scope.model.groups.length; i++){ if ($scope.model.groups[i].id === data.id) { $scope.model.groups[i].name = data.name; } } $scope.model.loadingGroup = false; }); }; $scope.showDeleteGroupModal = function() { _internalCreateModal({ scope: $scope, template: 'views/popup/idm-delete-group.html', show: true }, $modal, $scope); }; $scope.deleteGroup = function() { $scope.model.loading = true; IdmService.deleteGroup($scope.model.selectedGroup.id).then(function() { $scope.model.loading = false; clearSelection(); $scope.fetchGroups(); }); }; $scope.showActivateGroupModal = function() { _internalCreateModal({ scope: $scope, template: 'views/popup/idm-activate-group.html', show: true }, $modal, $scope); }; $scope.activateGroup = function() { $scope.model.loading = true; IdmService.activateGroup($scope.model.selectedGroup.id).then(function() { $scope.model.loading = false; clearSelection(); $scope.fetchGroups(); }); }; // Clear any selected tenant var clearSelection = function() { delete $scope.model.groups; delete $scope.model.selectedGroup; }; $scope.showEditGroupModal = function() { $scope.model.editedGroup = $scope.model.selectedGroup; $scope.model.mode = 'edit'; _internalCreateModal({ scope: $scope, template: 'views/popup/idm-group-create.html', show: true }, $modal, $scope); }; $scope.showRemoveMemberModal = function(user) { $scope.model.userToRemove = user; _internalCreateModal({ scope: $scope, template: 'views/popup/idm-group-member-delete.html', show: true }, $modal, $scope); }; $scope.deleteGroupMember = function() { IdmService.deleteGroupMember($scope.model.selectedGroup.id, $scope.model.userToRemove.id).then(function(data) { for (var i=0; i<$scope.model.users.data.length; i++) { if ($scope.model.users.data[i].id === $scope.model.userToRemove.id) { $scope.model.users.data.splice(i, 1); delete $scope.model.userToRemove; break; } } fetchUserPage(); }); }; $scope.addGroupMember = function(user) { IdmService.addGroupMember($scope.model.selectedGroup.id, user.id).then(function() { $scope.selectGroup($scope.model.selectedGroup.id, true); }); }; // Load the groups $scope.fetchGroups = function(groupIdToSelect) { $scope.model.loading = true; clearSelection(); IdmService.getFunctionalGroups().then(function(data) { $scope.model.groups = data; var groupIndex; $scope.model.expanded = {}; // Select a group if (groupIdToSelect) { $scope.selectGroup(groupIdToSelect); } // By default, open first level of groups for (groupIndex = 0; groupIndex < data.length; groupIndex++) { $scope.model.expanded[data[groupIndex].id] = true; } $scope.model.loading = false; }); }; if(validUser) { $scope.fetchGroups(); } }]);