Remove mailbox settings from user edit dialog

This commit is contained in:
Johannes Zellner
2018-04-01 20:53:49 +02:00
parent 158271de14
commit 963b1d60b5
2 changed files with 9 additions and 130 deletions

View File

@@ -158,7 +158,6 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
$scope.useredit = {
busy: false,
busyFetching: false,
error: {},
userInfo: {},
email: '',
@@ -170,7 +169,6 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
superuser: false,
show: function (userInfo) {
$scope.useredit.busyFetching = true;
$scope.useredit.error = {};
$scope.useredit.email = userInfo.email;
$scope.useredit.fallbackEmail = userInfo.fallbackEmail;
@@ -178,52 +176,9 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
$scope.useredit.groupIds = angular.copy(userInfo.groupIds);
$scope.useredit.superuser = userInfo.groupIds.indexOf('admin') !== -1;
$scope.useredit.availableEmailDomains = userInfo.username ? $scope.emailDomains.map(function (d) { return { domain: d, address: userInfo.username + '@' + d.domain }; }) : []; // username can be null if invited user has not signed up yet
$scope.useredit.currentEmailDomains = [];
$scope.useredit.selectedEmailDomains = [];
$scope.useredit.aliases = {};
// fetch user's mailboxes and aliases
var tmp = [];
asyncForEach($scope.emailDomains, function (domain, callback) {
Client.getUserMailbox(domain.domain, userInfo.id, function (error) {
if (error) return callback();
var d = $scope.useredit.availableEmailDomains.find(function (d) { return d.domain.domain === domain.domain; });
if (!d) {
console.error('Unable to map domain, this should never happen.');
return callback();
}
$scope.useredit.currentEmailDomains.push(d);
tmp.push(d);
Client.getAliases(domain.domain, userInfo.id, function (error, result) {
if (error) return callback();
$scope.useredit.aliases[d.address] = result.join(',');
callback();
});
});
}, function (error) {
$scope.useredit.busyFetching = false;
if (error) return console.error(error);
// we need this copy as angular multiselect cannot deal with dynamic arrays!
$scope.useredit.selectedEmailDomains = tmp;
});
$scope.useredit_form.$setPristine();
$scope.useredit_form.$setUntouched();
// clear any alias error when the model changes. this is required because tagInput directive is not angular forms aware
// http://blog.revolunet.com/blog/2013/11/28/create-resusable-angularjs-input-component/ has some notes on how to do that
$scope.$watch('useredit.aliases', function () {
$scope.useredit.error.aliases = null;
});
$('#userEditModal').modal('show');
},
@@ -271,73 +226,18 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
Client.setGroups(data.id, $scope.useredit.groupIds, function (error) {
if (error) return console.error('Unable to update groups for user:', error);
var addedEmailDomains = $scope.useredit.selectedEmailDomains.filter(function (s) {
return !$scope.useredit.currentEmailDomains.find(function (c) {
return c.domain.domain === s.domain.domain;
});
});
var removedEmailDomains = $scope.useredit.currentEmailDomains.filter(function (c) {
return !$scope.useredit.selectedEmailDomains.find(function (s) {
return s.domain.domain === c.domain.domain;
});
});
$scope.useredit.busy = false;
$scope.useredit.userInfo = {};
$scope.useredit.email = '';
$scope.useredit.superuser = false;
$scope.useredit.groupIds = [];
asyncForEach(removedEmailDomains, function (emailDomain, callback) {
// cleanup aliases first
Client.setAliases(emailDomain.domain.domain, userId, [], function (error) {
if (error) return callback(error);
$scope.useredit_form.$setPristine();
$scope.useredit_form.$setUntouched();
Client.disableUserMailbox(emailDomain.domain.domain, userId, callback);
});
}, function (error) {
if (error) {
$scope.useredit.busy = false;
return console.error('Unable to remove mailboxes and aliases.', error);
}
refresh();
// enable email on domains
asyncForEach(addedEmailDomains, function (emailDomain, callback) {
Client.enableUserMailbox(emailDomain.domain.domain, userId, function (error) {
if (error) return callback(error);
var aliases = $scope.useredit.aliases[emailDomain.address] ? $scope.useredit.aliases[emailDomain.address].split(',') : [];
Client.setAliases(emailDomain.domain.domain, userId, aliases, callback);
});
}, function (error) {
if (error) {
$scope.useredit.busy = false;
return console.error('Unable to remove mailboxes and aliases.', error);
}
// sync the aliases for enabled domains
asyncForEach($scope.useredit.selectedEmailDomains, function (emailDomain, callback) {
var aliases = ($scope.useredit.aliases[emailDomain.address] ? $scope.useredit.aliases[emailDomain.address].split(',') : []).filter(function (a) { return !!a; });
Client.setAliases(emailDomain.domain.domain, userId, aliases, callback);
}, function (error) {
$scope.useredit.busy = false;
if (error && error.statusCode === 400) return $scope.useredit.error.aliases = error.message;
else if (error) return console.error('Unable to adjust email addresses.', error);
$scope.useredit.userInfo = {};
$scope.useredit.email = '';
$scope.useredit.superuser = false;
$scope.useredit.groupIds = [];
$scope.useredit.availableEmailDomains = [];
$scope.useredit.currentEmailDomains = [];
$scope.useredit.selectedEmailDomains = [];
$scope.useredit.aliases = '';
$scope.useredit_form.$setPristine();
$scope.useredit_form.$setUntouched();
refresh();
$('#userEditModal').modal('hide');
});
});
});
$('#userEditModal').modal('hide');
});
});
}