]> err.no Git - scalable-opengroupware.org/blobdiff - UI/WebServerResources/ContactsUI.js
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1305 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / WebServerResources / ContactsUI.js
index 42ced264f9b9188f3bcd351c78069391f5591a4d..21c9872f293df3add7507a16c1b3451bcb4e6d00 100644 (file)
@@ -74,45 +74,45 @@ function openContactsFolderAtIndex(element) {
 }
 
 function contactsListCallback(http) {
-  if (http.readyState == 4
-      && 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 (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")
+      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"] == "org")
+       else if (sorting["attribute"] == "org")
          sortHeader = $("orgHeader");
-       else if (sorting["attribute"] == "phone")
+       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();
@@ -121,19 +121,33 @@ function contactsListCallback(http) {
          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
@@ -296,20 +310,20 @@ function onMenuEditContact(event) {
 }
 
 function onMenuWriteToContact(event) {
-   var contactId = document.menuTarget.getAttribute('id');
-   var contactRow = $(contactId);
-   var emailCell = contactRow.down('td', 1);
+  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;
-   }
+  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();
+  if (document.body.hasClassName("popup"))
+    window.close();
 }
 
 function onMenuDeleteContact(event) {
@@ -320,6 +334,11 @@ function onToolbarEditSelectedContacts(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(URLForFolderID(currentContactFolder)
                       + "/" + rows[i] + "/edit", rows[i]);
@@ -333,8 +352,10 @@ function onToolbarWriteToSelectedContacts(event) {
   var rows = contactsList.getSelectedRowsId();
   var rowsWithEmail = 0;
 
-  if (rows.length == 0)
+  if (rows.length == 0) {
+    openMailComposeWindow(ApplicationBaseURL + "Mail/compose");
     return false;
+  }
 
   for (var i = 0; i < rows.length; i++) {
     var emailCell = $(rows[i]).down('td', 1);
@@ -359,6 +380,11 @@ function uixDeleteSelectedContacts(sender) {
   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 = '';
 
@@ -452,7 +478,7 @@ function onFolderSelectionChange() {
 }
 
 function refreshCurrentFolder() {
-   openContactsFolder(currentContactFolder, true);
+  openContactsFolder(currentContactFolder, true);
 }
 
 function onConfirmContactSelection(event) {
@@ -476,7 +502,7 @@ 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);
    }
 
@@ -506,19 +532,40 @@ function onAddressBookNew(event) {
 }
 
 function appendAddressBook(name, folder) {
-  if (folder)
+  var owner;
+  var result = true;
+
+  if (folder) {
+    owner = getSubscribedFolderOwner(folder);
     folder = accessToSubscribedFolder(folder);
+  }
   else
     folder = "/" + name;
+  
+  if (!owner)
+    owner = UserLogin;
+
   if ($(folder))
-    window.alert(clabels["You have already subscribed to that folder!"]);
+    result = false;
   else {
+    var contactFolders = $("contactFolders");
+    var items = contactFolders.childNodesWithTag("li");
     var li = document.createElement("li");
-    $("contactFolders").appendChild(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 newFolderCallback(http) {
@@ -732,12 +779,18 @@ function onContactFoldersMenuPrepareVisibility() {
 
   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" option when address book is not owned by user
-    if (folderOwner == UserLogin || IsSuperUser)
+    // 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
+    }
+    else {
+      modifyOption.addClassName("disabled");
       sharingOption.addClassName("disabled");
+    }
   }
 }
 
@@ -784,6 +837,10 @@ function initContacts(event) {
      configureSortableTableHeaders(table);
      TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
    }
+
+   // Default sort options
+   sorting["attribute"] = "displayName";
+   sorting["ascending"] = true;
 }
 
 FastInit.addOnLoad(initContacts);