diff --git a/webadmin/src/views/users.html b/webadmin/src/views/users.html
index f200e4aee..d927d02ce 100644
--- a/webadmin/src/views/users.html
+++ b/webadmin/src/views/users.html
@@ -188,6 +188,37 @@
+
+
+
@@ -272,8 +303,8 @@
|
- User |
- Groups |
+ User |
+ Groups |
Actions |
@@ -330,16 +361,17 @@
- | Name |
+ Name |
Actions |
- |
+ |
{{ group.name }}
|
+
|
diff --git a/webadmin/src/views/users.js b/webadmin/src/views/users.js
index 3a0ff09a3..4d0e5b2a5 100644
--- a/webadmin/src/views/users.js
+++ b/webadmin/src/views/users.js
@@ -363,6 +363,85 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
setupLink: ''
};
+ $scope.groupEdit = {
+ busy: false,
+ busyFetching: false,
+ error: {},
+ group: null,
+ lists: [],
+ availableLists: [],
+
+ show: function (group) {
+ $scope.groupEdit.busy = false;
+ $scope.groupEdit.busyFetching = true;
+ $scope.groupEdit.error = {};
+ $scope.groupEdit.availableLists = $scope.emailDomains.map(function (domain) { return { domain: domain, address: group.name + '@' + domain.domain }; });
+ $scope.groupEdit.selectedLists = [];
+ $scope.groupEdit.currentLists = [];
+
+ $scope.groupEdit.group = angular.copy(group);
+
+ var tmp = [];
+ asyncForEach($scope.emailDomains, function (domain, callback) {
+ Client.getMailingList(domain.domain, $scope.groupEdit.group.id, function (error) {
+ if (error) return callback(error);
+
+ var list = $scope.groupEdit.availableLists.find(function (list) { return list.domain.domain === domain.domain; });
+ tmp.push(list);
+ $scope.groupEdit.currentLists.push(list);
+
+ callback();
+ });
+ }, function (error) {
+ $scope.groupEdit.busyFetching = false;
+
+ if (error) return console.error('Unable to get mailing lists.', error);
+
+ $scope.groupEdit.selectedLists = tmp;
+ });
+
+ $scope.groupEditForm.$setUntouched();
+ $scope.groupEditForm.$setPristine();
+
+ $('#groupEditModal').modal('show');
+ },
+
+ submit: function () {
+ $scope.groupEdit.busy = true;
+
+ var addedLists = $scope.groupEdit.selectedLists.filter(function (s) {
+ return !$scope.groupEdit.currentLists.find(function (c) {
+ return c.domain.domain === s.domain.domain;
+ });
+ });
+ var removedLists = $scope.groupEdit.currentLists.filter(function (c) {
+ return !$scope.groupEdit.selectedLists.find(function (s) {
+ return s.domain.domain === c.domain.domain;
+ });
+ });
+
+ asyncForEach(addedLists, function (list, callback) {
+ Client.addMailingList(list.domain.domain, $scope.groupEdit.group.id, callback);
+ }, function (error) {
+ if (error) {
+ $scope.groupEdit.busy = false;
+ return console.error('Failed to add group to mailinglists.', error);
+ }
+
+ asyncForEach(removedLists, function (list, callback) {
+ Client.removeMailingList(list.domain.domain, $scope.groupEdit.group.id, callback);
+ }, function (error) {
+ $scope.groupEdit.busy = false;
+ if (error) {
+ return console.error('Failed to remove group to mailinglists.', error);
+ }
+
+ $('#groupEditModal').modal('hide');
+ });
+ });
+ }
+ };
+
$scope.groupRemove = {
busy: false,
error: {},