Aleksander Machniak
2016-02-24 b0a8e3693090bd96fc31c4c5f42b77f8fddf9b90
Fix handling of body parameter in mail compose request
4 files modified
31 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/js/app.js 2 ●●● patch | view | raw | blame | history
program/js/editor.js 16 ●●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 12 ●●●● patch | view | raw | blame | history
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
----------------
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
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();
        }
      }
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) {