var usersRightsWindowHeight = 200;
var usersRightsWindowWidth = 450;
-function openContactWindow(sender, url) {
- var msgWin = window.open(url, null, "width=450,height=600,resizable=0");
- msgWin.focus();
-}
-
function validateEditorInput(sender) {
var errortext = "";
var field;
if (field.value == "")
errortext = errortext + labels.error_missingsubject + "\n";
- if (!UIxRecipientSelectorHasRecipients())
+ if (!hasRecipients())
errortext = errortext + labels.error_missingrecipients + "\n";
if (errortext.length > 0) {
- alert(labels.error_validationfailed.decodeEntities() + ":\n"
- + errortext.decodeEntities());
+ alert(labels.error_validationfailed + ":\n"
+ + errortext);
return false;
}
return true;
}
function openContactsFolder(contactsFolder, reload, idx) {
- if ((currentContactFolder && contactsFolder != currentContactFolder)
+ if ((contactsFolder && contactsFolder != currentContactFolder)
|| reload) {
- currentContactFolder = contactsFolder; log("openContactsFolder " + contactsFolder);
+ currentContactFolder = contactsFolder;
var url = URLForFolderID(currentContactFolder) +
"/view?noframe=1";
var searchValue = search["value"];
if (searchValue && searchValue.length > 0)
url += ("&search=" + search["criteria"]
- + "&value=" + searchValue);
+ + "&value=" + escape(searchValue.utf8encode()));
var sortAttribute = sorting["attribute"];
if (sortAttribute && sortAttribute.length > 0)
url += ("&sort=" + sorting["attribute"]
var contactsList = $("contactsList");
if (contactsList)
selection = contactsList.getSelectedRowsId();
- else
- window.alert("no contactsList");
+// else
+// window.alert("no contactsList");
}
else
selection = null;
= triggerAjaxRequest(url, contactsListCallback);
}
-function configureContactsListHeaders(cells) {
- for (var i = 0; i < cells.length; i++) {
- var currentCell = $(cells[i]);
- Event.observe(currentCell, "click",
- onHeaderClick.bindAsEventListener(currentCell));
- Event.observe(currentCell, "mousedown", listRowMouseDownHandler);
- }
-}
-
function contactsListCallback(http) {
- var div = $("contactsListContent");
-
- if (http.readyState == 4
- && http.status == 200) {
- document.contactsListAjaxRequest = null;
- div.innerHTML = http.responseText;
-
- var table = $("contactsList");
- if (table)
- configureContactsListHeaders(table.tBodies[0].rows[0].cells);
-
- if (sorting["attribute"] && sorting["attribute"].length > 0) {
- var sortHeader;
- if (sorting["attribute"] == "cn")
+ if (http.readyState == 4) {
+ if (http.status == 200) {
+ document.contactsListAjaxRequest = null;
+
+ var table = $("contactsList");
+ if (table) {
+ // Update table
+ var data = http.responseText;
+ var html = data.replace(/^(.*\n)*.*(<table(.*\n)*)$/, "$2");
+ var tbody = table.tBodies[0];
+ var tmp = document.createElement('div');
+ $(tmp).update(html);
+ table.replaceChild(tmp.firstChild.tBodies[0], tbody);
+ }
+ else {
+ // Add table (doesn't happen .. yet)
+ var div = $("contactsListContent");
+ div.update(http.responseText);
+ table = $("contactsList");
+ configureSortableTableHeaders(table);
+ TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
+ }
+
+ if (sorting["attribute"] && sorting["attribute"].length > 0) {
+ var sortHeader;
+ if (sorting["attribute"] == "displayName")
sortHeader = $("nameHeader");
- else if (sorting["attribute"] == "mail")
+ else if (sorting["attribute"] == "mail")
sortHeader = $("mailHeader");
- else if (sorting["attribute"] == "screenname")
+ else if (sorting["attribute"] == "screenName")
sortHeader = $("screenNameHeader");
- else if (sorting["attribute"] == "o")
+ else if (sorting["attribute"] == "org")
sortHeader = $("orgHeader");
- else if (sorting["attribute"] == "telephonenumber")
+ else if (sorting["attribute"] == "phone")
sortHeader = $("phoneHeader");
- else
+ else
sortHeader = null;
- if (sortHeader) {
+ if (sortHeader) {
+ var sortImages = $(table.tHead).getElementsByClassName("sortImage");
+ $(sortImages).each(function(item) {
+ item.remove();
+ });
+
var sortImage = createElement("img", "messageSortImage", "sortImage");
sortHeader.insertBefore(sortImage, sortHeader.firstChild);
if (sorting["ascending"])
- sortImage.src = ResourcesURL + "/title_sortdown_12x12.png";
+ sortImage.src = ResourcesURL + "/title_sortdown_12x12.png";
else
- sortImage.src = ResourcesURL + "/title_sortup_12x12.png";
- }
- }
+ sortImage.src = ResourcesURL + "/title_sortup_12x12.png";
+ }
+ }
- var selected = http.callbackData;
- if (selected) {
- for (var i = 0; i < selected.length; i++) {
+ var selected = http.callbackData;
+ if (selected) {
+ for (var i = 0; i < selected.length; i++) {
var row = $(selected[i]);
if (row)
- row.select();
- }
+ row.select();
+ }
+ }
+ }
+ else {
+ var table = $("contactsList");
+ if (table) {
+ var sortImages = $(table.tHead).getElementsByClassName("sortImage");
+ $(sortImages).each(function(item) {
+ item.remove();
+ });
+ var tBody = $(table.tBodies[0]);
+ var length = tBody.rows.length;
+ for (var i = length - 1; i > -1; i--)
+ tBody.removeChild(tBody.rows[i]);
+ }
}
}
else
function onContactFoldersContextMenu(event) {
var menu = $("contactFoldersMenu");
- Event.observe(menu, "hideMenu", onContactFoldersContextMenuHide, false);
+ //Event.observe(menu, "hideMenu", onContactFoldersContextMenuHide, false);
+ Event.observe(menu, "mousedown", onContactFoldersContextMenuHide, false);
popupMenu(event, "contactFoldersMenu", this);
var topNode = $("contactFolders");
var selectedNodes = topNode.getSelectedRows();
topNode.menuSelectedRows = selectedNodes;
for (var i = 0; i < selectedNodes.length; i++)
- selectedNodes[i].deselect();
+ $(selectedNodes[i]).deselect();
topNode.menuSelectedEntry = this;
- this.select();
+ $(this).select();
}
-function onContactContextMenu(event, element) {
+function onContactContextMenu(event, element) { log ("onContactContextMenu");
var menu = $("contactMenu");
- Event.observe(menu, "hideMenu", onContactContextMenuHide, false);
+
+ Event.observe(menu, "mousedown", onContactContextMenuHide, false);
popupMenu(event, "contactMenu", element);
var topNode = $("contactsList");
var selectedNodes = topNode.getSelectedRows();
topNode.menuSelectedRows = selectedNodes;
for (var i = 0; i < selectedNodes.length; i++)
- selectedNodes[i].deselect();
+ $(selectedNodes[i]).deselect();
topNode.menuSelectedEntry = element;
- element.select();
+ $(element).select();
}
function onContactContextMenuHide(event) {
var topNode = $("contactsList");
if (topNode.menuSelectedEntry) {
- topNode.menuSelectedEntry.deselect();
+ $(topNode.menuSelectedEntry).deselect();
topNode.menuSelectedEntry = null;
}
if (topNode.menuSelectedRows) {
var nodes = topNode.menuSelectedRows;
for (var i = 0; i < nodes.length; i++)
- nodes[i].select();
+ $(nodes[i]).select();
topNode.menuSelectedRows = null;
}
}
function onContactRowDblClick(event, node) {
var contactId = node.getAttribute('id');
- openContactWindow(null,
- URLForFolderID(currentContactFolder)
- + "/" + contactId + "/edit");
+ openContactWindow(URLForFolderID(currentContactFolder)
+ + "/" + contactId + "/edit", contactId);
return false;
}
function onMenuEditContact(event) {
var contactId = document.menuTarget.getAttribute('id');
- openContactWindow(null,
- URLForFolderID(currentContactFolder)
- + "/" + contactId + "/edit");
+ openContactWindow(URLForFolderID(currentContactFolder)
+ + "/" + contactId + "/edit", contactId);
}
function onMenuWriteToContact(event) {
- var contactId = document.menuTarget.getAttribute('id');
+ var contactId = document.menuTarget.getAttribute('id');
+ var contactRow = $(contactId);
+ var emailCell = contactRow.down('td', 1);
+
+ if (!emailCell.firstChild) { // .nodeValue is the contact email address
+ window.alert(labels["The selected contact has no email address."]);
+ return false;
+ }
- openMailComposeWindow(ApplicationBaseURL + currentContactFolder
- + "/" + contactId + "/write");
+ openMailComposeWindow(ApplicationBaseURL + currentContactFolder
+ + "/" + contactId + "/write");
+
+ if (document.body.hasClassName("popup"))
+ window.close();
}
function onMenuDeleteContact(event) {
var contactsList = $('contactsList');
var rows = contactsList.getSelectedRowsId();
+ if (rows.length == 0) {
+ window.alert(labels["Please select a contact."]);
+ return false;
+ }
+
for (var i = 0; i < rows.length; i++) {
- openContactWindow(null,
- URLForFolderID(currentContactFolder)
- + "/" + rows[i] + "/edit");
+ openContactWindow(URLForFolderID(currentContactFolder)
+ + "/" + rows[i] + "/edit", rows[i]);
}
return false;
function onToolbarWriteToSelectedContacts(event) {
var contactsList = $('contactsList');
var rows = contactsList.getSelectedRowsId();
+ var rowsWithEmail = 0;
+
+ if (rows.length == 0) {
+ openMailComposeWindow(ApplicationBaseURL + "Mail/compose");
+ return false;
+ }
- for (var i = 0; i < rows.length; i++)
- openMailComposeWindow(ApplicationBaseURL + currentContactFolder
- + "/" + rows[i] + "/write");
+ for (var i = 0; i < rows.length; i++) {
+ var emailCell = $(rows[i]).down('td', 1);
+ if (emailCell.firstChild) { // .nodeValue is the contact email address
+ rowsWithEmail++;
+ openMailComposeWindow(ApplicationBaseURL + currentContactFolder
+ + "/" + rows[i] + "/write");
+ }
+ }
+
+ if (rowsWithEmail == 0) {
+ window.alert(labels["The selected contact has no email address."]);
+ }
+ else if (document.body.hasClassName("popup"))
+ window.close();
return false;
}
var contactsList = $('contactsList');
var rows = contactsList.getSelectedRowsId();
+ if (rows.length == 0) {
+ window.alert(labels["Please select a contact."]);
+ return false;
+ }
+
var contactView = $('contactView');
contactView.innerHTML = '';
var mailto = sanitizeMailTo(sender.parentNode.parentNode.menuTarget.innerHTML);
if (mailto.length > 0)
- {
- w = window.open("compose?mailto=" + mailto,
- "SOGo_compose",
- "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," +
- "location=0,directories=0,status=0,menubar=0,copyhistory=0");
- w.focus();
- }
+ openMailComposeWindow("compose?mailto=" + mailto);
return false; /* stop following the link */
}
var headerId = this.getAttribute("id");
var newSortAttribute;
if (headerId == "nameHeader")
- newSortAttribute = "cn";
+ newSortAttribute = "displayName";
else if (headerId == "mailHeader")
newSortAttribute = "mail";
else if (headerId == "screenNameHeader")
- newSortAttribute = "screenname";
+ newSortAttribute = "screenName";
else if (headerId == "orgHeader")
- newSortAttribute = "o";
+ newSortAttribute = "org";
else if (headerId == "phoneHeader")
- newSortAttribute = "telephonenumber";
-
- log("header: " + headerId);
+ newSortAttribute = "phone";
if (sorting["attribute"] == newSortAttribute)
sorting["ascending"] = !sorting["ascending"];
refreshCurrentFolder();
- preventDefault(event);
-}
-
-function registerDraggableMessageNodes() {
- log ("can we drag...");
+ Event.stop(event);
}
function newContact(sender) {
- openContactWindow(sender,
- URLForFolderID(currentContactFolder) + "/new");
+ openContactWindow(URLForFolderID(currentContactFolder) + "/new");
return false; /* stop following the link */
}
if (nodes[0].hasClassName("denied")) {
var div = $("contactsListContent");
- div.innerHTML = "";
+ div.update();
}
else {
search = {};
}
}
-function refreshCurrentFolder() { log("refreshCurrentFolder");
- openContactsFolder(currentContactFolder, true);
+function refreshCurrentFolder() {
+ openContactsFolder(currentContactFolder, true);
}
function onConfirmContactSelection(event) {
var cid = rows[i].getAttribute("contactid");
var cname = '' + rows[i].getAttribute("contactname");
var email = '' + rows[i].cells[1].innerHTML;
- opener.window.addContact(tag, currentContactFolderName + '/' + cname,
+ window.opener.addContact(tag, currentContactFolderName + '/' + cname,
cid, cname, email);
}
}
function onAddressBookNew(event) {
- var name = window.prompt(labels["Name of the Address Book"].decodeEntities());
- if (name) {
- if (document.newAbAjaxRequest) {
- document.newAbAjaxRequest.aborted = true;
- document.newAbAjaxRequest.abort();
- }
- var url = ApplicationBaseURL + "/newAb?name=" + name;
- document.newAbAjaxRequest
- = triggerAjaxRequest(url, newAbCallback, name);
- }
+ createFolder(window.prompt(labels["Name of the Address Book"]),
+ appendAddressBook);
preventDefault(event);
}
function appendAddressBook(name, folder) {
- var li = document.createElement("li");
- $("contactFolders").appendChild(li);
- li.setAttribute("id", folder);
- li.appendChild(document.createTextNode(name));
- setEventsOnContactFolder(li);
+ var owner;
+ var result = true;
+
+ if (folder) {
+ owner = getSubscribedFolderOwner(folder);
+ folder = accessToSubscribedFolder(folder);
+ }
+ else
+ folder = "/" + name;
+
+ if (!owner)
+ owner = UserLogin;
+
+ if ($(folder))
+ result = false;
+ else {
+ var contactFolders = $("contactFolders");
+ var items = contactFolders.childNodesWithTag("li");
+ var li = document.createElement("li");
+
+ // Add the calendar to the proper place
+ var i = getListIndexForFolder(items, owner, name);
+ if (i != items.length) // User is subscribed to other calendars of the same owner
+ contactFolders.insertBefore(li, items[i]);
+ else
+ contactFolders.appendChild(li);
+
+ li.setAttribute("id", folder);
+ li.setAttribute("owner", owner);
+ li.appendChild(document.createTextNode(name));
+ setEventsOnContactFolder(li);
+ }
+
+ return result;
}
-function newAbCallback(http) {
+function newFolderCallback(http) {
if (http.readyState == 4
&& http.status == 201) {
var name = http.callbackData;
var selector = $("contactFolders");
var nodes = selector.getSelectedNodes();
if (nodes.length > 0) {
- nodes[0].deselect();
- var folderId = nodes[0].getAttribute("id");
- var folderIdElements = folderId.split(":");
- if (folderIdElements.length > 1)
- unsubscribeFromFolder(folderId, onFolderUnsubscribeCB, folderId);
- else {
- var abId = folderIdElements[0].substr(1);
- deletePersonalAddressBook(abId);
- var personal = $("/personal");
- personal.select();
- onFolderSelectionChange();
- }
+ nodes[0].deselect();
+ var folderId = nodes[0].getAttribute("id");
+ var folderIdElements = folderId.split("_");
+ if (folderIdElements.length > 1)
+ unsubscribeFromFolder(folderId, onFolderUnsubscribeCB, folderId);
+ else {
+ var abId = folderIdElements[0].substr(1);
+ deletePersonalAddressBook(abId);
+ var personal = $("/personal");
+ personal.select();
+ onFolderSelectionChange();
+ }
}
preventDefault(event);
}
function deletePersonalAddressBook(folderId) {
- var label
- = labels["Are you sure you want to delete the selected address book?"];
- if (window.confirm(label.decodeEntities())) {
- if (document.deletePersonalABAjaxRequest) {
- document.deletePersonalABAjaxRequest.aborted = true;
- document.deletePersonalABAjaxRequest.abort();
- }
- var url = ApplicationBaseURL + "/" + folderId + "/delete";
- document.deletePersonalABAjaxRequest
- = triggerAjaxRequest(url, deletePersonalAddressBookCallback,
- folderId);
- }
+ var label
+ = labels["Are you sure you want to delete the selected address book?"];
+ if (window.confirm(label)) {
+ if (document.deletePersonalABAjaxRequest) {
+ document.deletePersonalABAjaxRequest.aborted = true;
+ document.deletePersonalABAjaxRequest.abort();
+ }
+ var url = ApplicationBaseURL + "/" + folderId + "/deleteFolder";
+ document.deletePersonalABAjaxRequest
+ = triggerAjaxRequest(url, deletePersonalAddressBookCallback,
+ folderId);
+ }
}
function deletePersonalAddressBookCallback(http) {
if (http.readyState == 4) {
- if (http.status == 200) {
- var ul = $("contactFolders");
+ if (isHttpStatus204(http.status)) {
+ var ul = $("contactFolders");
- var children = ul.childNodesWithTag("li");
- var i = 0;
- var done = false;
- while (!done && i < children.length) {
- var currentFolderId = children[i].getAttribute("id").substr(1);
- if (currentFolderId == http.callbackData) {
- ul.removeChild(children[i]);
- done = true;
- }
- else
- i++;
+ var children = ul.childNodesWithTag("li");
+ var i = 0;
+ var done = false;
+ while (!done && i < children.length) {
+ var currentFolderId = children[i].getAttribute("id").substr(1);
+ if (currentFolderId == http.callbackData) {
+ ul.removeChild(children[i]);
+ done = true;
}
- }
- document.deletePersonalABAjaxRequest = null;
+ else
+ i++;
+ }
+ }
+ document.deletePersonalABAjaxRequest = null;
}
else
- log ("ajax problem 5: " + http.status);
+ log ("ajax problem 5: " + http.status);
}
function configureDragHandles() {
handle.addInterface(SOGoDragHandlesInterface);
handle.leftBlock=$("contactFoldersList");
handle.rightBlock=$("rightPanel");
+ handle.leftMargin = 100;
}
handle = $("rightDragHandle");
for (var i = 0; i < list.length; i++) {
var folderID = list[i].getAttribute("id");
var url = URLForFolderID(folderID) + "/canAccessContent";
-
triggerAjaxRequest(url, deniedFoldersLookupCallback, folderID);
}
}
onContactFoldersContextMenu.bindAsEventListener(node), false);
}
+function onMenuModify(event) {
+ var folders = $("contactFolders");
+ var selected = folders.getSelectedNodes()[0];
+
+ if (UserLogin == selected.getAttribute("owner")) {
+ var currentName = selected.innerHTML;
+ var newName = window.prompt(labels["Address Book Name"],
+ currentName);
+ if (newName && newName.length > 0
+ && newName != currentName) {
+ var url = (URLForFolderID(selected.getAttribute("id"))
+ + "/renameFolder?name=" + escape(newName.utf8encode()));
+ triggerAjaxRequest(url, folderRenameCallback,
+ {node: selected, name: newName});
+ }
+ } else
+ window.alert(clabels["Unable to rename that folder!"]);
+}
+
+function folderRenameCallback(http) {
+ if (http.readyState == 4) {
+ if (isHttpStatus204(http.status)) {
+ var dict = http.callbackData;
+ dict["node"].innerHTML = dict["name"];
+ }
+ }
+}
+
function onMenuSharing(event) {
+ if ($(this).hasClassName("disabled"))
+ return;
+
var folders = $("contactFolders");
var selected = folders.getSelectedNodes()[0];
- var title = this.innerHTML;
- var url = URLForFolderID(selected.getAttribute("id"));
+ var owner = selected.getAttribute("owner");
+ if (owner == "nobody")
+ window.alert(clabels["The user rights cannot be"
+ + " edited for this object!"]);
+ else {
+ var title = this.innerHTML;
+ var url = URLForFolderID(selected.getAttribute("id"));
- openAclWindow(url + "/acls", title);
+ openAclWindow(url + "/acls", title);
+ }
+}
+
+function onContactFoldersMenuPrepareVisibility() {
+ var folders = $("contactFolders");
+ var selected = folders.getSelectedNodes();
+
+ if (selected.length > 0) {
+ var folderOwner = selected[0].getAttribute("owner");
+ var modifyOption = $(this).down("ul").childElements().first();
+ var sharingOption = $(this).down("ul").childElements().last();
+ // Disable the "Sharing" and "Modify" options when address book
+ // is not owned by user
+ if (folderOwner == UserLogin || IsSuperUser) {
+ modifyOption.removeClassName("disabled");
+ sharingOption.removeClassName("disabled");
+ }
+ else {
+ modifyOption.addClassName("disabled");
+ sharingOption.addClassName("disabled");
+ }
+ }
}
function getMenus() {
var menus = {};
- menus["contactFoldersMenu"] = new Array(null, "-", null,
+ menus["contactFoldersMenu"] = new Array(onMenuModify, "-", null,
null, "-", null, "-",
onMenuSharing);
menus["contactMenu"] = new Array(onMenuEditContact, "-",
onMenuWriteToContact, null, "-",
onMenuDeleteContact);
menus["searchMenu"] = new Array(setSearchCriteria);
-
+
+ var contactFoldersMenu = $("contactFoldersMenu");
+ if (contactFoldersMenu)
+ contactFoldersMenu.prepareVisibility = onContactFoldersMenuPrepareVisibility;
+
return menus;
}
configureSelectionButtons();
configureContactFolders();
// initDnd();
+
+ var table = $("contactsList");
+ if (table) {
+ // Initialize contacts table
+ table.multiselect = true;
+ configureSortableTableHeaders(table);
+ TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
+ }
+
+ // Default sort options
+ sorting["attribute"] = "displayName";
+ sorting["ascending"] = true;
}
-addEvent(window, 'load', initContacts);
+FastInit.addOnLoad(initContacts);