summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--program/js/app.js51
-rw-r--r--program/steps/mail/compose.inc1
-rw-r--r--program/steps/mail/sendmail.inc13
4 files changed, 40 insertions, 26 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 1f1acd95f..d4eebef5a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
+- Fix order of attachments in sent mail (#1488423)
- Don't show product version on login screen (can be enabled by config)
- Renamed old default skin to 'classic'. Larry is the new default skin.
- Support connections to memcached socket file (#1488577)
diff --git a/program/js/app.js b/program/js/app.js
index e0f3b230d..afaebec9c 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -922,15 +922,9 @@ function rcube_webmail()
break;
case 'savedraft':
- var form = this.gui_objects.messageform, msgid;
-
// Reset the auto-save timer
clearTimeout(this.save_timer);
- // saving Drafts is disabled
- if (!form)
- break;
-
// compose form did not change
if (this.cmp_hash == this.compose_field_hash()) {
this.auto_save_start();
@@ -940,35 +934,17 @@ function rcube_webmail()
// re-set keep-alive timeout
this.start_keepalive();
- msgid = this.set_busy(true, 'savingmessage');
-
- form.target = "savetarget";
- form._draft.value = '1';
- form.action = this.add_url(form.action, '_unlock', msgid);
- form.submit();
+ this.submit_messageform(true);
break;
case 'send':
- if (!this.gui_objects.messageform)
- break;
-
if (!props.nocheck && !this.check_compose_input(command))
break;
// Reset the auto-save timer
clearTimeout(this.save_timer);
- // all checks passed, send message
- var lang = this.spellcheck_lang(),
- form = this.gui_objects.messageform,
- msgid = this.set_busy(true, 'sendingmessage');
-
- form.target = 'savetarget';
- form._draft.value = '';
- form.action = this.add_url(form.action, '_unlock', msgid);
- form.action = this.add_url(form.action, '_lang', lang);
- form.submit();
-
+ this.submit_messageform();
break;
case 'send-attachment':
@@ -3033,6 +3009,29 @@ function rcube_webmail()
.attr('autocomplete', 'off');
};
+ this.submit_messageform = function(draft)
+ {
+ var form = this.gui_objects.messageform;
+
+ if (!form)
+ return;
+
+ // all checks passed, send message
+ var msgid = this.set_busy(true, draft ? 'savingmessage' : 'sendingmessage'),
+ lang = this.spellcheck_lang(),
+ files = [];
+
+ // send files list
+ $('li', this.gui_objects.attachmentlist).each(function() { files.push(this.id.replace(/^rcmfile/, '')); });
+ $('input[name="_attachments"]', form).val(files.join());
+
+ form.target = 'savetarget';
+ form._draft.value = draft ? '1' : '';
+ form.action = this.add_url(form.action, '_unlock', msgid);
+ form.action = this.add_url(form.action, '_lang', lang);
+ form.submit();
+ };
+
this.compose_recipient_select = function(list)
{
this.enable_command('add-recipient', list.selection.length > 0);
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index e3f8f57a6..3935ec36a 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -1523,6 +1523,7 @@ function get_form_tags($attrib)
$hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $RCMAIL->task));
$hiddenfields->add(array('name' => '_action', 'value' => 'send'));
$hiddenfields->add(array('name' => '_id', 'value' => $COMPOSE['id']));
+ $hiddenfields->add(array('name' => '_attachments'));
$form_start = empty($attrib['form']) ? $RCMAIL->output->form_tag(array('name' => "form", 'method' => "post")) : '';
$form_start .= $hiddenfields->show();
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 4790d35e2..70f1af714 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -458,6 +458,19 @@ if ($isHtml) {
$message_body .= "\r\n</body></html>\r\n";
}
+// sort attachments to make sure the order is the same as in the UI (#1488423)
+$files = get_input_value('_attachments', RCUBE_INPUT_POST);
+if ($files) {
+ $files = explode(',', $files);
+ $files = array_flip($files);
+ foreach ($files as $idx => $val) {
+ $files[$idx] = $COMPOSE['attachments'][$idx];
+ unset($COMPOSE['attachments'][$idx]);
+ }
+
+ $COMPOSE['attachments'] = array_merge(array_filter($files), $COMPOSE['attachments']);
+}
+
// set line length for body wrapping
$LINE_LENGTH = $RCMAIL->config->get('line_length', 72);