From 5b3ed54e84590bdb6efbfe3c79c5e0129486ef1a Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sun, 13 Dec 2009 13:28:47 -0500
Subject: [PATCH] - Plugin API: added 'quota' hook

---
 CHANGELOG                           |    1 +
 program/steps/mail/check_recent.inc |    2 +-
 program/steps/mail/func.inc         |   27 +++++++++++++++------------
 program/steps/mail/move_del.inc     |    2 +-
 4 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 85134df..1d38877 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG RoundCube Webmail
 ===========================
 
+- Plugin API: added 'quota' hook
 - Fix parsing conditional comments in HTML messages (#1486350)
 - Use built-in json_encode() for proper JSON format in AJAX replies
 - Allow setting only selected params in 'message_compose' hook (#1486312)
diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc
index 094c429..4b84273 100644
--- a/program/steps/mail/check_recent.inc
+++ b/program/steps/mail/check_recent.inc
@@ -46,7 +46,7 @@
         $OUTPUT->command('new_message_focus');
 
       if (!empty($_GET['_quota']))
-        $OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));
+        $OUTPUT->command('set_quota', rcmail_quota_content());
 
       // trigger plugin hook
       $RCMAIL->plugins->exec_hook('new_messages', array('mailbox' => $mbox_name, 'count' => $unread_count));
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index b874817..52b3719 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -515,7 +515,7 @@
 
   $OUTPUT->add_gui_object('quotadisplay', $attrib['id']);
   
-  $quota = rcmail_quota_content(NULL, $attrib);
+  $quota = rcmail_quota_content($attrib);
   
   if (is_array($quota)) {
     $OUTPUT->add_script('$(document).ready(function(){
@@ -527,30 +527,33 @@
   }
 
 
-function rcmail_quota_content($quota=NULL, $attrib=NULL)
+function rcmail_quota_content($attrib=NULL)
   {
-  global $IMAP, $COMM_PATH, $RCMAIL;
+  global $COMM_PATH, $RCMAIL;
 
   $display = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : '';
 
-  if (empty($quota)) {
-    if (!$IMAP->get_capability('QUOTA'))
-      return rcube_label('unknown');
-    else 
-      $quota = $IMAP->get_quota();
-    }
+  $quota = $RCMAIL->imap->get_quota();
+  $quota = $RCMAIL->plugins->exec_hook('quota', $quota);
 
-  if ($quota && !($quota['total']==0 && $RCMAIL->config->get('quota_zero_as_unlimited')))
+  if (!isset($quota['used']) || !isset($quota['total']))
+    return rcube_label('unknown');
+
+  if (!($quota['total']==0 && $RCMAIL->config->get('quota_zero_as_unlimited')))
     {
+    if (!isset($quota['percent']))
+      $quota['percent'] = min(100, round(($quota['used']/max(1,$quota['total']))*100));
+    
     $quota_result = sprintf('%s / %s (%.0f%%)',
         show_bytes($quota['used'] * 1024), show_bytes($quota['total'] * 1024),
         $quota['percent']);
 
     if ($display == 'image') {
-      $quota_result = array(	    
+      $quota_result = array(
     	'percent' 	=> $quota['percent'],
         'title'		=> $quota_result,
 	);
+
       if ($attrib['width'])
         $quota_result['width'] = $attrib['width'];
       if ($attrib['height'])
@@ -733,7 +736,7 @@
 
   $html = $washer->wash($html);
   $REMOTE_OBJECTS = $washer->extlinks;
-  
+
   return $html;
 }
 
diff --git a/program/steps/mail/move_del.inc b/program/steps/mail/move_del.inc
index 30102d9..2895867 100644
--- a/program/steps/mail/move_del.inc
+++ b/program/steps/mail/move_del.inc
@@ -113,7 +113,7 @@
     rcmail_send_unread_count($target, true);
   }
 
-  $OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));
+  $OUTPUT->command('set_quota', rcmail_quota_content());
   $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($msg_count));
 
   // add new rows from next page (if any)

--
Gitblit v1.9.1