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 }}
-
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;