]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1102 d1b88da0-ebda-0310...
authorwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 11 Jul 2007 05:05:30 +0000 (05:05 +0000)
committerwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 11 Jul 2007 05:05:30 +0000 (05:05 +0000)
ChangeLog
NEWS
UI/MailerUI/English.lproj/Localizable.strings
UI/MailerUI/French.lproj/Localizable.strings
UI/MailerUI/UIxMailFolderActions.m
UI/MailerUI/product.plist
UI/WebServerResources/JavascriptAPIExtensions.js
UI/WebServerResources/MailerUI.js

index 607614a8dbf57a092c2dc1988ffee8714f4561ea..2b35e80878f6d3fb441416f2660e739ec1321a8d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
+       -quotasAction]): new method that returns a json representation of
+       the mailbox quotas.
+
 2007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
diff --git a/NEWS b/NEWS
index e003261cc286843d4e7ea9d4ad4cdc44560509b7..9f170c71d28eaba321e8635f191066c4904d53ff 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,14 +3,16 @@
 - added the ability to specify a super user through the SOGoSuperUsername user
   default; 
 - added the ability to view the message source;
-- no longer autocreate folders if we are not their owners;
+- don't autocreate folders if we are not their owners;
 - made compatible with PostgreSQL 8.2;
 - the months and years menus of the date selector would no longer appear;
 - fixed a bug which would produce task SQL records which would violate
   non-null constraints on the quick calendar tables;
+- the tasks due date was wrongly set because of a change in the API;
 - it was impossible to reset the start and the due date in the task editor
   whenever they were set once;
 - imap folders with non-ascii characters are now correctly accessed;
+- display the quotas of the selected mailbox on servers that support quotas;
 
 Local variables:
 mode: text
index 26912cf699b3f2cfd6bae713847c69c4fc09335e..e00c4c37adb8cb66664178d05c9d0d41a6518989 100644 (file)
 "Do you really want to move this folder into the trash ?"
  = "Do you really want to move this folder into the trash ?";
 "Operation failed" = "Operation failed";
+
+"quotasFormat" = "Quotas: %{0} used on %{1} Kb; %{2}%";
index b3c4aaf4e738ba636f1539b32ae245909977dd53..eb928182f3a9cdd6999650c04f0842fed8a2e9eb 100644 (file)
 "Do you really want to move this folder into the trash ?"
  = "Voulez-vous vraiment déplacer le dossier sélectionné dans la corbeille?";
 "Operation failed" = "L'opération a échoué.";
+
+"quotasFormat" = "Quotas: %{0} Ko utilisés sur %{1}; %{2}%";
index 8f971f53ade219fc3af549dfca8fac3c58e5506a..52b9d35630a886a1320da489475048fa9f67942d 100644 (file)
 #import <NGObjWeb/WOResponse.h>
 #import <NGObjWeb/WORequest.h>
 #import <NGImap4/NGImap4Connection.h>
+#import <NGImap4/NGImap4Client.h>
 
 #import <SoObjects/Mailer/SOGoMailFolder.h>
 #import <SoObjects/Mailer/SOGoTrashFolder.h>
 #import <SoObjects/Mailer/SOGoMailAccount.h>
+#import <SoObjects/SOGo/NSObject+Utilities.h>
 
 #import "UIxMailFolderActions.h"
 
   return [self _subscriptionStubAction];
 }
 
+- (WOResponse *) quotasAction
+{
+  SOGoMailFolder *folder;
+  NSURL *folderURL;
+  id infos;
+  WOResponse *response;
+  NGImap4Client *client;
+  NSString *responseString;
+
+  response = [context response];
+  [response setStatus: 200];
+  [response setHeader: @"text/plain; charset=UTF-8"
+           forKey: @"content-type"];
+
+  folder = [self clientObject];
+  folderURL = [folder imap4URL];
+  
+  client = [[folder imap4Connection] client];
+  infos = [client getQuotaRoot: [folder nameInContainer]];
+  responseString = [[infos objectForKey: @"quotas"] jsonRepresentation];
+  [response appendContentString: responseString];
+
+  return response;
+}
+
 @end
