From e73a2200e1fc09f309019a5056390a19f8e5859e Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 6 Mar 2013 12:58:39 +0100 Subject: [PATCH] Add per-attachment "Save as" dialog, css improvements --- plugins/kolab_files/kolab_files.js | 57 ++++++++++++++---- .../kolab_files/lib/kolab_files_engine.php | 36 ++++++++--- plugins/kolab_files/localization/en_US.inc | 2 + .../skins/larry/images/buttons.png | Bin 4719 -> 4790 bytes plugins/kolab_files/skins/larry/style.css | 23 ++++++- .../skins/larry/templates/message_plugin.html | 4 ++ 6 files changed, 103 insertions(+), 19 deletions(-) diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js index 451847c0..a1c72fa0 100644 --- a/plugins/kolab_files/kolab_files.js +++ b/plugins/kolab_files/kolab_files.js @@ -44,6 +44,8 @@ window.rcmail && rcmail.addEventListener('init', function() { .click(function() { kolab_directory_selector_dialog(); }) .appendTo(attachment_list); } + + rcmail.addEventListener('menu-open', kolab_files_attach_menu_open); } kolab_files_init(); @@ -118,18 +120,40 @@ function kolab_files_token() /********* Plugin functionality in other tasks **********/ /**********************************************************/ -function kolab_directory_selector_dialog() +function kolab_directory_selector_dialog(id) { - var dialog = $('#files-dialog'), buttons = {}; + var dialog = $('#files-dialog'), buttons = {}, + input = $('#file-save-as-input'), + form = $('#file-save-as'), + list = $('#folderlistbox'); + + // attachment is specified + if (id) { + var attach = $('#attach'+id), filename = attach.attr('title') || attach.text(); + form.show(); + dialog.addClass('saveas'); + input.val(filename); + } + else { + form.hide(); + dialog.removeClass('saveas'); + } buttons[rcmail.gettext('kolab_files.save')] = function () { - var lock = rcmail.set_busy(true, 'saving'); - rcmail.http_post('plugin.kolab_files', { - act: 'saveall', - source: rcmail.env.mailbox, - uid: rcmail.env.uid, - dest: file_api.env.folder - }, lock); + var lock = rcmail.set_busy(true, 'saving'), + request = { + act: 'save-file', + source: rcmail.env.mailbox, + uid: rcmail.env.uid, + dest: file_api.env.folder + }; + + if (id) { + request.id = id; + request.name = input.val(); + } + + rcmail.http_post('plugin.kolab_files', request, lock); $('#files-dialog').dialog('destroy').hide(); }; buttons[rcmail.gettext('kolab_files.cancel')] = function () { @@ -141,7 +165,7 @@ function kolab_directory_selector_dialog() modal: true, resizable: !bw.ie6, closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons - title: rcmail.gettext('kolab_files.saveall'), + title: rcmail.gettext('kolab_files.' + (id ? 'saveto' : 'saveall')), // close: function() { rcmail.dialog_close(); }, buttons: buttons, minWidth: 250, @@ -177,7 +201,7 @@ function kolab_files_selector_dialog() // send request rcmail.http_post('plugin.kolab_files', { - act: 'attach', + act: 'attach-file', folder: file_api.env.folder, files: list, id: rcmail.env.compose_id, @@ -211,6 +235,17 @@ function kolab_files_selector_dialog() rcmail.file_list.clear_selection(); }; +function kolab_files_attach_menu_open(p) +{ + if (!p || !p.props || p.props.menu != 'attachmentmenu') + return; + + var id = p.props.id; + + $('#attachmenusaveas').unbind('click').attr('onclick', '').click(function(e) { + return kolab_directory_selector_dialog(id); + }); +}; /***********************************************************/ /********** Main functionality **********/ diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php index 47b8299f..fa46ac8a 100644 --- a/plugins/kolab_files/lib/kolab_files_engine.php +++ b/plugins/kolab_files/lib/kolab_files_engine.php @@ -53,6 +53,19 @@ class kolab_files_engine } else if ($this->rc->action == 'show' || $this->rc->action == 'preview') { $template = 'message_plugin'; + + // add "Save as" button into attachment menu + $this->plugin->add_button(array( + 'id' => 'attachmenusaveas', + 'name' => 'attachmenusaveas', + 'type' => 'link', + 'wrapper' => 'li', + 'onclick' => 'return false', + 'class' => 'icon active saveas', + 'classact' => 'icon active saveas', + 'innerclass' => 'icon active saveas', + 'label' => 'kolab_files.saveto', + ), 'attachmentmenu'); } } else if ($this->rc->task == 'files') { @@ -495,11 +508,13 @@ class kolab_files_engine /** * Handler for "save all attachments into cloud" action */ - protected function action_saveall() + protected function action_save_file() { $source = rcube_utils::get_input_value('source', rcube_utils::INPUT_POST); $uid = rcube_utils::get_input_value('uid', rcube_utils::INPUT_POST); $dest = rcube_utils::get_input_value('dest', rcube_utils::INPUT_POST); + $id = rcube_utils::get_input_value('id', rcube_utils::INPUT_POST); + $name = rcube_utils::get_input_value('name', rcube_utils::INPUT_POST); $temp_dir = unslashify($this->rc->config->get('temp_dir')); $storage = $this->rc->get_storage(); @@ -508,18 +523,25 @@ class kolab_files_engine $url = $request->getUrl(); $files = array(); $errors = array(); + $attachments = array(); $request->setMethod(HTTP_Request2::METHOD_POST); $request->setHeader('X-Session-Token', $this->get_api_token()); $url->setQueryVariables(array('method' => 'file_create', 'folder' => $dest)); $request->setUrl($url); + foreach ($message->attachments as $attach_prop) { + if (empty($id) || $id == $attach_prop->mime_id) { + $filename = strlen($name) ? $name : rcmail_attachment_name($attach_prop, true); + $attachments[$filename] = $attach_prop; + } + } + // @TODO: handle error // @TODO: implement file upload using file URI instead of body upload - foreach ($message->attachments as $attach_prop) { - $filename = rcmail_attachment_name($attach_prop, true); - $path = tempnam($temp_dir, 'rcmAttmnt'); + foreach ($attachments as $attach_name => $attach_prop) { + $path = tempnam($temp_dir, 'rcmAttmnt'); // save attachment to file if ($fp = fopen($path, 'w+')) { @@ -539,13 +561,13 @@ class kolab_files_engine // send request to the API try { $request->setBody(''); - $request->addUpload('file[]', $path, $filename, $attach_prop->mimetype); + $request->addUpload('file[]', $path, $attach_name, $attach_prop->mimetype); $response = $request->send(); $status = $response->getStatus(); $body = @json_decode($response->getBody(), true); if ($status == 200 && $body['status'] == 'OK') { - $files[] = $filename; + $files[] = $attach_name; } else { throw new Exception($body['reason']); @@ -583,7 +605,7 @@ class kolab_files_engine /** * Handler for "add attachments from the cloud" action */ - protected function action_attach() + protected function action_attach_file() { $folder = rcube_utils::get_input_value('folder', rcube_utils::INPUT_POST); $files = rcube_utils::get_input_value('files', rcube_utils::INPUT_POST); diff --git a/plugins/kolab_files/localization/en_US.inc b/plugins/kolab_files/localization/en_US.inc index 20e4284c..2233f304 100644 --- a/plugins/kolab_files/localization/en_US.inc +++ b/plugins/kolab_files/localization/en_US.inc @@ -2,6 +2,8 @@ $labels['files'] = 'Files'; $labels['saveall'] = 'Save all to cloud...'; +$labels['saveto'] = 'Save to cloud...'; +$labels['saveas'] = 'Save as:'; $labels['save'] = 'Save'; $labels['cancel'] = 'Cancel'; $labels['fromcloud'] = 'From cloud...'; diff --git a/plugins/kolab_files/skins/larry/images/buttons.png b/plugins/kolab_files/skins/larry/images/buttons.png index 58c0a293aab46caea2010e014a96103f64bf22d7..661dbbcde2d9f42bd55862d9219f378bfff50782 100644 GIT binary patch literal 4790 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 literal 4719 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 X=adJ9-$S8Czkm#NO>|1M9B=#w#eR3x diff --git a/plugins/kolab_files/skins/larry/style.css b/plugins/kolab_files/skins/larry/style.css index 0a56dbdd..d4c86285 100644 --- a/plugins/kolab_files/skins/larry/style.css +++ b/plugins/kolab_files/skins/larry/style.css @@ -192,14 +192,18 @@ } #files-dialog #folderlistbox { - bottom: 5px; top: 5px; + bottom: 5px; left: 0; right: 0; width: auto; box-shadow: none; } +#files-dialog.saveas #folderlistbox { + top: 50px; +} + #files-compose-dialog #filelistcontainer { position: absolute; top: 45px; @@ -226,6 +230,10 @@ width: 15px; } +#files-compose-dialog .searchbox input { + background-color: white; +} + #files-compose-dialog #quicksearchbar { top: 10px; right: 5px; @@ -240,3 +248,16 @@ a.filesaveall { margin-top: .5em; padding: 3px 5px 4px 5px; } + +#file-save-as { + height: 25px; + white-space: nowrap; +} + +#file-save-as input { + width: 200px; +} + +ul.toolbarmenu li span.saveas { + background: url(images/buttons.png) -5px -180px no-repeat; +} diff --git a/plugins/kolab_files/skins/larry/templates/message_plugin.html b/plugins/kolab_files/skins/larry/templates/message_plugin.html index 50cf7cf6..08cb71a8 100644 --- a/plugins/kolab_files/skins/larry/templates/message_plugin.html +++ b/plugins/kolab_files/skins/larry/templates/message_plugin.html @@ -1,4 +1,8 @@
+
+ + +