diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js
index 1b2fc6cb..e7bd0662 100644
--- a/plugins/kolab_files/kolab_files.js
+++ b/plugins/kolab_files/kolab_files.js
@@ -69,8 +69,8 @@ window.rcmail && rcmail.addEventListener('init', function() {
/*
rcmail.file_list.addEventListener('dragstart', function(o){ p.drag_start(o); });
rcmail.file_list.addEventListener('dragmove', function(e){ p.drag_move(e); });
- rcmail.file_list.addEventListener('dragend', function(e){ p.drag_end(e); });
*/
+ rcmail.file_list.addEventListener('dragend', function(e){ kolab_files_drag_end(e); });
rcmail.file_list.addEventListener('column_replace', function(e){ kolab_files_set_coltypes(e); });
rcmail.file_list.addEventListener('listupdate', function(e){ rcmail.triggerEvent('listupdate', e); });
@@ -356,6 +356,17 @@ kolab_files_list_select = function(list)
// rcmail.select_all_mode = false;
};
+kolab_files_drag_end = function()
+{
+ var folder = $('#files-folder-list li.droptarget').removeClass('droptarget');
+
+ if (folder.length) {
+ folder = folder.data('folder');
+
+ file_api.file_move(kolab_files_selected(), folder);
+ }
+};
+
kolab_files_selected = function()
{
var files = [];
@@ -369,6 +380,11 @@ kolab_files_selected = function()
return files;
};
+
+/***********************************************************/
+/********** Commands **********/
+/***********************************************************/
+
rcube_webmail.prototype.files_sort = function(props)
{
var params = {},
@@ -507,7 +523,7 @@ function kolab_files_ui()
$.each(this.env.folders, function(i, f) {
var row = $('
');
- row.attr('id', f.id)
+ row.attr('id', f.id).data('folder', i)
.append($('').text(f.name))
.click(function() { file_api.folder_select(i); });
@@ -516,6 +532,15 @@ function kolab_files_ui()
if (f.virtual)
row.addClass('virtual');
+ else
+ row.mouseenter(function() {
+ if (rcmail.file_list.drag_active)
+ $(this).addClass('droptarget');
+ })
+ .mouseleave(function() {
+ if (rcmail.file_list.drag_active)
+ $(this).removeClass('droptarget');
+ });
list.append(row);
@@ -545,6 +570,46 @@ function kolab_files_ui()
this.file_list();
};
+ // folder create request
+ this.folder_create = function(folder)
+ {
+ this.req = this.set_busy(true, 'kolab_files.foldercreating');
+ this.get('folder_create', {folder: folder}, 'folder_create_response');
+ };
+
+ // folder create response handler
+ this.folder_create_response = function(response)
+ {
+ if (!this.response(response))
+ return;
+
+ this.display_message('kolab_files.foldercreatenotice', 'confirmation');
+
+ // refresh folders list
+ this.folder_list();
+ };
+
+ // folder delete request
+ this.folder_delete = function(folder)
+ {
+ this.req = this.set_busy(true, 'kolab_files.folderdeleting');
+ this.get('folder_delete', {folder: folder}, 'folder_delete_response');
+ };
+
+ // folder delete response handler
+ this.folder_delete_response = function(response)
+ {
+ if (!this.response(response))
+ return;
+
+ this.env.folder = null;
+ rcmail.enable_command('files-folder-delete', 'files-folder-rename', false);
+ this.display_message('kolab_files.folderdeletenotice', 'confirmation');
+
+ // refresh folders list
+ this.folder_list();
+ };
+
this.file_list = function(params)
{
if (!this.env.folder || !rcmail.gui_objects.filelist)
@@ -622,46 +687,6 @@ function kolab_files_ui()
$(row).addClass('selected');
};
- // folder create request
- this.folder_create = function(folder)
- {
- this.req = this.set_busy(true, 'kolab_files.foldercreating');
- this.get('folder_create', {folder: folder}, 'folder_create_response');
- };
-
- // folder create response handler
- this.folder_create_response = function(response)
- {
- if (!this.response(response))
- return;
-
- this.display_message('kolab_files.foldercreatenotice', 'confirmation');
-
- // refresh folders list
- this.folder_list();
- };
-
- // folder delete request
- this.folder_delete = function(folder)
- {
- this.req = this.set_busy(true, 'kolab_files.folderdeleting');
- this.get('folder_delete', {folder: folder}, 'folder_delete_response');
- };
-
- // folder delete response handler
- this.folder_delete_response = function(response)
- {
- if (!this.response(response))
- return;
-
- this.env.folder = null;
- rcmail.enable_command('files-folder-delete', 'files-folder-rename', false);
- this.display_message('kolab_files.folderdeletenotice', 'confirmation');
-
- // refresh folders list
- this.folder_list();
- };
-
this.file_search = function(value)
{
if (value) {
@@ -708,6 +733,31 @@ function kolab_files_ui()
this.file_list();
};
+ // file(s) move request
+ this.file_move = function(files, folder)
+ {
+ if (!files || !files.length || !folder)
+ return;
+
+ var list = {};
+ $.each(files, function(i, v) {
+ list[v] = folder + file_api.env.directory_separator + file_api.file_name(v);
+ });
+
+ this.req = this.set_busy(true, 'kolab_files.filemoving');
+ this.get('file_move', {file: list}, 'file_move_response');
+ };
+
+ // file(s) move response handler
+ this.file_move_response = function(response)
+ {
+ if (!this.response(response))
+ return;
+
+ this.display_message('kolab_files.filemovenotice', 'confirmation');
+ this.file_list();
+ };
+
// file upload request
this.file_upload = function(form)
{
diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php
index 2e109abc..4a87080e 100644
--- a/plugins/kolab_files/lib/kolab_files_engine.php
+++ b/plugins/kolab_files/lib/kolab_files_engine.php
@@ -462,7 +462,8 @@ class kolab_files_engine
$this->rc->output->add_label('deletefolderconfirm', 'kolab_files.folderdeleting',
'kolab_files.foldercreating', 'kolab_files.uploading', 'kolab_files.filedeleteconfirm',
- 'kolab_files.folderdeleteconfirm', 'kolab_files.filedeleting');
+ 'kolab_files.folderdeleteconfirm', 'kolab_files.filedeleting', 'kolab_files.filedeletenotice',
+ 'kolab_files.filemoving', 'kolab_files.filemovenotice');
$this->rc->output->set_pagetitle($this->plugin->gettext('files'));
$this->rc->output->send('kolab_files.files');
diff --git a/plugins/kolab_files/localization/en_US.inc b/plugins/kolab_files/localization/en_US.inc
index e453f5e6..f657cb56 100644
--- a/plugins/kolab_files/localization/en_US.inc
+++ b/plugins/kolab_files/localization/en_US.inc
@@ -33,8 +33,10 @@ $labels['foldercreatenotice'] = 'Folder created successfully.';
$labels['saveallnotice'] = 'Successfully saved $n file(s).';
$labels['saveallerror'] = 'Saving $n file(s) failed.';
$labels['attacherror'] = 'Failed to attach file(s) from the cloud';
+$labels['filemoving'] = 'Moving file(s)...';
$labels['filedeleting'] = 'Deleting file(s)...';
$labels['filedeleteconfirm'] = 'Are you sure you want to delete selected files?';
$labels['filedeletenotice'] = 'File(s) deleted successfully.';
+$labels['filemovenotice'] = 'File(s) moved successfully.';
?>