diff --git a/webadmin/src/views/users.html b/webadmin/src/views/users.html index 911d93842..897581b66 100644 --- a/webadmin/src/views/users.html +++ b/webadmin/src/views/users.html @@ -131,10 +131,10 @@ {{ useredit.error.aliases }} -
- +
+
- @{{ config.fqdn }} + @{{ address.split('@')[1] }}
diff --git a/webadmin/src/views/users.js b/webadmin/src/views/users.js index 94a2e3267..0119189cb 100644 --- a/webadmin/src/views/users.js +++ b/webadmin/src/views/users.js @@ -166,7 +166,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio userInfo: {}, email: '', fallbackEmail: '', - aliases: '', + aliases: {}, emailAddresses: [], availableEmailAddresses: [], superuser: false, @@ -181,21 +181,24 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio $scope.useredit.availableEmailAddresses = $scope.emailDomains.map(function (d) { return userInfo.username + '@' + d.domain; }); $scope.useredit.emailAddresses = []; - $scope.useredit.aliases = ''; - - Client.getAliases(userInfo.id, function (error, aliases) { - if (error) console.error(error); - $scope.useredit.aliases = aliases.join(','); - }); + $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(); - tmp.push(userInfo.username + '@' + domain.domain); + var emailAddress = userInfo.username + '@' + domain.domain; + tmp.push(emailAddress); - callback(); + Client.getAliases(domain.domain, userInfo.id, function (error, result) { + if (error) return callback(); + + $scope.useredit.aliases[emailAddress] = result.join(','); + + callback(); + }); }); }, function () { // we need this copy as angular multiselect cannot deal with dynamic arrays! @@ -257,34 +260,22 @@ 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 aliases = $scope.useredit.aliases ? $scope.useredit.aliases.split(',') : [ ]; - // var setAliasesFunc = Client.setAliases.bind(null, $scope.useredit.userInfo.id, aliases); - - // // cannot set aliases without username - // if (!$scope.useredit.userInfo.username) setAliasesFunc = function (next) { return next(); }; - - // setAliasesFunc(function (error) { - - // if (error) { - // if (error.statusCode === 400) { - // $scope.useredit.error.aliases = 'One or more aliases is invalid'; - // } else if (error.statusCode === 409) { - // $scope.useredit.error.aliases = 'One or more aliases already taken'; - // } else { - // console.error('Unable to update aliases for user:', error); - // } - // return; - // } - asyncForEach($scope.useredit.availableEmailAddresses, function (address, callback) { var isEnabled = !!$scope.useredit.emailAddresses.find(function (a) { return a === address; }); + var userId = $scope.useredit.userInfo.id; var domain = $scope.emailDomains.find(function (d) { return address.split('@')[1] === d.domain; }); if (!domain) console.error('Domain not found. Internal error should not happen.'); - // TODO we could be smarter and check if the selection has actually changed - if (isEnabled) Client.enableUserMailbox(domain.domain, $scope.useredit.userInfo.id, callback); - else Client.disableUserMailbox(domain.domain, $scope.useredit.userInfo.id, callback); + var aliases = $scope.useredit.aliases[address] ? $scope.useredit.aliases[address].split(',') : []; + + Client.setAliases(domain.domain, userId, aliases, function (error) { + if (error) return callback(error); + + // TODO we could be smarter and check if the selection has actually changed + if (isEnabled) Client.enableUserMailbox(domain.domain, userId, callback); + else Client.disableUserMailbox(domain.domain, userId, callback); + }); }, function (error) { $scope.useredit.busy = false;