/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ function jsInclude(files, target) { let loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"] .getService(Components.interfaces.mozIJSSubScriptLoader); for (let i = 0; i < files.length; i++) { try { loader.loadSubScript(files[i], target); } catch(e) { dump("properties-overlay.js: failed to include '" + files[i] + "'\n" + e + "\n"); } } } jsInclude(["chrome://inverse-library/content/sogoWebDAV.js", "chrome://sogo-integrator/content/sogo-config.js"]); window.addEventListener("load", onLoadOverlay, false); let folderURL = ""; let originalName = ""; let originalColor = ""; let originalAlarms; let sogoBoxes = ["notify-on-personal-modifications", "notify-on-external-modifications", "notify-user-on-personal-modifications"]; let originalSOGoValues = {}; function onLoadOverlay() { if (window.arguments && window.arguments[0]) { let calendar = window.arguments[0].calendar; if (calendar) { let calendarName = document.getElementById("calendar-name"); originalName = calendarName.value; folderURL = document.getElementById("calendar-uri").value; originalColor = document.getElementById("calendar-color").value; originalAlarms = document.getElementById("fire-alarms").checked; let hiddenRows; if (folderURL.indexOf(sogoBaseURL()) > -1) { let aclEntry = calendar.aclEntry; if (aclEntry.userIsOwner) { let box = document.getElementById("sogo-calendar-properties"); box.collapsed = false; sizeToContent(); /* notifications */ for (let i in sogoBoxes) { let davPropName = sogoBoxes[i]; let boxId = "sogo-" + davPropName; let box = document.getElementById(boxId); let propName = "calendar.sogo." + davPropName; let propValue = calendar.getProperty(propName); if (!propValue) { propValue = "false"; } box.checked = (propValue == "true"); originalSOGoValues[propName] = propValue; } let propName = "calendar.sogo.notified-user-on-personal-modifications"; let propValue = calendar.getProperty(propName); if (!propValue) { propValue = ""; } originalSOGoValues[propName] = propValue; let field = document.getElementById("sogo-notified-user-on-personal-modifications"); field.value = propValue; } /* standard rows */ hiddenRows = ["calendar-readOnly-row", "calendar-cache-row"]; } else { hiddenRows = ["sogo-calendar-properties"]; } for (let i in hiddenRows) { document.getElementById(hiddenRows[i]).setAttribute("collapsed", "true"); } /* "disable" callback */ let box = document.getElementById("sogo-notify-user-on-personal-modifications"); box.addEventListener("click", onSOGoNotifyUserOnPersonalModificationsChanged, false); updateSOGoNotifyUserOnPersonalModificationsBox(box); } } } function updateSOGoNotifyUserOnPersonalModificationsBox(box) { let field = document.getElementById("sogo-notified-user-on-personal-modifications"); field.disabled = !box.checked; } function onSOGoNotifyUserOnPersonalModificationsChanged(event) { updateSOGoNotifyUserOnPersonalModificationsBox(this); } function onOverlayAccept() { let rc; let newFolderURL = document.getElementById("calendar-uri").value; let newName = document.getElementById("calendar-name").value; let newColor = document.getElementById("calendar-color").value; let newAlarms = document.getElementById("fire-alarms").checked; if (newFolderURL.indexOf(sogoBaseURL()) > -1 && newFolderURL == folderURL) { let calendar = window.arguments[0].calendar; let valueChanged = false; let aclEntry = calendar.aclEntry; if (aclEntry.userIsOwner) { /* notifications */ for (let i in sogoBoxes) { let davPropName = sogoBoxes[i]; let boxId = "sogo-" + davPropName; let box = document.getElementById(boxId); let propName = "calendar.sogo." + davPropName; let propValue = box.checked ? "true" : "false"; if (originalSOGoValues[propName] != propValue) { valueChanged = true; break; } } if (!valueChanged) { let propName = "calendar.sogo.notified-user-on-personal-modifications"; let field = document.getElementById("sogo-notified-user-on-personal-modifications"); let propValue = field.value; valueChanged = (originalSOGoValues[propName] != propValue); } } let changeName = (newName != originalName); let changeColor = (newColor != originalColor); let changeAlarms = (newAlarms != originalAlarms); valueChanged |= (changeName || changeColor || changeAlarms); if (valueChanged) { let proppatch = new sogoWebDAV(newFolderURL, this); let query = ("\n" + "" + ""); if (changeName) query += "" + xmlEscape(newName) + ""; if (changeColor) query += ("" + newColor + "FF"); if (changeAlarms) { query += ("" + (newAlarms ? "true" : "false") + ""); } if (aclEntry.userIsOwner) { for (let davPropName in sogoBoxes) { let boxId = "sogo-" + davPropName; console.log("box id: ", boxId); let box = document.getElementById(boxId); console.log("BOX: ", box); let propName = "calendar.sogo." + davPropName; console.log("PROPNAME: ", propName); if(box == null) { continue; } let propValue = box.checked ? "true" : "false"; if (originalSOGoValues[propName] != propValue) { query += ("<" + davPropName + " xmlns=\"urn:inverse:params:xml:ns:inverse-dav\">" + propValue + ""); calendar.setProperty(propName, propValue); } } let davPropName = "notified-user-on-personal-modifications"; let propName = "calendar.sogo." + davPropName; let field = document.getElementById("sogo-" + davPropName); let propValue = field.value; if (originalSOGoValues[propName] != propValue) { calendar.setProperty(propName, propValue); query += ("<" + davPropName + " xmlns=\"urn:inverse:params:xml:ns:inverse-dav\">" + propValue + ""); } } query += ""; proppatch.proppatch(query); rc = false; } else rc = onAcceptDialog(); } else rc = onAcceptDialog(); return rc; } function onDAVQueryComplete(status, result) { // dump("folderURL: " + folderURL + "\n"); if (status == 207) { // for (let k in result) { // if (folderURL.indexOf(k) > -1 // && result[k][200] // && result[k][200]["displayname"]) { if (onAcceptDialog()) setTimeout("window.close();", 100); // break; // } // } } else { let strBundle = document.getElementById("propertiesMessages"); window.alert(strBundle.getString("serverUpdateFailed") + "\n" + status); } }