plugins/kolab_files
Aleksander Machniak
machniak at kolabsys.com
Wed Jun 5 14:16:04 CEST 2013
plugins/kolab_files/kolab_files.js | 45 ++++++++++++++++++-
plugins/kolab_files/lib/kolab_files_engine.php | 45 +++++++++++++++++++
plugins/kolab_files/skins/larry/templates/files.html | 3 +
plugins/kolab_files/skins/larry/ui.js | 6 ++
4 files changed, 97 insertions(+), 2 deletions(-)
New commits:
commit aab2d91b1748dba76c1895430ea32c9bcf30af62
Author: Aleksander Machniak <machniak at kolabsys.com>
Date: Wed Jun 5 14:15:42 2013 +0200
Implemented quota for files
diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js
index f01a477..c39c910 100644
--- a/plugins/kolab_files/kolab_files.js
+++ b/plugins/kolab_files/kolab_files.js
@@ -632,6 +632,21 @@ rcube_webmail.prototype.files_open = function()
file_api.file_open(files[0], rcmail.env.viewer);
};
+rcube_webmail.prototype.files_set_quota = function(p)
+{
+ if (p.total) {
+ p.used *= 1024;
+ p.total *= 1024;
+ p.title = file_api.file_size(p.used) + ' / ' + file_api.file_size(p.total)
+ + ' (' + p.percent + '%)';
+ }
+
+ p.type = this.env.quota_type;
+
+ this.set_quota(p);
+};
+
+
/**********************************************************/
/********* Files API handler **********/
/**********************************************************/
@@ -769,6 +784,8 @@ function kolab_files_ui()
this.env.collection = null;
rcmail.command('files-list', {folder: folder});
}
+
+ this.quota();
};
this.folder_unselect = function()
@@ -778,6 +795,8 @@ function kolab_files_ui()
rcmail.enable_command('files-folder-delete', 'files-upload', false);
this.env.folder = null;
this.env.collection = null;
+
+ this.quota();
};
// folder create request
@@ -818,6 +837,23 @@ function kolab_files_ui()
// refresh folders list
this.folder_list();
+ this.quota();
+ };
+
+ // quota request
+ this.quota = function()
+ {
+ if (rcmail.env.files_quota)
+ this.request('quota', {folder: this.env.folder}, 'quota_response');
+ };
+
+ // quota response handler
+ this.quota_response = function(response)
+ {
+ if (!this.response(response))
+ return;
+
+ rcmail.files_set_quota(response.result);
};
this.file_list = function(params)
@@ -1090,8 +1126,10 @@ function kolab_files_ui()
// @TODO: reload files list in parent window
window.close();
}
- else
+ else {
this.file_list();
+ this.quota();
+ }
};
// file(s) move request
@@ -1164,8 +1202,10 @@ function kolab_files_ui()
if (response.result && response.result.already_exist && response.result.already_exist.length)
this.file_move_ask_user(response.result.already_exist);
- else
+ else {
this.display_message('kolab_files.filecopynotice', 'confirmation');
+ this.quota();
+ }
};
// when file move/copy operation returns file-exists error
@@ -1274,6 +1314,7 @@ function kolab_files_ui()
// refresh the list on upload success
if (file_api.response_parse(response))
file_api.file_list();
+ file_api.quota();
});
}
};
diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php
index f8b1bb8..246abb6 100644
--- a/plugins/kolab_files/lib/kolab_files_engine.php
+++ b/plugins/kolab_files/lib/kolab_files_engine.php
@@ -101,6 +101,7 @@ class kolab_files_engine
'folder-create-form' => array($this, 'folder_create_form'),
'file-search-form' => array($this, 'file_search_form'),
'filelist' => array($this, 'file_list'),
+ 'filequotadisplay' => array($this, 'quota_display'),
));
if ($this->rc->task != 'files') {
@@ -417,6 +418,48 @@ class kolab_files_engine
}
/**
+ * Template object for quota display
+ */
+ public function quota_display($attrib)
+ {
+ if (!$attrib['id']) {
+ $attrib['id'] = 'rcmquotadisplay';
+ }
+
+ $quota_type = !empty($attrib['display']) ? $attrib['display'] : 'text';
+
+ $this->rc->output->add_gui_object('quotadisplay', $attrib['id']);
+ $this->rc->output->set_env('quota_type', $quota_type);
+
+ // get quota
+ $token = $this->get_api_token();
+ $request = $this->get_request(array('method' => 'quota'), $token);
+
+ // send request to the API
+ try {
+ $response = $request->send();
+ $status = $response->getStatus();
+ $body = @json_decode($response->getBody(), true);
+
+ if ($status == 200 && $body['status'] == 'OK') {
+ $quota = $body['result'];
+ }
+ else {
+ throw new Exception($body['reason']);
+ }
+ }
+ catch (Exception $e) {
+ $quota = array('total' => 0, 'percent' => 0);
+ }
+
+ $quota = rcube_output::json_serialize($quota);
+
+ $this->rc->output->add_script(rcmail_output::JS_OBJECT_NAME . ".files_set_quota($quota);", 'docready');
+
+ return html::span($attrib, '');
+ }
+
+ /**
* Get API token for current user session, authenticate if needed
*/
public function get_api_token()
@@ -463,6 +506,7 @@ class kolab_files_engine
if ($token) {
$_SESSION['kolab_files_token'] = $token;
$_SESSION['kolab_files_time'] = time();
+ $_SESSION['kolab_files_caps'] = $body['result']['capabilities'];
}
}
else {
@@ -542,6 +586,7 @@ class kolab_files_engine
$this->rc->output->set_pagetitle($this->plugin->gettext('files'));
$this->rc->output->set_env('file_mimetypes', $this->get_mimetypes());
+ $this->rc->output->set_env('files_quota', $_SESSION['kolab_files_caps']['QUOTA']);
$this->rc->output->send('kolab_files.files');
}
diff --git a/plugins/kolab_files/skins/larry/templates/files.html b/plugins/kolab_files/skins/larry/templates/files.html
index 13f6619..fc45ca9 100644
--- a/plugins/kolab_files/skins/larry/templates/files.html
+++ b/plugins/kolab_files/skins/larry/templates/files.html
@@ -31,6 +31,9 @@
</div>
<div id="folderlist-footer" class="boxfooter">
<roundcube:button name="folder-create" type="link" title="kolab_files.foldercreate" class="listbutton add" classAct="listbutton add" innerClass="inner" content="+" onclick="kolab_files_folder_create_dialog()" /><roundcube:button name="folderoptions" id="folderoptionslink" type="link" title="moreactions" class="listbutton groupactions" onclick="UI.show_popup('folderoptions', undefined, {above: 1});return false" innerClass="inner" content="⚙" />
+ <roundcube:if condition="env:files_quota" />
+ <roundcube:object name="filequotadisplay" id="quotadisplay" class="countdisplay" display="text" />
+ <roundcube:endif />
</div>
</div>
diff --git a/plugins/kolab_files/skins/larry/ui.js b/plugins/kolab_files/skins/larry/ui.js
index 954e5b5..374e79e 100644
--- a/plugins/kolab_files/skins/larry/ui.js
+++ b/plugins/kolab_files/skins/larry/ui.js
@@ -10,6 +10,7 @@ function kolab_files_ui_init()
$(document).ready(function() {
rcmail.addEventListener('menu-open', kolab_files_show_listoptions);
rcmail.addEventListener('menu-save', kolab_files_save_listoptions);
+ rcmail.addEventListener('setquota', kolab_files_update_quota);
var menu = $('#dragfilemenu');
if (menu.length) {
@@ -27,6 +28,11 @@ function kolab_files_ui_init()
kolab_files_upload_input('#filestoolbar a.upload');
};
+function kolab_files_update_quota(p)
+{
+ return UI.update_quota(p);
+}
+
function kolab_files_show_listoptions()
{
var $dialog = $('#listoptions');
More information about the commits
mailing list