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.'; ?>