diff --git a/src/theme.scss b/src/theme.scss index 6fd8a1072..27a8343b8 100644 --- a/src/theme.scss +++ b/src/theme.scss @@ -509,6 +509,19 @@ multiselect { padding: 0 !important; } +.aliases .col-lg-11 { + padding-right: 5px; +} + +.aliases .col-lg-1 { + padding-left: 0px; + padding-right: 0px; +} + +.aliases .row { + margin-top: 5px; +} + // ---------------------------- // App view // ---------------------------- diff --git a/src/views/app.html b/src/views/app.html index 743486741..0424c2bc8 100644 --- a/src/views/app.html +++ b/src/views/app.html @@ -590,6 +590,7 @@ Add another domain + diff --git a/src/views/email.html b/src/views/email.html index bc6294ea3..32d39589a 100644 --- a/src/views/email.html +++ b/src/views/email.html @@ -112,16 +112,41 @@ -
+ +
-
- {{ mailboxes.edit.error.message }} +
{{ mailboxes.edit.error.message }}
+ +
+
+
+ + +
+ + +
+
+
+
+ +
-
- -
@{{ domain.domain }}
+
+ No aliases are configured. Add an alias +
+
+ Add another alias
+
@@ -328,10 +353,9 @@ {{ mailbox.ownerDisplayName }} - - {{ mailbox.aliases }} + {{ alias.name + '@' + alias.domain }} - + {{ mailbox.usage | prettyMailSize }} diff --git a/src/views/email.js b/src/views/email.js index c7737b8d2..cae90b107 100644 --- a/src/views/email.js +++ b/src/views/email.js @@ -2,6 +2,7 @@ /* global angular:false */ /* global $:false */ +/* global asyncForEach */ angular.module('Application').controller('EmailController', ['$scope', '$location', '$timeout', '$routeParams', 'Client', function ($scope, $location, $timeout, $routeParams, Client) { Client.onReady(function () { if (!Client.getUserInfo().isAtLeastAdmin) $location.path('/'); }); @@ -16,6 +17,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio $scope.config = Client.getConfig(); $scope.apps = Client.getInstalledApps(); $scope.users = []; + $scope.incomingDomains = []; $scope.domain = null; $scope.adminDomain = null; @@ -315,7 +317,22 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio error: null, name: '', owner: null, - aliases: '', + incomingDomains: [], + aliases: [], + + addAlias: function (event) { + event.preventDefault(); + + $scope.mailboxes.edit.aliases.push({ + name: '', + domain: domainName + }); + }, + + delAlias: function (event, index) { + event.preventDefault(); + $scope.mailboxes.edit.aliases.splice(index, 1); + }, show: function (mailbox) { $scope.mailboxes.edit.name = mailbox.name; @@ -336,9 +353,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio return; } - var aliases = $scope.mailboxes.edit.aliases.split(' ').map(function (a) { return a.trim(); }).filter(function (a) { return !!a; }); - - Client.setAliases($scope.domain.domain, $scope.mailboxes.edit.name, aliases, function (error) { + Client.setAliases($scope.domain.domain, $scope.mailboxes.edit.name, $scope.mailboxes.edit.aliases, function (error) { if (error) { $scope.mailboxes.edit.error = error; $scope.mailboxes.edit.busy = false; @@ -349,7 +364,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio $scope.mailboxes.edit.error = null; $scope.mailboxes.edit.name = ''; $scope.mailboxes.edit.owner = null; - $scope.mailboxes.edit.aliases = ''; + $scope.mailboxes.edit.aliases = []; $scope.mailboxes.refresh(); $('#mailboxEditModal').modal('hide'); @@ -397,7 +412,7 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio if (error) return callback(error); $scope.mailboxes.mailboxes = mailboxes.map(function (m) { - m.aliases = aliases.filter(function (a) { return a.aliasTarget === m.name; }).map(function (a) { return a.name; }).join(' '); + m.aliases = aliases.filter(function (a) { return a.aliasName === m.name && a.aliasDomain === m.domain; }).map(function (a) { return { name: a.name, domain: a.domain }; }); m.owner = $scope.users.find(function (u) { return u.id === m.ownerId; }); // owner may not exist m.ownerDisplayName = m.owner ? m.owner.display : ''; // this meta property is set when we get the user list @@ -671,17 +686,22 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio $scope.users = users; - Client.getDomain(domainName, function (error, result) { + Client.getDomains(function (error, result) { if (error) return console.error('Unable to get view domain.', error); - $scope.domain = result; + $scope.domain = result.filter(function (d) { return d.domain === domainName; })[0]; + $scope.adminDomain = result.filter(function (d) { return d.domain === $scope.config.adminDomain; })[0]; + $scope.refreshDomain(); - Client.getDomain($scope.config.adminDomain, function (error, result) { - if (error) return console.error('Unable to get admin domain.', error); + asyncForEach(result, function (domain, iteratorDone) { + Client.getMailConfigForDomain(domain.domain, function (error, mailConfig) { + if (error) return console.error('Failed to fetch mail config for domain', domain.domain, error); - $scope.adminDomain = result; - - $scope.refreshDomain(); + if (mailConfig.enabled) $scope.incomingDomains.push(domain); + iteratorDone(); + }); + }, function iteratorDone(error) { + if (error) return console.error(error); $scope.ready = true; });