From c5f06896d4db5f2479b5988cb2cea6ef0fa80cad Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 26 Jun 2014 06:32:52 -0400
Subject: [PATCH] Display full quota information in popup (#1485769, #1486604)

---
 program/include/rcmail.php |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 29ed66a..cfdd181 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -1678,7 +1678,6 @@
         $quota = $this->storage->get_quota();
         $quota = $this->plugins->exec_hook('quota', $quota);
 
-        unset($quota['abort']);
         $quota_result = (array) $quota;
         $quota_result['type'] = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : '';
 
@@ -1697,7 +1696,39 @@
                 $quota_result['width'] = $attrib['width'];
             }
             if ($attrib['height']) {
-                $quota_result['height']	= $attrib['height'];
+                $quota_result['height'] = $attrib['height'];
+            }
+
+            // build a table of quota types/roots info
+            if (($root_cnt = count($quota_result['all'])) > 1 || count($quota_result['all'][key($quota_result['all'])]) > 1) {
+                $table = new html_table(array('cols' => 3, 'class' => 'quota-info'));
+
+                $table->add_header(null, self::Q($this->gettext('quotatype')));
+                $table->add_header(null, self::Q($this->gettext('quotatotal')));
+                $table->add_header(null, self::Q($this->gettext('quotaused')));
+
+                foreach ($quota_result['all'] as $root => $data) {
+                    if ($root_cnt > 1 && $root) {
+                        $table->add(array('colspan' => 3, 'class' => 'root'), self::Q($root));
+                    }
+
+                    if ($storage = $data['storage']) {
+                        $percent = min(100, round(($storage['used']/max(1,$storage['total']))*100));
+
+                        $table->add('name', self::Q($this->gettext('quotastorage')));
+                        $table->add(null, $this->show_bytes($storage['total'] * 1024));
+                        $table->add(null, sprintf('%s (%.0f%%)', $this->show_bytes($storage['used'] * 1024), $percent));
+                    }
+                    if ($message = $data['message']) {
+                        $percent = min(100, round(($message['used']/max(1,$message['total']))*100));
+
+                        $table->add('name', self::Q($this->gettext('quotamessage')));
+                        $table->add(null, intval($message['total']));
+                        $table->add(null, sprintf('%d (%.0f%%)', $message['used'], $percent));
+                    }
+                }
+
+                $quota_result['table'] = $table->show();
             }
         }
         else {
@@ -1706,6 +1737,12 @@
             $quota_result['percent'] = 0;
         }
 
+        // cleanup
+        unset($quota_result['abort']);
+        if (empty($quota_result['table'])) {
+            unset($quota_result['all']);
+        }
+
         return $quota_result;
     }
 

--
Gitblit v1.9.1