summaryrefslogtreecommitdiff
path: root/program/steps/mail
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2008-09-06 16:41:43 +0000
committerthomascube <thomas@roundcube.net>2008-09-06 16:41:43 +0000
commitccd63c5591d56e9dcb43ddc5171b4b54dda08c42 (patch)
tree7c867e9cad3ae5a30ee4a0c5e8ce92264c371d19 /program/steps/mail
parent7f22f297acb9de8a9b1bc0d22d1e9a07cb6177e6 (diff)
Don't wrap worwarded text; better wrap reply message text
Diffstat (limited to 'program/steps/mail')
-rw-r--r--program/steps/mail/compose.inc7
-rw-r--r--program/steps/mail/func.inc48
2 files changed, 47 insertions, 8 deletions
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 783ac98ef..0a5226e66 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -32,7 +32,7 @@ if ($RCMAIL->action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_
if (is_array($_SESSION['compose']['attachments'][$id]))
{
@unlink($_SESSION['compose']['attachments'][$id]['path']);
- $_SESSION['compose']['attachments'][$id] = NULL;
+ unset($_SESSION['compose']['attachments'][$id]);
$OUTPUT->command('remove_from_attachment_list', "rcmfile$id");
$OUTPUT->send();
exit;
@@ -478,7 +478,7 @@ function rcmail_create_reply_body($body, $bodyIsHtml)
if (! $bodyIsHtml)
{
// soft-wrap message first
- $body = wordwrap($body, 75);
+ $body = rcmail_wrap_quoted($body, 75);
// split body into single lines
$a_lines = preg_split('/\r?\n/', $body);
@@ -526,9 +526,6 @@ function rcmail_create_forward_body($body, $bodyIsHtml)
if (!$bodyIsHtml)
{
- // soft-wrap message first
- $body = wordwrap($body, 80);
-
$prefix = sprintf("\n\n\n-------- Original Message --------\nSubject: %s\nDate: %s\nFrom: %s\nTo: %s\n\n",
$MESSAGE->subject,
$MESSAGE->headers->date,
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index e10843bd3..54abb24fe 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -642,9 +642,6 @@ function rcmail_print_body($part, $p = array())
$convert_patterns[] = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/ie';
$convert_replaces[] = "rcmail_str_replacement('<a href=\"mailto:\\1\" onclick=\"return ".JS_OBJECT_NAME.".command(\'compose\',\'\\1\',this)\">\\1</a>', \$replace_strings)";
-// if ($part->ctype_parameters['format'] != 'flowed')
-// $body = wordwrap(trim($body), 80);
-
// search for patterns like links and e-mail addresses
$body = preg_replace($convert_patterns, $convert_replaces, $body);
@@ -1013,6 +1010,51 @@ function rcmail_address_string($input, $max=null, $linked=false, $addicon=null)
}
+/**
+ * Wrap text to a given number of characters per line
+ * but respect the mail quotation of replies messages (>)
+ *
+ * @param string Text to wrap
+ * @param int The line width
+ * @return string The wrapped text
+ */
+function rcmail_wrap_quoted($text, $max = 76)
+{
+ // Rebuild the message body with a maximum of $max chars, while keeping quoted message.
+ $lines = preg_split('/\r?\n/', trim($text));
+ $out = '';
+
+ foreach ($lines as $line) {
+ if (strlen($line) > $max) {
+ if (preg_match('/^([>\s]+)/', $line, $regs)) {
+ $length = strlen($regs[0]);
+ $prefix = substr($line, 0, $length);
+
+ // Remove '> ' from the line, then wordwrap() the line
+ $line = wordwrap(substr($line, $length), $max - $length);
+
+ // Rebuild the line with '> ' at the beginning of each 'subline'
+ $newline = '';
+ foreach (explode("\n", $line) as $l) {
+ $newline .= $prefix . $l . "\n";
+ }
+
+ // Remove the righest newline char
+ $line = rtrim($newline);
+ }
+ else {
+ $line = wordwrap($line, $max);
+ }
+ }
+
+ // Append the line
+ $out .= $line . "\n";
+ }
+
+ return $out;
+}
+
+
function rcmail_message_part_controls()
{
global $MESSAGE;