Add alias ui in user edit

This commit is contained in:
Johannes Zellner
2018-01-25 18:17:40 +01:00
parent eb3d6fe5f1
commit c3ce6ef9f0
2 changed files with 25 additions and 34 deletions

View File

@@ -131,10 +131,10 @@
<small>{{ useredit.error.aliases }}</small>
</div>
<div class="input-group form-inline">
<tag-input class="form-group form-control" placeholder='Separate aliases by comma' taglist='useredit.aliases' name="aliases"></tag-input>
<div class="input-group form-inline" ng-repeat="address in useredit.emailAddresses" style="margin-top: 10px;">
<tag-input class="form-group form-control" placeholder="Separate aliases by comma" taglist="useredit.aliases[address]" name="aliases"></tag-input>
<div class="input-group-addon">
@{{ config.fqdn }}
@{{ address.split('@')[1] }}
</div>
</div>
</div>

View File

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