index 32f6c3eb74d0f6038c74886c4edcb914276754b1..6746f77a842fd698dc21f242788d57e22a9e28f9 100644 (file)
@@ -95,6 +95,11 @@ categories = {
            actionClass = "UIxMailFolderActions";
            actionName = "unsubscribe";
         };
+        quotas = {
+           protectedBy = "View";
+           actionClass = "UIxMailFolderActions";
+           actionName = "quotas";
+        };
         view = {
            protectedBy = "View";
            pageName    = "UIxMailListView";
index 7cdc85ec03a221ea72462635f472fc3e2399308a..cc07602a6892be36040ae8e374c3efac4b780c94 100644 (file)
@@ -2,6 +2,15 @@ String.prototype.trim = function() {
   return this.replace(/(^\s+|\s+$)/g, '');
 }
 
+String.prototype.formatted = function() {
+  var newString = this;
+
+  for (var i = 0; i < arguments.length; i++)
+    newString = newString.replace("%{" + i + "}", arguments[i], "g");
+
+  return newString;
+}
+
 String.prototype.repeat = function(count) {
    var newString = "";
    for (var i = 0; i < count; i++) {
index 0534c65f3b0bb727eb9fc1858af4eb34f16c42a6..434753d486002e5e8341bb12df8e32169354b128 100644 (file)
@@ -461,6 +461,10 @@ function openMailbox(mailbox, reload, idx) {
       document.messageListAjaxRequest
         = triggerAjaxRequest(url, messageListCallback,
                              currentMessages[mailbox]);
+
+      var quotasUrl = ApplicationBaseURL + mailbox + "/quotas";
+      document.quotasAjaxRequest
+        = triggerAjaxRequest(quotasUrl, quotasCallback);
    }
 }
 
@@ -509,6 +513,30 @@ function messageListCallback(http) {
       log("messageListCallback: problem during ajax request (readyState = " + http.readyState + ", status = " + http.status + ")");
 }
 
+function quotasCallback(http) {
+  if (http.readyState == 4
+      && http.status == 200) {
+    var hasQuotas = false;
+
+    var quotas = http.responseText.evalJSON(true);
+    for (var i in quotas) {
+      hasQuotas = true;
+      break;
+    }
+
+    if (hasQuotas) {
+      var treePath = currentMailbox.split("/");
+      var mbQuotas = quotas["/" + treePath[2]];
+      var used = mbQuotas["usedSpace"];
+      var max = mbQuotas["maxQuota"];
+      var percents = (Math.round(used * 10000 / max) / 100);
+      var format = labels["quotasFormat"].decodeEntities();
+      var text = format.formatted(used, max, percents);
+      window.status = text;
+    }
+  }
+}
+
 function onMessageContextMenu(event) {
    var menu = $('messageListMenu');
    Event.observe(menu, "hideMenu", onMessageContextMenuHide);
@@ -815,18 +843,6 @@ function onMenuViewMessageSource(event) {
 function newContactFromEmail(event) {
    var mailto = document.menuTarget.innerHTML;
 
-   //   var emailre
-          //     = /([a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])/g;
-   //   emailre.exec(mailto);
-   //   email = RegExp.$1;
-
-   //   var namere = /(\w[\w\ _-]+)\ (&lt;|<)/;
-   //   var c_name = '';
-   //   if (namere.test(mailto)) {
-      //     namere.exec(mailto);
-      //     c_name += RegExp.$1;
-      //   }
-
    var email = extractEmailAddress(mailto);
    var c_name = extractEmailName(mailto);
    if (email.length > 0)
@@ -841,7 +857,7 @@ function newContactFromEmail(event) {
    }
 
    return false; /* stop following the link */
-                    }
+}
 
 function newEmailTo(sender) {
    return openMailTo(document.menuTarget.innerHTML);