refactor codes and applied comments

pull/91/head
Alexandre Cloutier 2014-10-21 14:44:48 -04:00 committed by Francis Lachapelle
parent c82143fd2e
commit 22faf5c285
9 changed files with 142 additions and 96 deletions

View File

@ -67,32 +67,33 @@
<!-- modal for addressbook sharing options -->
<script type="text/ng-template" id="addressbookSharing.html">
<div id="modalACL">
<h2><var:string label:value="Sharing - "/>{{addressbook.name}}</h2>
<ul class="small-block-grid-2">
<h2><var:string label:value="Access rights - "/>{{addressbook.name}}</h2>
<ul>
<!-- left side -->
<li id="usersList">
<ul>
<li ng-repeat="user in users | orderBy:['userClass', 'displayName']" data-ng-click="selectUser(user)" data-ng-class="{_selected: user==selected}">
<li data-ng-repeat="user in users | orderBy:['userClass', 'displayName']" data-ng-click="selectUser(user)" data-ng-class="{_selected: user==selected}">
<span class="card-picture" data-ng-switch="user.userClass">
<i data-ng-switch-when="normal-user" class="icon-ion-ios7-person"><!-- normal-user --></i>
<i data-ng-switch-when="public-user" class="icon-ion-ios7-people"><!-- public-user --></i>
</span>
<span class="name">{{user.displayName}}</span>
<span class="subscriptionArea" data-ng-hide="user.userClass == 'public-user'">
<input type="checkbox" ng-model="user.isSubscribed" ng-checked="user.isSubscribed"
ng-disabled="!user.canSubscribeUser" ng-change="markUserAsDirty(user)" />
<input type="checkbox" data-ng-model="user.isSubscribed" data-ng-checked="user.isSubscribed"
data-ng-disabled="!user.canSubscribeUser" data-ng-change="markUserAsDirty(user)" />
<span><var:string label:value="Subscribe User"/></span>
</span>
</li>
</ul>
<form ng-submit="addUser(userToAdd)" class="addContactsToolbar">
<form data-ng-submit="addUser(userToAdd)" class="addContactsToolbar">
<table id="bottomTable">
<tr>
<td id="td_1"><i class="icon-ion-search"><!-- search --></i>
<input type="search" ng-model="userToAdd" label:placeholder="Add..." typeahead-wait-ms="1000"
typeahead="user as user.cn for user in User.$filter($viewValue) | filter:$viewValue" class="form-control" /></td>
<input type="search" data-ng-model="userToAdd" label:placeholder="email address" typeahead-wait-ms="500"
typeahead="user as user.cn for user in User.$filter($viewValue) | filter:$viewValue"
class="form-control" /></td>
<td id="td_2"><button type="submit" ><var:string label:value="Add User"/></button>
<button type="button" ng-disabled="userIsReadOnly()" data-ng-click="removeUser()"><var:string label:value="Remove User"/></button></td>
<button type="button" data-ng-disabled="userIsReadOnly()" data-ng-click="removeUser()"><var:string label:value="Remove User"/></button></td>
</tr>
</table>
</form>
@ -105,23 +106,23 @@
<div class="calendarUserRights">
<ul>
<li data-ng-show="displayUserRights()">
<input type="checkbox" ng-checked="userSelected.aclOptions.canCreateObjects"
ng-model="userSelected.aclOptions.canCreateObjects" ng-change="markUserAsDirty()" />
<input type="checkbox" data-ng-checked="userSelected.aclOptions.canCreateObjects"
data-ng-model="userSelected.aclOptions.canCreateObjects" data-ng-change="markUserAsDirty()" />
<var:string label:value="This person can add cards to this addressbook."/></li>
<li data-ng-show="displayUserRights()" ng-model="displayUserRights">
<input type="checkbox" ng-checked="userSelected.aclOptions.canEditObjects"
ng-model="userSelected.aclOptions.canEditObjects" ng-change="markUserAsDirty()" />
<li data-ng-show="displayUserRights()" data-ng-model="displayUserRights">
<input type="checkbox" data-ng-checked="userSelected.aclOptions.canEditObjects"
ng-model="userSelected.aclOptions.canEditObjects" data-ng-change="markUserAsDirty()" />
<var:string label:value="This person can edit the cards of this addressbook."/></li>
<li data-ng-show="displayUserRights()" ng-model="displayUserRights">
<input type="checkbox" ng-checked="userSelected.aclOptions.canEraseObjects"
ng-model="userSelected.aclOptions.canEraseObjects" ng-change="markUserAsDirty()" />
<li data-ng-show="displayUserRights()" data-ng-model="displayUserRights">
<input type="checkbox" data-ng-checked="userSelected.aclOptions.canEraseObjects"
data-ng-model="userSelected.aclOptions.canEraseObjects" data-ng-change="markUserAsDirty()" />
<var:string label:value="This person can erase cards from this addressbook."/></li>
<li data-ng-hide="!userSelected.displayName">
<input type="checkbox" ng-checked="userSelected.aclOptions.canViewObjects"
ng-model="userSelected.aclOptions.canViewObjects" ng-change="markUserAsDirty()" />
<input type="checkbox" data-ng-checked="userSelected.aclOptions.canViewObjects"
data-ng-model="userSelected.aclOptions.canViewObjects" data-ng-change="markUserAsDirty()" />
<var:string label:value="This person can read the cards of this addressbook."/></li>
</ul>
</div>

View File

@ -367,42 +367,42 @@
<script type="text/ng-template" id="acl-modal.html">
<ion-modal-view>
<ion-header-bar class="bar-positive">
<div class="buttons" ng-hide="onGoingSearch">
<button class="button button-icon" ng-click="closeModal()"><var:string label:value="Close"/></button>
<div class="buttons" data-ng-hide="onGoingSearch">
<button class="button button-icon" data-ng-click="closeModal()"><var:string label:value="Close"/></button>
</div>
<div class="buttons" ng-show="onGoingSearch">
<button class="button button-icon" ng-click="cancelSearch()"><var:string label:value="Back"/></button>
<div class="buttons" data-ng-show="onGoingSearch">
<button class="button button-icon" data-ng-click="cancelSearch()"><var:string label:value="Back"/></button>
</div>
<h1 class="title">{{addressbook.name}}</h1>
<div class="buttons">
<button class="button button-icon" ng-click="saveModal()"><var:string label:value="Save"/></button>
<button class="button button-icon" data-ng-click="saveModal()"><var:string label:value="Save"/></button>
</div>
</ion-header-bar>
<ion-content>
<ion-list show-delete="showDelete" on-tap="toggleDelete(false)">
<div ng-repeat="user in users | orderBy:['userClass', 'displayName']">
<ion-item class="item-stable item-icon-left item-icon-right" ng-click="toggleUser(user)" on-swipe-right="toggleDelete(true)">
<i class="icon" ng-class="(user.userClass == 'public-user') ? 'ion-ios7-people' : 'ion-ios7-person'"><!-- spacer --></i>
<ion-item class="item-stable item-icon-left item-icon-right" data-ng-click="toggleUser(user)" on-swipe-right="toggleDelete(true)">
<i class="icon" data-ng-class="(user.userClass == 'public-user') ? 'ion-ios7-people' : 'ion-ios7-person'"><!-- spacer --></i>
{{user.displayName}}
<i class="icon" ng-class="displayIcon(user)"><!-- spacer --></i>
<ion-delete-button class="ion-minus-circled" ng-disabled="user.userClass == 'public-user' || !user.inAclList"
ng-click="removeUser(user)"></ion-delete-button>
<i class="icon" data-ng-class="displayIcon(user)"><!-- spacer --></i>
<ion-delete-button class="ion-minus-circled" data-ng-disabled="user.userClass == 'public-user' || !user.inAclList"
data-ng-click="removeUser(user)"></ion-delete-button>
</ion-item>
<div class="item-accordion" ng-show="isUserShown(user)">
<ion-toggle ng-show="displaySubscribeUser()" ng-model="userSelected.isSubscribed" ng-checked="userSelected.isSubscribed"
ng-disabled="!userSelected.canSubscribeUser" ng-change="markUserAsDirty()">
<div class="item-accordion" data-ng-show="isUserShown(user)">
<ion-toggle data-ng-show="displaySubscribeUser()" data-ng-model="userSelected.isSubscribed" data-ng-checked="userSelected.isSubscribed"
data-ng-disabled="!userSelected.canSubscribeUser" data-ng-change="markUserAsDirty()">
<var:string label:value="Subscribe user"/></ion-toggle>
<ion-checkbox ng-show="displayUserRights()" ng-checked="userSelected.aclOptions.canCreateObjects"
ng-model="userSelected.aclOptions.canCreateObjects" ng-change="markUserAsDirty()">
<ion-checkbox data-ng-show="displayUserRights()" data-ng-checked="userSelected.aclOptions.canCreateObjects"
data-ng-model="userSelected.aclOptions.canCreateObjects" data-ng-change="markUserAsDirty()">
<var:string label:value="This person can add cards to this addressbook."/></ion-checkbox>
<ion-checkbox ng-show="displayUserRights()" ng-checked="userSelected.aclOptions.canEditObjects"
ng-model="userSelected.aclOptions.canEditObjects" ng-change="markUserAsDirty()">
<ion-checkbox data-ng-show="displayUserRights()" data-ng-checked="userSelected.aclOptions.canEditObjects"
data-ng-model="userSelected.aclOptions.canEditObjects" data-ng-change="markUserAsDirty()">
<var:string label:value="This person can edit the cards of this addressbook."/></ion-checkbox>
<ion-checkbox ng-show="displayUserRights()" ng-checked="userSelected.aclOptions.canEraseObjects"
ng-model="userSelected.aclOptions.canEraseObjects" ng-change="markUserAsDirty()">
<ion-checkbox data-ng-show="displayUserRights()" data-ng-checked="userSelected.aclOptions.canEraseObjects"
data-ng-model="userSelected.aclOptions.canEraseObjects" data-ng-change="markUserAsDirty()">
<var:string label:value="This person can erase cards from this addressbook."/></ion-checkbox>
<ion-checkbox ng-checked="userSelected.aclOptions.canViewObjects"
ng-model="userSelected.aclOptions.canViewObjects" ng-change="markUserAsDirty()">
<ion-checkbox data-ng-checked="userSelected.aclOptions.canViewObjects"
data-ng-model="userSelected.aclOptions.canViewObjects" data-ng-change="markUserAsDirty()">
<var:string label:value="This person can read the cards of this addressbook."/></ion-checkbox>
</div>
</div>

