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