diff --git a/ChangeLog b/ChangeLog index fb289d68e..fefc4345b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2007-05-11 Wolfgang Sourdeau + * UI/Common/UIxObjectActions.m ([UIxObjectActions + -removeUserFromAclsAction]): implemented this method which was + missing and is required to remove users from ACLs. + * UI/Common/UIxFolderActions.m ([UIxFolderActions -subscribeAction]): folderDict was not autoreleased, resulting in a leak... diff --git a/UI/Common/UIxObjectActions.m b/UI/Common/UIxObjectActions.m index 277d1ac66..1d154a665 100644 --- a/UI/Common/UIxObjectActions.m +++ b/UI/Common/UIxObjectActions.m @@ -36,7 +36,7 @@ { WOResponse *response; WORequest *request; - NSString *uid, *email; + NSString *uid; unsigned int code; LDAPUserManager *um; SOGoObject *clientObject; @@ -47,8 +47,7 @@ if ([uid length] > 0) { um = [LDAPUserManager sharedUserManager]; - email = [um getEmailForUID: uid]; - if ([email length] > 0) + if ([um contactInfosForUserWithUIDorEmail: uid]) { clientObject = [self clientObject]; [clientObject setRoles: [clientObject defaultAclRoles] @@ -63,4 +62,31 @@ return response; } +- (WOResponse *) removeUserFromAclsAction +{ + WOResponse *response; + WORequest *request; + NSString *uid; + unsigned int code; + LDAPUserManager *um; + + code = 403; + request = [context request]; + uid = [request formValueForKey: @"uid"]; + if ([uid length] > 0) + { + um = [LDAPUserManager sharedUserManager]; + if ([um contactInfosForUserWithUIDorEmail: uid]) + { + [[self clientObject] removeAclsForUsers: [NSArray arrayWithObject: uid]]; + code = 204; + } + } + + response = [context response]; + [response setStatus: code]; + + return response; +} + @end diff --git a/UI/Common/product.plist b/UI/Common/product.plist index 0d94f25e6..9e014e8e9 100644 --- a/UI/Common/product.plist +++ b/UI/Common/product.plist @@ -37,6 +37,11 @@ actionClass = "UIxObjectActions"; actionName = "addUserInAcls"; }; + removeUserFromAcls = { + protectedBy = "SaveAcls"; + actionClass = "UIxObjectActions"; + actionName = "removeUserFromAcls"; + }; acls = { protectedBy = "ReadAcls"; pageName = "UIxAclEditor"; diff --git a/UI/WebServerResources/UIxAclEditor.js b/UI/WebServerResources/UIxAclEditor.js index 18eaab99d..d7a3c6d09 100644 --- a/UI/WebServerResources/UIxAclEditor.js +++ b/UI/WebServerResources/UIxAclEditor.js @@ -50,11 +50,29 @@ function onUserAdd(event) { event.preventDefault(); } +function removeUserCallback(http) { + var node = http.callbackData; + + if (http.readyState == 4 + && http.status == 204) + node.parentNode.removeChild(node); + else + log("error deleting user: " + node.getAttribute("id")); +} + function onUserRemove(event) { var userList = $("userList"); var nodes = userList.getSelectedRows(); - for (var i = 0; i < nodes.length; i++) - userList.removeChild(nodes[i]); + + var url = window.location.href; + var elements = url.split("/"); + elements[elements.length-1] = "removeUserFromAcls?uid="; + var baseURL = elements.join("/"); + + for (var i = 0; i < nodes.length; i++) { + var userId = nodes[i].getAttribute("id"); + triggerAjaxRequest(baseURL + userId, removeUserCallback, nodes[i]); + } event.preventDefault(); }