Creation of aclUsers window
parent
22970bd510
commit
ee5ef02f50
|
@ -119,29 +119,62 @@
|
|||
if ([newUID length] > 0)
|
||||
{
|
||||
if (!defaultUserID)
|
||||
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
||||
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
||||
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
if ([newUID isEqualToString: defaultUserID]
|
||||
|| [newUID isEqualToString: @"anonymous"]
|
||||
|| [[um getEmailForUID: newUID] length] > 0)
|
||||
{
|
||||
if (![newUID hasPrefix: @"@"])
|
||||
{
|
||||
if ([newUID isEqualToString: defaultUserID] || [newUID isEqualToString: @"anonymous"]
|
||||
|| [[um getEmailForUID: newUID] length] > 0)
|
||||
{
|
||||
if (![newUID hasPrefix: @"@"])
|
||||
{
|
||||
domain = [[context activeUser] domain];
|
||||
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
||||
if (group)
|
||||
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
||||
}
|
||||
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
||||
if (group)
|
||||
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
||||
}
|
||||
ASSIGN (uid, newUID);
|
||||
clientObject = [self clientObject];
|
||||
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
||||
|
||||
ASSIGN (uid, newUID);
|
||||
clientObject = [self clientObject];
|
||||
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
||||
|
||||
response = YES;
|
||||
}
|
||||
response = YES;
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
- (BOOL) _initRightsWithParameter:(NSString *) newUID
|
||||
{
|
||||
BOOL response;
|
||||
NSString *domain;
|
||||
SOGoUserManager *um;
|
||||
SOGoObject *clientObject;
|
||||
SOGoGroup *group;
|
||||
|
||||
response = NO;
|
||||
|
||||
if ([newUID length] > 0)
|
||||
{
|
||||
if (!defaultUserID)
|
||||
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
||||
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
if ([newUID isEqualToString: defaultUserID] || [newUID isEqualToString: @"anonymous"]
|
||||
|| [[um getEmailForUID: newUID] length] > 0)
|
||||
{
|
||||
if (![newUID hasPrefix: @"@"])
|
||||
{
|
||||
domain = [[context activeUser] domain];
|
||||
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
||||
if (group)
|
||||
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
||||
}
|
||||
ASSIGN (uid, newUID);
|
||||
clientObject = [self clientObject];
|
||||
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
||||
|
||||
response = YES;
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
|
@ -186,20 +219,32 @@
|
|||
- (id <WOActionResults>) saveUserRightsAction
|
||||
{
|
||||
id <WOActionResults> response;
|
||||
WORequest *value;
|
||||
SOGoDomainDefaults *dd;
|
||||
NSDictionary *jsonObject, *currentObject;
|
||||
NSEnumerator *enumerator;
|
||||
NSArray *o;
|
||||
id key;
|
||||
|
||||
if (![self _initRights])
|
||||
response = [NSException exceptionWithHTTPStatus: 403
|
||||
reason: @"No such user."];
|
||||
else
|
||||
value = [[self context] request];
|
||||
jsonObject = [[value contentAsString] objectFromJSONString];
|
||||
enumerator = [jsonObject keyEnumerator];
|
||||
|
||||
while((key = [enumerator nextObject]))
|
||||
{
|
||||
currentObject = [jsonObject objectForKey: key];
|
||||
if(![self _initRightsWithParameter: [currentObject objectForKey: @"UID"]])
|
||||
{
|
||||
NSArray *o;
|
||||
|
||||
o = [NSArray arrayWithArray: userRights];
|
||||
|
||||
[self updateRights];
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"No such user."];
|
||||
return response;
|
||||
}
|
||||
else
|
||||
{
|
||||
[self updateRights:[currentObject objectForKey: @"aclOptions"]];
|
||||
[[self clientObject] setRoles: userRights forUser: uid];
|
||||
|
||||
|
||||
o = [NSArray arrayWithArray: userRights];
|
||||
dd = [[context activeUser] domainDefaults];
|
||||
if (![o isEqualToArray: userRights] && [dd aclSendEMailNotifications])
|
||||
[self sendACLAdvisoryTemplateForObject: [self clientObject]];
|
||||
|
@ -234,10 +279,6 @@
|
|||
[userRights removeObjectsInArray: list];
|
||||
}
|
||||
|
||||
- (void) prepareRightsForm
|
||||
{
|
||||
}
|
||||
|
||||
- (void) updateRights
|
||||
{
|
||||
[self subclassResponsibility: _cmd];
|
||||
|
|
|
@ -61,6 +61,77 @@
|
|||
</ul>
|
||||
|
||||
<div>
|
||||
<!-- modal for addressbook sharing options -->
|
||||
<script type="text/ng-template" id="addressbookSharing.html">
|
||||
<div id="modalACL">
|
||||
<h2>Sharing</h2>
|
||||
<div>
|
||||
<!-- left side -->
|
||||
<div id="usersList">
|
||||
<div>
|
||||
<ul>
|
||||
<li data-ng-repeat="user in users" data-ng-click="selectUser($index)" data-ng-class="{_selected: $index==selected}">
|
||||
<span>
|
||||
<i data-ng-class="(user.userClass == 'public-user') ? 'icon-user4' : 'icon-vcard'"><!-- spacer --></i>
|
||||
{{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.isSubscribed" ng-change="dirtyObjects()" />
|
||||
<span><var:string label:value="Subscribe User"/></span></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<form ng-submit="addUser(userToAdd)" class="addContactsToolbar">
|
||||
<input type="search" ng-model="userToAdd" label:placeholder="add aclUser" typeahead-wait-ms="1000"
|
||||
typeahead="user for user in getContacts($viewValue) | filter:$viewValue" class="form-control" />
|
||||
</form>
|
||||
<button data-ng-click="addUser(userToAdd)">Add User</button>
|
||||
<button ng-disabled="removeButton()" data-ng-click="removeUser()">Remove User</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- right side -->
|
||||
<div id="AccessRightList">
|
||||
<input id="uid" type="hidden" name="uid" var:value="uid"/>
|
||||
<div class="title">
|
||||
<label><var:string label:value="Access rights to"/><br />
|
||||
<span id="folderName" class="value">{{addressbook.name}}</span></label>
|
||||
<label><var:string label:value="For user"/><br />
|
||||
<span class="value">{{userSelected.displayName}}</span></label>
|
||||
</div>
|
||||
<div class="calendarUserRights">
|
||||
<ul>
|
||||
<li data-ng-show="displayUserRights()">
|
||||
<input type="checkbox" ng-checked="userSelected.aclOptions.canCreateObjects"
|
||||
ng-model="userSelected.aclOptions.canCreateObjects" ng-change="dirtyObjects()" />
|
||||
<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="dirtyObjects()" />
|
||||
<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="dirtyObjects()" />
|
||||
<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="dirtyObjects()" />
|
||||
<var:string label:value="This person can read the cards of this addressbook."/></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="aclButtons">
|
||||
<button data-ng-click="closeModal()">Close</button>
|
||||
<button data-ng-click="saveModal()">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
<span class="close-reveal-modal" data-ng-click="closeModal()"><i class="icon-close"><!-- close --></i></span>
|
||||
</script>
|
||||
|
||||
<div data-ui-view="addressbooks"><!-- addressbooks list --></div>
|
||||
|
||||
|
|
|
@ -108,4 +108,41 @@
|
|||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* @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)
|
||||
* @param {string} action - the action to be used in the URL
|
||||
* @param {string} params - the url parameter
|
||||
*/
|
||||
Resource.prototype.fetch = function(object_id, action, params) {
|
||||
var deferred = this._q.defer();
|
||||
var object_id_path = object_id ? ("/" + object_id) : "";
|
||||
var action_path = action ? ("/" + action) : "";
|
||||
var params_path = params ? ("?" + params) : "";
|
||||
|
||||
var path = this._path + object_id_path + action_path + params_path;
|
||||
|
||||
this._http
|
||||
.get(path)
|
||||
.success(deferred.resolve)
|
||||
.error(deferred.reject);
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
Resource.prototype.saveAclUsers = function(object_id, action, data) {
|
||||
var deferred = this._q.defer();
|
||||
var object_id_path = object_id ? ("/" + object_id) : "";
|
||||
var action_path = action ? ("/" + action) : "";
|
||||
var path = this._path + object_id_path + action_path;
|
||||
|
||||
this._http
|
||||
.post(path, data)
|
||||
.success(deferred.resolve)
|
||||
.error(deferred.reject);
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
})();
|
||||
|
|
|
@ -177,6 +177,80 @@
|
|||
$scope.closeModal = function() {
|
||||
$modalInstance.close();
|
||||
};
|
||||
$scope.saveModal = function() {
|
||||
if(Object.keys(dirtyObjects).length > 0) {
|
||||
$scope.AclUsers.saveUsersRights(dirtyObjects);
|
||||
}
|
||||
$modalInstance.close();
|
||||
};
|
||||
$scope.removeUser = function() {
|
||||
if ($scope.userSelected) {
|
||||
if(dirtyObjects[$scope.userSelected.UID])
|
||||
delete dirtyObjects[$scope.userSelected.UID];
|
||||
$scope.AclUsers.removeUser($scope.userSelected);
|
||||
$scope.AclUsers.getUsers().then(function(data) {
|
||||
$scope.users = data;
|
||||
});
|
||||
$scope.userSelected = {};
|
||||
}
|
||||
};
|
||||
$scope.addUser = function (user) {
|
||||
if (user) {
|
||||
angular.forEach($scope.userObjects, function(userObject) {
|
||||
if (user.indexOf(userObject.uid) != -1) {
|
||||
var test = true;
|
||||
angular.forEach($scope.users, function(userData) {
|
||||
if (user.indexOf(userData.UID) != -1) {
|
||||
test = false;
|
||||
}
|
||||
})
|
||||
if (test) {
|
||||
$scope.AclUsers.addUser(userObject.uid);
|
||||
$scope.AclUsers.getUsers().then(function(data) {
|
||||
$scope.users = data;
|
||||
});
|
||||
}
|
||||
else {
|
||||
// TODO : Write a better msg and add the string inside the .string
|
||||
Dialog.alert(l('Warning'), l('This user is already added to your AclUsers list'));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
$scope.selectUser = function(index) {
|
||||
// Check if it is a different user
|
||||
if ($scope.userSelected != $scope.users[index]){
|
||||
$scope.userSelected = {};
|
||||
$scope.selected = index;
|
||||
$scope.userSelected = $scope.users[index];
|
||||
|
||||
if (dirtyObjects[$scope.userSelected.UID]) {
|
||||
$scope.userSelected.aclOptions = dirtyObjects[$scope.userSelected.UID].aclOptions;
|
||||
}
|
||||
else {
|
||||
$scope.AclUsers.openRightsForUserId($scope.userSelected.UID).then(function(userRights) {
|
||||
$scope.userSelected.aclOptions = userRights;
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
$scope.getContacts = function(value){
|
||||
return $scope.AclUsers.searchUsers(value).then(function(response) {
|
||||
$scope.usersFound = [];
|
||||
$scope.userObjects = response;
|
||||
angular.forEach(response, function(userObject){
|
||||
$scope.usersFound.push(userObject.displayName + " <" + userObject.email + ">");
|
||||
});
|
||||
return $scope.usersFound;
|
||||
});
|
||||
};
|
||||
$scope.dirtyObjects = function() {
|
||||
dirtyObjects[$scope.userSelected.UID] = $scope.userSelected;
|
||||
};
|
||||
$scope.displayUserRights = function() {
|
||||
return ($scope.userSelected && $scope.userSelected.UID != "anonymous") ? true : false;
|
||||
};
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue