From b620493a4bfdfdabc055b7d8cffa4af432e96977 Mon Sep 17 00:00:00 2001 From: alecpl Date: Fri, 5 Feb 2010 11:35:11 +0000 Subject: - Fix quoted text wrapping when replying to an HTML email in plain text (#1484141) --- program/steps/mail/compose.inc | 25 +++++++++++++++++++------ program/steps/mail/sendmail.inc | 7 +++++-- 2 files changed, 24 insertions(+), 8 deletions(-) (limited to 'program/steps/mail') diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 6fcdf435c..fd3e862c2 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -128,11 +128,14 @@ else if ($config_show_sig == 3 && ($compose_mode == RCUBE_COMPOSE_REPLY || $comp else $OUTPUT->set_env('show_sig', false); +// set line length for body wrapping +$LINE_LENGTH = $RCMAIL->config->get('line_length', 75); + if (!empty($msg_uid)) { // similar as in program/steps/mail/show.inc // re-set 'prefer_html' to have possibility to use html part for compose - $CONFIG['prefer_html'] = $CONFIG['htmleditor'] || $compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT; + $CONFIG['prefer_html'] = $CONFIG['prefer_html'] || $CONFIG['htmleditor'] || $compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT; $MESSAGE = new rcube_message($msg_uid); if (!empty($MESSAGE->headers->charset)) @@ -395,7 +398,7 @@ function rcmail_compose_header_from($attrib) function rcmail_compose_body($attrib) { - global $RCMAIL, $CONFIG, $OUTPUT, $MESSAGE, $compose_mode; + global $RCMAIL, $CONFIG, $OUTPUT, $MESSAGE, $compose_mode, $LINE_LENGTH; list($form_start, $form_end) = get_form_tags($attrib); unset($attrib['form']); @@ -424,11 +427,21 @@ function rcmail_compose_body($attrib) } else if ($compose_mode) { - if (($isHtml || $compose_mode == RCUBE_COMPOSE_DRAFT) && $MESSAGE->has_html_part()) + $has_html_part = $MESSAGE->has_html_part(); + if (($isHtml || $compose_mode == RCUBE_COMPOSE_DRAFT) && $has_html_part) { $body = $MESSAGE->first_html_part(); $isHtml = true; } + else if ($has_html_part) + { + // use html part if it has been used for message (pre)viewing + // decrease line length for quoting + $len = $compose_mode == RCUBE_COMPOSE_REPLY ? $LINE_LENGTH-2 : $LINE_LENGTH; + $txt = new html2text($MESSAGE->first_html_part(), false, true, $len); + $body = $txt->get_text(); + $isHtml = false; + } else { $body = $MESSAGE->first_text_part(); @@ -522,7 +535,7 @@ function rcmail_compose_body($attrib) function rcmail_create_reply_body($body, $bodyIsHtml) { - global $RCMAIL, $MESSAGE; + global $RCMAIL, $MESSAGE, $LINE_LENGTH; if (!$bodyIsHtml) { // try to remove the signature @@ -532,7 +545,7 @@ function rcmail_create_reply_body($body, $bodyIsHtml) } // soft-wrap message first - $body = rcmail_wrap_quoted($body, 75); + $body = rcmail_wrap_quoted($body, $LINE_LENGTH); $body = rtrim($body, "\r\n"); @@ -554,7 +567,7 @@ function rcmail_create_reply_body($body, $bodyIsHtml) // add title line(s) $prefix = rc_wordwrap(sprintf("On %s, %s wrote:\n", $MESSAGE->headers->date, - $MESSAGE->get_header('from')), 76); + $MESSAGE->get_header('from')), $LINE_LENGTH); $suffix = ''; diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index 589c9af7f..724feb80c 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -357,6 +357,9 @@ if (!$savedraft) { } } +// set line length for body wrapping +$LINE_LENGTH = $RCMAIL->config->get('line_length', 75); + // create extended PEAR::Mail_mime instance $MAIL_MIME = new rcube_mail_mime($RCMAIL->config->header_delimiter()); @@ -369,7 +372,7 @@ if ($isHtml) { // add a plain text version of the e-mail as an alternative part. $h2t = new html2text($plugin['body'], false, true, 0); - $plainTextPart = rc_wordwrap($h2t->get_text(), 75, "\r\n") . ($footer ? "\r\n".$footer : ''); + $plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n") . ($footer ? "\r\n".$footer : ''); $plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true); if (!strlen($plainTextPart)) { // empty message body breaks attachment handling in drafts @@ -383,7 +386,7 @@ if ($isHtml) { } else { - $message_body = rc_wordwrap($message_body, 75, "\r\n"); + $message_body = rc_wordwrap($message_body, $LINE_LENGTH, "\r\n"); if ($footer) $message_body .= "\r\n" . $footer; $message_body = wordwrap($message_body, 998, "\r\n", true); -- cgit v1.2.3