2009-07-19 18:41:42 +02:00
|
|
|
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2008-08-28 16:48:45 +02:00
|
|
|
|
2006-12-14 21:20:40 +01:00
|
|
|
var contactSelectorAction = 'acls-contacts';
|
2007-05-18 01:07:31 +02:00
|
|
|
var defaultUserID = '';
|
2007-11-20 18:11:26 +01:00
|
|
|
var AclEditor = {
|
2009-11-04 23:13:20 +01:00
|
|
|
userRightsHeight: null,
|
|
|
|
userRightsWidth: null
|
2007-11-20 18:11:26 +01:00
|
|
|
};
|
2006-12-14 21:20:40 +01:00
|
|
|
|
2010-01-19 13:28:10 +01:00
|
|
|
var usersToSubscribe = [];
|
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
function addUser(userName, userID) {
|
2009-11-04 23:13:20 +01:00
|
|
|
var result = false;
|
|
|
|
if (!$(userID)) {
|
|
|
|
var ul = $("userList");
|
2010-06-03 16:43:38 +02:00
|
|
|
var lis = ul.childNodesWithTag("li");
|
|
|
|
var newNode = nodeForUser(userName, userID, canSubscribeUsers);
|
|
|
|
newNode.addClassName("normal-user");
|
|
|
|
if (lis.length > 1) {
|
|
|
|
var publicNode = lis[lis.length-2];
|
|
|
|
ul.insertBefore(newNode, publicNode);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ul.appendChild(newNode);
|
|
|
|
}
|
2009-11-04 23:13:20 +01:00
|
|
|
var url = window.location.href;
|
|
|
|
var elements = url.split("/");
|
|
|
|
elements[elements.length-1] = ("addUserInAcls?uid="
|
|
|
|
+ userID);
|
|
|
|
triggerAjaxRequest(elements.join("/"), addUserCallback);
|
|
|
|
result = true;
|
|
|
|
}
|
|
|
|
return result;
|
2006-12-14 21:20:40 +01:00
|
|
|
}
|
|
|
|
|
2007-04-17 15:56:19 +02:00
|
|
|
function addUserCallback(http) {
|
2009-11-04 23:13:20 +01:00
|
|
|
// Ignore response
|
2007-04-17 15:56:19 +02:00
|
|
|
}
|
|
|
|
|
2007-05-18 01:07:31 +02:00
|
|
|
function setEventsOnUserNode(node) {
|
2009-11-04 23:13:20 +01:00
|
|
|
var n = $(node);
|
|
|
|
n.observe("mousedown", listRowMouseDownHandler);
|
|
|
|
n.observe("selectstart", listRowMouseDownHandler);
|
|
|
|
n.observe("dblclick", onOpenUserRights);
|
|
|
|
n.observe("click", onRowClick);
|
2010-01-19 13:28:10 +01:00
|
|
|
|
|
|
|
var cbParents = n.childNodesWithTag("label");
|
|
|
|
if (cbParents && cbParents.length) {
|
|
|
|
var cbParent = $(cbParents[0]);
|
|
|
|
var checkbox = cbParent.childNodesWithTag("input")[0];
|
|
|
|
$(checkbox).observe("change", onSubscriptionChange);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function onSubscriptionChange(event) {
|
|
|
|
var li = this.parentNode.parentNode;
|
|
|
|
var username = li.getAttribute("id");
|
|
|
|
var idx = usersToSubscribe.indexOf(username);
|
|
|
|
if (this.checked) {
|
|
|
|
if (idx < 0)
|
|
|
|
usersToSubscribe.push(username);
|
|
|
|
} else {
|
|
|
|
if (idx > -1)
|
|
|
|
usersToSubscribe.splice(idx, 1);
|
|
|
|
}
|
2007-05-18 01:07:31 +02:00
|
|
|
}
|
|
|
|
|
2010-06-03 16:43:38 +02:00
|
|
|
function nodeForUser(userName, userId, canSubscribe) {
|
|
|
|
var node = createElement("li");
|
|
|
|
node.id = userId;
|
2006-12-14 21:20:40 +01:00
|
|
|
|
2010-06-03 16:43:38 +02:00
|
|
|
var span = createElement("span");
|
2010-01-19 13:28:10 +01:00
|
|
|
span.addClassName("userFullName");
|
|
|
|
span.appendChild(document.createTextNode(" " + userName));
|
|
|
|
node.appendChild(span);
|
|
|
|
|
2010-06-03 16:43:38 +02:00
|
|
|
if (canSubscribe) {
|
|
|
|
var label = createElement("label");
|
2010-01-20 17:28:56 +01:00
|
|
|
label.addClassName("subscriptionArea");
|
2010-06-03 16:43:38 +02:00
|
|
|
var cb = createElement("input");
|
2010-01-20 17:28:56 +01:00
|
|
|
cb.type = "checkbox";
|
|
|
|
label.appendChild(cb);
|
2010-06-02 21:11:15 +02:00
|
|
|
label.appendChild(document.createTextNode(_("Subscribe User")));
|
2010-01-20 17:28:56 +01:00
|
|
|
node.appendChild(label);
|
|
|
|
}
|
2006-12-14 21:20:40 +01:00
|
|
|
|
2010-01-19 13:28:10 +01:00
|
|
|
setEventsOnUserNode(node);
|
2006-12-14 21:20:40 +01:00
|
|
|
|
2009-11-04 23:13:20 +01:00
|
|
|
return node;
|
2006-12-14 21:20:40 +01:00
|
|
|
}
|
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
function onUserAdd(event) {
|
2009-11-04 23:13:20 +01:00
|
|
|
openUserFolderSelector(null, "user");
|
2007-03-29 20:05:23 +02:00
|
|
|
|
2009-11-04 23:13:20 +01:00
|
|
|
preventDefault(event);
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
2007-05-11 23:45:33 +02:00
|
|
|
function removeUserCallback(http) {
|
2009-11-04 23:13:20 +01:00
|
|
|
var node = http.callbackData;
|
2007-05-11 23:45:33 +02:00
|
|
|
|
2009-11-04 23:13:20 +01:00
|
|
|
if (http.readyState == 4
|
|
|
|
&& isHttpStatus204(http.status))
|
|
|
|
node.parentNode.removeChild(node);
|
|
|
|
else
|
|
|
|
log("error deleting user: " + node.getAttribute("id"));
|
2007-05-11 23:45:33 +02:00
|
|
|
}
|
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
function onUserRemove(event) {
|
2009-11-04 23:13:20 +01:00
|
|
|
var userList = $("userList");
|
|
|
|
var nodes = userList.getSelectedRows();
|
|
|
|
|
|
|
|
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]);
|
|
|
|
}
|
|
|
|
preventDefault(event);
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
2007-01-03 22:11:08 +01:00
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
function subscribeToFolder(refreshCallback, refreshCallbackData) {
|
2009-11-04 23:13:20 +01:00
|
|
|
var result = true;
|
|
|
|
if (UserLogin != refreshCallbackData["folder"]) {
|
|
|
|
result = addUser(refreshCallbackData["folderName"],
|
|
|
|
refreshCallbackData["folder"]);
|
|
|
|
}
|
|
|
|
else
|
2010-06-02 21:11:15 +02:00
|
|
|
refreshCallbackData["window"].alert(_("You cannot subscribe to a folder that you own!"));
|
2009-11-04 23:13:20 +01:00
|
|
|
return result;
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
2007-05-18 01:07:31 +02:00
|
|
|
function openRightsForUserID(userID) {
|
2009-11-04 23:13:20 +01:00
|
|
|
var url = window.location.href;
|
|
|
|
var elements = url.split("/");
|
|
|
|
elements[elements.length-1] = "userRights?uid=" + userID;
|
|
|
|
|
2010-06-03 16:43:38 +02:00
|
|
|
var height = AclEditor.userRightsHeight;
|
|
|
|
if (userID == "anonymous") {
|
|
|
|
height -= 42;
|
|
|
|
if (CurrentModule() == "Contacts") {
|
|
|
|
height -= 21;
|
|
|
|
}
|
|
|
|
}
|
2009-11-04 23:13:20 +01:00
|
|
|
window.open(elements.join("/"), "",
|
|
|
|
"width=" + AclEditor.userRightsWidth
|
2010-06-03 16:43:38 +02:00
|
|
|
+ ",height=" + height
|
2009-11-04 23:13:20 +01:00
|
|
|
+ ",resizable=0,scrollbars=0,toolbar=0,"
|
|
|
|
+ "location=0,directories=0,status=0,menubar=0,copyhistory=0");
|
2007-05-18 01:07:31 +02:00
|
|
|
}
|
|
|
|
|
2007-04-17 15:56:19 +02:00
|
|
|
function openRightsForUser(button) {
|
2009-11-04 23:13:20 +01:00
|
|
|
var nodes = $("userList").getSelectedRows();
|
|
|
|
if (nodes.length > 0)
|
|
|
|
openRightsForUserID(nodes[0].getAttribute("id"));
|
2007-04-17 15:56:19 +02:00
|
|
|
|
2009-11-04 23:13:20 +01:00
|
|
|
return false;
|
2007-04-17 15:56:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function onOpenUserRights(event) {
|
2009-11-04 23:13:20 +01:00
|
|
|
openRightsForUser();
|
|
|
|
preventDefault(event);
|
2007-04-17 15:56:19 +02:00
|
|
|
}
|
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
function onAclLoadHandler() {
|
2009-11-04 23:13:20 +01:00
|
|
|
var ul = $("userList");
|
|
|
|
var lis = ul.childNodesWithTag("li");
|
|
|
|
for (var i = 0; i < lis.length; i++)
|
|
|
|
setEventsOnUserNode(lis[i]);
|
|
|
|
|
2010-06-03 16:43:38 +02:00
|
|
|
defaultUserID = $("defaultUserID").value;
|
|
|
|
var userNode = nodeForUser(_("Any Authenticated User"),
|
|
|
|
defaultUserID);
|
|
|
|
userNode.addClassName("any-user");
|
|
|
|
ul.appendChild(userNode);
|
|
|
|
if (CurrentModule() != "Mail") {
|
|
|
|
userNode = nodeForUser(_("Public Access"), "anonymous");
|
|
|
|
userNode.addClassName("anonymous-user");
|
|
|
|
ul.appendChild(userNode);
|
|
|
|
}
|
|
|
|
|
2009-11-04 23:13:20 +01:00
|
|
|
var buttonArea = $("userSelectorButtons");
|
|
|
|
if (buttonArea) {
|
|
|
|
var buttons = buttonArea.childNodesWithTag("a");
|
|
|
|
$("aclAddUser").stopObserving ("click");
|
|
|
|
$("aclDeleteUser").stopObserving ("click");
|
|
|
|
$("aclAddUser").observe("mousedown", onUserAdd);
|
|
|
|
$("aclDeleteUser").observe("mousedown", onUserRemove);
|
|
|
|
}
|
|
|
|
|
|
|
|
AclEditor['userRightsHeight'] = window.opener.getUsersRightsWindowHeight();
|
|
|
|
AclEditor['userRightsWidth'] = window.opener.getUsersRightsWindowWidth();
|
2010-01-19 13:28:10 +01:00
|
|
|
|
|
|
|
Event.observe(window, "beforeunload", onAclCloseHandler);
|
|
|
|
}
|
|
|
|
|
|
|
|
function onAclCloseHandler(event) {
|
|
|
|
if (usersToSubscribe.length) {
|
|
|
|
var url = (URLForFolderID($("folderID").value)
|
|
|
|
+ "/subscribeUsers?uids=" + usersToSubscribe.join(","));
|
|
|
|
new Ajax.Request(url, {
|
|
|
|
asynchronous: false,
|
|
|
|
method: 'get',
|
|
|
|
onFailure: function(transport) {
|
|
|
|
log("Can't expunge current folder: " + transport.status);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2007-01-03 22:11:08 +01:00
|
|
|
}
|
|
|
|
|
2009-03-12 22:09:14 +01:00
|
|
|
document.observe("dom:loaded", onAclLoadHandler);
|