diff --git a/UI/Common/UIxAclEditor.m b/UI/Common/UIxAclEditor.m index 79d97b28d..73cd49bcf 100644 --- a/UI/Common/UIxAclEditor.m +++ b/UI/Common/UIxAclEditor.m @@ -1,6 +1,6 @@ /* UIxAclEditor.m - this file is part of SOGo * - * Copyright (C) 2006 Inverse groupe conseil + * Copyright (C) 2006, 2007 Inverse groupe conseil * * Author: Wolfgang Sourdeau * @@ -27,7 +27,7 @@ #import #import #import -#import +#import #import #import "UIxAclEditor.h" @@ -42,10 +42,8 @@ prepared = NO; publishInFreeBusy = NO; users = [NSMutableArray new]; - delegates = [NSMutableArray new]; - assistants = [NSMutableArray new]; - ownerLogin = nil; currentUser = nil; + savedUIDs = nil; } return self; @@ -53,38 +51,20 @@ - (void) dealloc { + [savedUIDs release]; [users release]; - [delegates release]; - [assistants release]; - [ownerLogin release]; [currentUser release]; [super dealloc]; } -- (NSArray *) aclsForFolder +- (NSArray *) aclsForObject { - SOGoAclsFolder *folder; - if (!acls) - { - folder = [SOGoAclsFolder aclsFolder]; - acls = [folder aclsForObject: [self clientObject]]; - } + acls = [[self clientObject] acls]; return acls; } -- (NSString *) ownerLogin -{ - if (!ownerLogin) - { - ownerLogin = [[self clientObject] ownerInContext: context]; - [ownerLogin retain]; - } - - return ownerLogin; -} - - (NSString *) _displayNameForUID: (NSString *) uid { AgenorUserManager *um; @@ -98,44 +78,35 @@ - (NSString *) ownerName { - return [self _displayNameForUID: [self ownerLogin]]; + NSString *ownerLogin; + + ownerLogin = [[self clientObject] ownerInContext: context]; + + return [self _displayNameForUID: ownerLogin]; } - (void) _prepareUsers { NSEnumerator *aclsEnum; - AgenorUserManager *um; NSDictionary *currentAcl; - NSString *currentUID; + NSString *currentUID, *ownerLogin; - aclsEnum = [[self aclsForFolder] objectEnumerator]; - um = [AgenorUserManager sharedUserManager]; + ownerLogin = [[self clientObject] ownerInContext: context]; + + aclsEnum = [[self aclsForObject] objectEnumerator]; currentAcl = [aclsEnum nextObject]; while (currentAcl) { currentUID = [currentAcl objectForKey: @"c_uid"]; - if ([currentUID isEqualToString: @"freebusy"]) - publishInFreeBusy = YES; - else - { - if (![[um getCNForUID: currentUID] - isEqualToString: [self ownerLogin]]) - { - if ([[currentAcl objectForKey: @"c_role"] - isEqualToString: SOGoRole_Delegate]) - [delegates addObject: currentUID]; - else - [assistants addObject: currentUID]; - [users addObject: currentUID]; - } - } + if (![currentUID isEqualToString: ownerLogin]) + [users addObject: currentUID]; currentAcl = [aclsEnum nextObject]; prepared = YES; } } -- (NSArray *) usersForFolder +- (NSArray *) usersForObject { if (!prepared) [self _prepareUsers]; @@ -158,84 +129,61 @@ return [self _displayNameForUID: currentUser]; } -- (NSArray *) delegates -{ - if (!prepared) - [self _prepareUsers]; - - return delegates; -} - -- (NSString *) assistantsValue -{ - if (!prepared) - [self _prepareUsers]; - - return [assistants componentsJoinedByString: @","]; -} - -- (NSString *) delegatesValue -{ - if (!prepared) - [self _prepareUsers]; - - return [delegates componentsJoinedByString: @","]; -} - -- (BOOL) publishInFreeBusy -{ - if (!prepared) - [self _prepareUsers]; - - return publishInFreeBusy; -} - - (NSString *) toolbar { - NSString *currentLogin; + NSString *currentLogin, *ownerLogin; currentLogin = [[context activeUser] login]; + ownerLogin = [[self clientObject] ownerInContext: context]; - return (([[self ownerLogin] isEqualToString: currentLogin]) + return (([ownerLogin isEqualToString: currentLogin]) ? @"SOGoAclOwner.toolbar" : @"SOGoAclAssistant.toolbar"); } -- (BOOL) clientIsCalendar +- (void) setUserUIDS: (NSString *) retainedUsers { - return [NSStringFromClass ([[self clientObject] class]) - isEqualToString: @"SOGoAppointmentFolder"]; + if ([retainedUsers length] > 0) + savedUIDs = [retainedUsers componentsSeparatedByString: @","]; + else + savedUIDs = [NSArray new]; } -- (id) saveAclsAction +- (BOOL) shouldTakeValuesFromRequest: (WORequest *) request + inContext: (WOContext *) context { - NSString *uids; - NSArray *fbUsers; - WORequest *request; - SOGoAclsFolder *folder; - SOGoObject *clientObject; + return ([[request method] isEqualToString: @"POST"]); +} + +- (id ) saveAclsAction +{ + NSEnumerator *aclsEnum; + SOGoObject *clientObject; + NSString *currentUID, *ownerLogin; - folder = [SOGoAclsFolder aclsFolder]; - request = [context request]; clientObject = [self clientObject]; - uids = [request formValueForKey: @"delegates"]; - [folder setRoleForObject: clientObject - forUsers: [uids componentsSeparatedByString: @","] - to: SOGoRole_Delegate]; - uids = [request formValueForKey: @"assistants"]; - [folder setRoleForObject: clientObject - forUsers: [uids componentsSeparatedByString: @","] - to: SOGoRole_Assistant]; - if ([self clientIsCalendar]) { - if ([[request formValueForKey: @"freebusy"] intValue]) - fbUsers = [NSArray arrayWithObject: @"freebusy"]; - else - fbUsers = nil; - [folder setRoleForObject: clientObject - forUsers: fbUsers - to: SOGoRole_FreeBusy]; - } + ownerLogin = [clientObject ownerInContext: context]; + aclsEnum = [[self aclsForObject] objectEnumerator]; + currentUID = [[aclsEnum nextObject] objectForKey: @"c_uid"]; + while (currentUID) + { + if ([currentUID isEqualToString: ownerLogin] + || [savedUIDs containsObject: currentUID]) + [users removeObject: currentUID]; + currentUID = [[aclsEnum nextObject] objectForKey: @"c_uid"]; + } + [clientObject removeAclsForUsers: users]; return [self jsCloseWithRefreshMethod: nil]; } +// - (id ) addUserInAcls +// { +// SOGoObject *clientObject; +// NSString *uid; + +// uid = [self queryParameterForKey: @"uid"]; + +// clientObject = [self clientObject]; +// } + @end diff --git a/UI/Templates/UIxAclEditor.wox b/UI/Templates/UIxAclEditor.wox index d0d6d55f6..842726b06 100644 --- a/UI/Templates/UIxAclEditor.wox +++ b/UI/Templates/UIxAclEditor.wox @@ -14,17 +14,11 @@
- - +
- -
-
    -
- -
-
diff --git a/UI/WebServerResources/UIxAclEditor.js b/UI/WebServerResources/UIxAclEditor.js index f8cd0b950..74f2d0e0a 100644 --- a/UI/WebServerResources/UIxAclEditor.js +++ b/UI/WebServerResources/UIxAclEditor.js @@ -6,17 +6,17 @@ function addUser(userName, userID) { if (!$(userID)) { var ul = $("userList"); ul.appendChild(nodeForUser(userName, userID)); - var roleList = $("assistants"); - if (roleList.value.length > 0) { - var uids = roleList.value.split(","); - uids.push(userID); - roleList.value = uids.join(","); - } - else - roleList.value = userID; + var url = window.location.href; + var elements = url.split("/"); + elements[elements.length-1] = ("addUserInAcls?uid=" + + userID); + triggerAjaxRequest(elements.join("/"), addUserCallback); } } +function addUserCallback(http) { +} + function nodeForUser(userName, userId) { var node = document.createElement("li"); node.setAttribute("id", userId); @@ -34,64 +34,14 @@ function nodeForUser(userName, userId) { } function saveAcls() { - $("aclForm").submit(); + var uidList = new Array(); + var users = $("userList").childNodesWithTag("li"); + for (var i = 0; i < users.length; i++) + uidList.push(users[i].getAttribute("id")); + $("userUIDS").value = uidList.join(","); + $("aclForm").submit(); - return false; -} - -function updateSelectedRole(list) { - var select = $("userRoleDropDown"); - var selection = list.getSelectedRows(); - if (selection.length > 0) { - select.style.visibility = "visible;"; - var selected = selection[0]; - var assistantsValue = $("assistants"); - var uid = selected.getAttribute("id"); - var regexp = new RegExp("(^|,)" + uid + "(,|$)","i"); - if (regexp.test(assistantsValue.value)) - select.selectedIndex = 0; - else - select.selectedIndex = 1; - } - else - select.style.visibility = "hidden;"; -} - -function onAclSelectionChange() { - log("selectionchange"); - updateSelectedRole(this); -} - -function onUserRoleDropDownChange() { - var oldList; - var newList; - - if (this.selectedIndex == 0) { - oldList = $("delegates"); - newList = $("assistants"); - } else { - oldList = $("assistants"); - newList = $("delegates"); - } - - var uid = $("userList").getSelectedRows()[0].getAttribute("id"); - var newListArray; - if (newList.value.length > 0) { - newListArray = newList.value.split(","); - newListArray.push(uid); - } - else - newListArray = new Array(uid); - newList.value = newListArray.join(","); - - var oldListArray = oldList.value.split(",").without(uid); - if (oldListArray.length > 0) - oldList.value = oldListArray.join(","); - else - oldList.value = ""; - - log("assistants: " + $("assistants").value); - log("delegates: " + $("delegates").value); + return false; } function onUserAdd(event) { @@ -101,24 +51,10 @@ function onUserAdd(event) { } function onUserRemove(event) { - var userlist = $("userList"); - var node = userlist.getSelectedRows()[0]; - var uid = node.getAttribute("id"); - var regexp = new RegExp("(^|,)" + uid + "($|,)"); - var uids = $("assistants"); - if (!regexp.test(uids.value)) - uids = $("delegates"); - if (regexp.test(uids.value)) { - var list = uids.value.split(","); - var newList = new Array(); - for (var i = 0; i < list.length; i++) { - if (list[i] != uid) - newList.push(list[i]); - } - uids.value = newList.join(","); - node.parentNode.removeChild(node); - } - updateSelectedRole(userlist); + var userList = $("userList"); + var nodes = userList.getSelectedRows(); + for (var i = 0; i < nodes.length; i++) + userList.removeChild(nodes[i]); event.preventDefault(); } @@ -127,19 +63,33 @@ function subscribeToFolder(refreshCallback, refreshCallbackData) { refreshCallbackData["folder"]); } +function openRightsForUser(button) { + var nodes = $("userList").getSelectedRows(); + if (nodes.length > 0) { + var url = window.location.href; + var elements = url.split("/"); + elements[elements.length-1] = ("userRights?uid=" + + nodes[0].getAttribute("id")); + window.open(elements.join("/")); + } + + return false; +} + +function onOpenUserRights(event) { + window.alert("user: " + this.getAttribute("id")); + event.preventDefault(); +} + function onAclLoadHandler() { var ul = $("userList"); - ul.addEventListener("selectionchange", - onAclSelectionChange, false); var lis = ul.childNodesWithTag("li"); for (var i = 0; i < lis.length; i++) { lis[i].addEventListener("mousedown", listRowMouseDownHandler, false); + lis[i].addEventListener("dblclick", onOpenUserRights, false); lis[i].addEventListener("click", onRowClick, false); } - var select = $("userRoleDropDown"); - select.addEventListener("change", onUserRoleDropDownChange, false); - var buttons = $("userSelectorButtons").childNodesWithTag("a"); buttons[0].addEventListener("click", onUserAdd, false); buttons[1].addEventListener("click", onUserRemove, false);