View File

@ -27,22 +27,22 @@
Acl.prototype.$addUser = function(uid) {
var param = {"uid": uid};
Acl.$$resource.fetch(this.folder_id, "addUserInAcls", param);
return Acl.$$resource.fetch(this.folder_id, "addUserInAcls", param);
};
Acl.prototype.$removeUser = function(uid) {
var param = {"uid": uid};
Acl.$$resource.fetch(this.folder_id, "removeUserFromAcls", param);
return Acl.$$resource.fetch(this.folder_id, "removeUserFromAcls", param);
};
Acl.prototype.$saveUsersRights = function(dirtyObjects) {
var param = {"action": "saveUserRights"};
Acl.$$resource.save(this.folder_id, dirtyObjects, param);
return Acl.$$resource.save(this.folder_id, dirtyObjects, param);
};
Acl.prototype.$subscribeUsers = function(uids) {
var param = {"uids": uids};
Acl.$$resource.fetch(this.folder_id, "subscribeUsers", param);
return Acl.$$resource.fetch(this.folder_id, "subscribeUsers", param);
};
Acl.prototype.$users = function() {

View File

@ -111,8 +111,8 @@
/**
* @function fetch
* @desc Fetch resources using a specific object, action and/or parameters
* @param {string} object_id - the object on which the action will be applied (ex: addressbook, calendar)
* @desc Fetch resources using a specific folder, action and/or parameters
* @param {string} folder_id - the folder on which the action will be applied (ex: addressbook, calendar)
* @param {string} action - the action to be used in the URL
* @param {Object} params - Object parameters injected through the $http protocol
*/

View File

@ -13,7 +13,7 @@
}];
/* Factory registration in Angular module */
angular.module('SOGo.Common').factory('sgUser', User.factory);
angular.module('SOGo.Common').factory('User', User.factory);
/* Instance methods
* Public method, assigned to prototype
@ -21,8 +21,6 @@
User.prototype.$filter = function(search) {
// return a collections of users for a filter
var param = {search: search};
return User.$$resource.fetch(null, "usersSearch", param).then(function(results) {
return results;
})
return User.$$resource.fetch(null, "usersSearch", param);
};
})();

View File

@ -18,7 +18,7 @@
this.$unwrap(newAddressBookData);
}
else if (this.id){
this.$acl = new AddressBook.$$acl(this.id);
this.$acl = new AddressBook.$$Acl(this.id);
}
}
else {
@ -38,7 +38,7 @@
$timeout: $timeout,
$$resource: new Resource(Settings.baseURL),
$Card: Card,
$$acl: Acl
$$Acl: Acl
});
return AddressBook; // return constructor
@ -204,7 +204,7 @@
_this.cards[i] = new AddressBook.$Card(o);
});
// Instanciate Acl object
_this.$acl = new AddressBook.$$acl(_this.id);
_this.$acl = new AddressBook.$$Acl(_this.id);
});
}, function(data) {
AddressBook.$timeout(function() {

View File

@ -182,7 +182,7 @@
$scope.share = function() {
var modal = $modal.open({
templateUrl: 'addressbookSharing.html',
controller: function($scope, $modalInstance, sgUser) {
controller: function($scope, $modalInstance, User) {
/* Variables for the scope */
var dirtyObjects = {};
stateAddressbook.$acl.$users().then(function(users) {
@ -191,8 +191,10 @@
user.canSubscribeUser = user.isSubscribed;
$scope.users.push(user);
})
}, function(data, status) {
Dialog.alert(l('Warning'), l('An error occurs while trying to fetch users from the server.'));
});
$scope.User = new sgUser();
$scope.User = new User();
/* Functions */
$scope.closeModal = function() {
$modalInstance.close();
@ -203,13 +205,17 @@
if($scope.validateChanges(dirtyObjects["anonymous"])) {
Dialog.confirm(l("Warning"), l("Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?")).then(function(res){
if(res){
stateAddressbook.$acl.$saveUsersRights(dirtyObjects);
stateAddressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$modalInstance.close();
};
}
})
}
else{
stateAddressbook.$acl.$saveUsersRights(dirtyObjects);
stateAddressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$modalInstance.close();
}
}
@ -217,18 +223,24 @@
if($scope.validateChanges(dirtyObjects["<default>"])) {
Dialog.confirm(l("Warning"), l("Any user with an account on this system will be able to access your folder. Are you certain you trust them all?")).then(function(res){
if(res){
stateAddressbook.$acl.$saveUsersRights(dirtyObjects);
stateAddressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$modalInstance.close();
};
})
}
else{
stateAddressbook.$acl.$saveUsersRights(dirtyObjects);
stateAddressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$modalInstance.close();
}
}
else {
stateAddressbook.$acl.$saveUsersRights(dirtyObjects);
stateAddressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
var usersToSubscribe = [];
angular.forEach(dirtyObjects, function(dirtyObject){
if(dirtyObject.canSubscribeUser && dirtyObject.isSubscribed){
@ -236,7 +248,9 @@
}
})
if(!_.isEmpty(usersToSubscribe))
stateAddressbook.$acl.$subscribeUsers(usersToSubscribe);
stateAddressbook.$acl.$subscribeUsers(usersToSubscribe).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$modalInstance.close();
}
@ -254,7 +268,9 @@
if (!_.isEmpty($scope.userSelected)) {
if(dirtyObjects[$scope.userSelected.uid])
delete dirtyObjects[$scope.userSelected.uid];
stateAddressbook.$acl.$removeUser($scope.userSelected.uid);
stateAddressbook.$acl.$removeUser($scope.userSelected.uid).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
// Remove from the users list
$scope.users = _.reject($scope.users, function(o) {
return o.uid == $scope.userSelected.uid;
@ -266,17 +282,17 @@
if (user.uid) {
// Looks through the list and returns the first value that matches all of the key-value pairs listed
if(!_.findWhere($scope.users, {uid: user.uid})) {
stateAddressbook.$acl.$addUser(user.uid);
stateAddressbook.$acl.$users().then(function(users) {
$scope.users = [];
angular.forEach(users, function(user){
user.canSubscribeUser = user.isSubscribed;
$scope.users.push(user);
})
stateAddressbook.$acl.$addUser(user.uid).then(function() {
var displayName = user.cn + " <" + user.c_email + ">";
var userClass = user.isGroup ? "group-user" : "normal-user";
var newUser = {canSubscribeUser: 0, displayName: displayName, isSubscribed: 0, uid: user.uid, userClass: userClass};
$scope.users.push(newUser);
}, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
}
else
Dialog.alert(l('Warning'), l('You have already subscribed to that folder!'));
Dialog.alert(l('Warning'), l('This user is already in your permissions list.'));
}
else
Dialog.alert(l('Warning'), l('Please select a user inside your domain'));
@ -294,17 +310,17 @@
else {
stateAddressbook.$acl.$userRights($scope.userSelected.uid).then(function(userRights) {
$scope.userSelected.aclOptions = userRights;
}, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
}
}
};
$scope.markUserAsDirty = function(user) {
if(!$scope.userSelected) {
if(!$scope.userSelected)
$scope.selectUser(user);
dirtyObjects[$scope.userSelected.uid] = $scope.userSelected;
}
else
dirtyObjects[$scope.userSelected.uid] = $scope.userSelected;
dirtyObjects[$scope.userSelected.uid] = $scope.userSelected;
};
$scope.displayUserRights = function() {
return ($scope.userSelected && ($scope.userSelected.uid != "anonymous")) ? true : false;

View File

@ -159,7 +159,7 @@
// };
}])
.controller('AddressBooksCtrl', ['$scope', '$state', '$rootScope', '$ionicModal', '$ionicListDelegate', '$ionicActionSheet', 'sgDialog', 'sgAddressBook', 'sgUser', function($scope, $state, $rootScope, $ionicModal, $ionicListDelegate, $ionicActionSheet, Dialog, AddressBook, sgUser) {
.controller('AddressBooksCtrl', ['$scope', '$state', '$rootScope', '$ionicModal', '$ionicListDelegate', '$ionicActionSheet', 'sgDialog', 'sgAddressBook', 'User', function($scope, $state, $rootScope, $ionicModal, $ionicListDelegate, $ionicActionSheet, Dialog, AddressBook, User) {
// Initialize with data from template
$scope.addressbooks = AddressBook.$findAll(contactFolders);
$scope.newAddressbook = function() {
@ -182,7 +182,7 @@
$ionicActionSheet.show({
buttons: [
{ text: l('Rename') },
{ text: l('Sharing') }
{ text: l('Access rights') }
],
destructiveText: l('Delete'),
cancelText: l('Cancel'),
@ -205,10 +205,12 @@
}
// Variables in scope
$scope.$aclEditorModal = modal;
$scope.User = new sgUser();
$scope.User = new User();
var aclUsers = {};
addressbook.$acl.$users().then(function(users) {
$scope.refreshUsers(users);
refreshUsers(users);
}, function(data, status) {
Dialog.alert(l('Warning'), l('An error occurs while trying to fetch users from the server.'));
});
$scope.showDelete = false;
$scope.onGoingSearch = false;
@ -217,7 +219,7 @@
var dirtyObjects = {};
// Local functions
$scope.refreshUsers = function(users) {
function refreshUsers(users) {
$scope.users = [];
$scope.onGoingSearch = false;
angular.forEach(users, function(user){
@ -239,13 +241,17 @@
if($scope.validateChanges(dirtyObjects["anonymous"])) {
Dialog.confirm(l("Warning"), l("Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?")).then(function(res){
if(res){
addressbook.$acl.$saveUsersRights(dirtyObjects);
addressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$scope.$aclEditorModal.remove();
};
})
}
else {
addressbook.$acl.$saveUsersRights(dirtyObjects);
addressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$scope.$aclEditorModal.remove();
}
}
@ -253,18 +259,24 @@
if($scope.validateChanges(dirtyObjects["<default>"])) {
Dialog.confirm(l("Warning"), l("Any user with an account on this system will be able to access your folder. Are you certain you trust them all?")).then(function(res){
if(res){
addressbook.$acl.$saveUsersRights(dirtyObjects);
addressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$scope.$aclEditorModal.remove();
};
})
}
else {
addressbook.$acl.$saveUsersRights(dirtyObjects);
addressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$scope.$aclEditorModal.remove();
}
}
else {
addressbook.$acl.$saveUsersRights(dirtyObjects);
addressbook.$acl.$saveUsersRights(dirtyObjects).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
var usersToSubscribe = [];
angular.forEach(dirtyObjects, function(dirtyObject){
if(dirtyObject.canSubscribeUser && dirtyObject.isSubscribed){
@ -272,7 +284,9 @@
}
})
if(!_.isEmpty(usersToSubscribe))
addressbook.$acl.$subscribeUsers(usersToSubscribe);
addressbook.$acl.$subscribeUsers(usersToSubscribe).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
$scope.$aclEditorModal.remove();
}
@ -288,7 +302,9 @@
};
$scope.cancelSearch = function() {
addressbook.$acl.$users().then(function(users) {
$scope.refreshUsers(users);
refreshUsers(users);
}, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'));
});
};
$scope.toggleDelete = function(boolean) {
@ -299,7 +315,9 @@
if(dirtyObjects[user.uid])
delete dirtyObjects[user.uid];
delete aclUsers[user.uid];
addressbook.$acl.$removeUser(user.uid);
addressbook.$acl.$removeUser(user.uid).then(null, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
// Remove from the users list
$scope.users = _.reject($scope.users, function(o) {
return o.uid == user.uid;
@ -310,13 +328,16 @@
$scope.addUser = function (user) {
if (user.uid) {
if(!aclUsers[user.uid]) {
addressbook.$acl.$addUser(user.uid);
user.inAclList = true;
user.canSubscribeUser = (user.isSubscribed) ? false : true;
aclUsers[user.uid] = user;
addressbook.$acl.$addUser(user.uid).then(function() {
user.inAclList = true;
user.canSubscribeUser = (user.isSubscribed) ? false : true;
aclUsers[user.uid] = user;
}, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
}
else
Dialog.alert(l('Warning'), l('You have already subscribed to that folder!'));
Dialog.alert(l('Warning'), l('This user is already in your permissions list.'));
}
else
Dialog.alert(l('Warning'), l('Please select a user inside your domain'));
@ -334,6 +355,8 @@
// Otherwise, if it's the first time the user consult the user rights; fetch from server
addressbook.$acl.$userRights($scope.userSelected.uid).then(function(userRights) {
$scope.userSelected.aclOptions = userRights;
}, function(data, status) {
Dialog.alert(l('Warning'), l('An error occured please try again.'))
});
}
}

View File

@ -367,6 +367,7 @@ $column-gutter: 0;
#modalACL {
height: 25vw;
ul {
@include block-grid(2);
height: 85%;
}
#usersList {
@ -379,11 +380,14 @@ $column-gutter: 0;
$base-style: false
);
height: 85%;
border: 1px solid black;
border-top: 1px solid black;
border-bottom: 1px solid black;
border-left: 1px solid black;
padding: 0;
margin: 0;
li {
padding: 0;
padding-top: 5px;
line-height: 45px;
background-color: $f-dropdown-list-hover-bg;
transition: background 300ms ease;
@ -397,9 +401,13 @@ $column-gutter: 0;
}
.subscriptionArea {
float: right;
padding-right: 5px;
}
}
}
.f-dropdown {
height: auto;
}
#bottomTable {
width: 100%;
margin: 0;
@ -446,7 +454,7 @@ $column-gutter: 0;
);
li {
padding: 5px;
clear: none !important;
margin-left: 5px;
}
}
}