From b0a8e3693090bd96fc31c4c5f42b77f8fddf9b90 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Wed, 24 Feb 2016 05:18:09 -0500 Subject: [PATCH] Fix handling of body parameter in mail compose request --- CHANGELOG | 1 + program/steps/mail/compose.inc | 12 ++++++++++-- program/js/editor.js | 16 +++++++++------- program/js/app.js | 2 +- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 44ada7c..b221ce5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,6 +24,7 @@ - Plugin API: Added addressbook_export hook - Fix additional_message_headers plugin compatibility with Mail_Mime >= 1.9 (#1490657) - Hide DSN option in Preferences when smtp_server is not used (#1490666) +- Fix handling of body parameter in mail compose request RELEASE 1.2-beta ---------------- diff --git a/program/js/app.js b/program/js/app.js index 3199ee4..36b6d1d 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3967,7 +3967,7 @@ } if (!html_mode) { - pos = this.env.top_posting ? 0 : input_message.value.length; + pos = this.env.top_posting && this.env.compose_mode ? 0 : input_message.value.length; // add signature according to selected identity // if we have HTML editor, signature is added in a callback diff --git a/program/js/editor.js b/program/js/editor.js index 200d8c8..17eee6b 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -513,10 +513,10 @@ message = message.substring(0, p) + sig + message.substring(p, message.length); cursor_pos = p - 1; } - // empty message - else if (!message) { - message = '\n\n' + sig; - cursor_pos = 0; + // empty message or new-message mode + else if (!message || !rcmail.env.compose_mode) { + cursor_pos = message.length; + message += '\n\n' + sig; } else if (rcmail.env.top_posting && !rcmail.env.sig_below) { // at cursor position @@ -555,8 +555,10 @@ sigElem = $('<div id="_rc_sig"></div>').get(0); // insert at start or at cursor position in top-posting mode - // (but not if the content is empty) - if (rcmail.env.top_posting && !rcmail.env.sig_below && (body.childNodes.length > 1 || $(body).text())) { + // (but not if the content is empty and not in new-message mode) + if (rcmail.env.top_posting && !rcmail.env.sig_below + && rcmail.env.compose_mode && (body.childNodes.length > 1 || $(body).text()) + ) { this.editor.getWin().focus(); // correct focus in IE & Chrome var node = this.editor.selection.getNode(); @@ -566,7 +568,7 @@ } else { body.appendChild(sigElem); - position_element = rcmail.env.top_posting ? body.firstChild : $(sigElem).prev(); + position_element = rcmail.env.top_posting && rcmail.env.compose_mode ? body.firstChild : $(sigElem).prev(); } } diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 48aef76..0fb6140 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -359,7 +359,12 @@ // clean HTML message body which can be submitted by URL if (!empty($COMPOSE['param']['body'])) { - $COMPOSE['param']['body'] = rcmail_wash_html($COMPOSE['param']['body'], array('safe' => false, 'inline_html' => true), array()); + if ($COMPOSE['param']['html'] = strpos($COMPOSE['param']['body'], '<') !== false) { + $wash_params = array('safe' => false, 'inline_html' => true); + $COMPOSE['param']['body'] = rcmail_wash_html($COMPOSE['param']['body'], $wash_params, array()); + $COMPOSE['param']['body'] = preg_replace('/<!--[^>\n]+>/', '', $COMPOSE['param']['body']); + $COMPOSE['param']['body'] = preg_replace('/<\/?body>/', '', $COMPOSE['param']['body']); + } } $RCMAIL = rcmail::get_instance(); @@ -718,7 +723,10 @@ $html_editor = intval($RCMAIL->config->get('htmleditor')); $compose_mode = $COMPOSE['mode']; - if (isset($_POST['_is_html'])) { + if (is_bool($COMPOSE['param']['html'])) { + $useHtml = $COMPOSE['param']['html']; + } + else if (isset($_POST['_is_html'])) { $useHtml = !empty($_POST['_is_html']); } else if ($compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT) { -- Gitblit v1.9.1