X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fcompose.php;h=90d6ff38cf751e3596dbe9cbd64025cf3566d8af;hp=b10cfc870e5154d8e2f042e367dd9a00b6c90128;hb=21f3c131eb4c0c70d76ceb3f52dd74f89fcf32e5;hpb=da95c4b66975b8010d8da095318ac9e1fce29e1d diff --git a/src/compose.php b/src/compose.php index b10cfc87..90d6ff38 100644 --- a/src/compose.php +++ b/src/compose.php @@ -25,6 +25,41 @@ require_once('../functions/smtp.php'); require_once('../functions/display_messages.php'); require_once('../functions/plugin.php'); +/* --------------------- Specific Functions ------------------------------ */ + + + +/** + * Does the opposite of sqWordWrap() + */ +function sqUnWordWrap(&$body) { + $lines = explode("\n", $body); + $body = ''; + $PreviousSpaces = ''; + for ($i = 0; $i < count($lines); $i ++) { + ereg("^([\t >]*)([^\t >].*)?$", $lines[$i], $regs); + $CurrentSpaces = $regs[1]; + if (isset($regs[2])) { + $CurrentRest = $regs[2]; + } + + if ($i == 0) { + $PreviousSpaces = $CurrentSpaces; + $body = $lines[$i]; + } else if (($PreviousSpaces == $CurrentSpaces) /* Do the beginnings match */ + && (strlen($lines[$i - 1]) > 65) /* Over 65 characters long */ + && strlen($CurrentRest)) { /* and there's a line to continue with */ + $body .= ' ' . $CurrentRest; + } else { + $body .= "\n" . $lines[$i]; + $PreviousSpaces = $CurrentSpaces; + } + } + $body .= "\n"; +} + +/* ----------------------------------------------------------------------- */ + if (!isset($attachments)) { $attachments = array(); session_register('attachments'); @@ -52,7 +87,10 @@ if (isset($draft)) { if (! isset($MDN)) { $MDN = 'False'; } - if (!saveMessageAsDraft($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id, $MDN)) { + if (! isset($mailprio)) { + $mailprio = ''; + } + if (!saveMessageAsDraft($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id, $mailprio, $session)) { showInputForm($session); exit(); } else { @@ -104,8 +142,7 @@ if (isset($send)) { /* * Rewrap $body so that no line is bigger than $editor_size * This should only really kick in the sqWordWrap function - * if the browser doesn't support "HARD" as the wrap type - * Or, in Opera's case, something goes wrong. + * if the browser doesn't support "VIRTUAL" as the wrap type. */ $body = explode("\n", $body); $newBody = ''; @@ -116,8 +153,8 @@ if (isset($send)) { if (strlen($line) <= $editor_size + 1) { $newBody .= $line . "\n"; } else { - sqWordWrap($line, $editor_size) . "\n"; - $newBody .= $line; + sqWordWrap($line, $editor_size); + $newBody .= $line . "\n"; } } $body = $newBody; @@ -322,11 +359,14 @@ exit(); function newMail () { global $forward_id, $imapConnection, $msg, $ent_num, $body_ary, $body, $reply_id, $send_to, $send_to_cc, $mailbox, $send_to_bcc, $editor_size, - $draft_id, $use_signature, $composesession; + $draft_id, $use_signature, $composesession, $forward_cc; $send_to = decodeHeader($send_to, false); $send_to_cc = decodeHeader($send_to_cc, false); $send_to_bcc = decodeHeader($send_to_bcc, false); + $send_to = str_replace('<', '<', str_replace('>', '>', str_replace('&', '&', str_replace('"', '"', $send_to)))); + $send_to_cc = str_replace('<', '<', str_replace('>', '>', str_replace('&', '&', str_replace('"', '"', $send_to_cc)))); + $send_to_bcc = str_replace('<', '<', str_replace('>', '>', str_replace('&', '&', str_replace('"', '"', $send_to_bcc)))); if ($forward_id) { $id = $forward_id; @@ -366,6 +406,21 @@ function newMail () { } sqUnWordWrap($body); + + /* this corrects some wrapping/quoting problems on replies */ + if ($reply_id) { + $rewrap_body = explode("\n", $body); + for ($i=0;$i+)/", $rewrap_body[$i], $matches)) { + $gt = $matches[1]; + $rewrap_body[$i] = str_replace("\n", "\n$gt ", $rewrap_body[$i]); + } + $rewrap_body[$i] .= "\n"; + } + $body = implode("", $rewrap_body); + } + $body_ary = explode("\n", $body); $i = count($body_ary) - 1; while ($i >= 0 && ereg("^[>\\s]*$", $body_ary[$i])) { @@ -375,14 +430,14 @@ function newMail () { $body = ''; for ($i=0; isset($body_ary[$i]); $i++) { if ($reply_id) { - if (ereg('^[ >]+', $body_ary[$i])) { + if (preg_match("/^(>){1,}/", $body_ary[$i])) { $body_ary[$i] = '>' . $body_ary[$i]; } else { $body_ary[$i] = '> ' . $body_ary[$i]; } } - if (!$draft_id) { - sqWordWrap($body_ary[$i], $editor_size - 1); + if ($draft_id) { + sqWordWrap($body_ary[$i], $editor_size ); } $body .= $body_ary[$i] . "\n"; unset($body_ary[$i]); @@ -399,6 +454,14 @@ function newMail () { $bodyTop .= ' ' . $orig_header->to[$x] . "\n"; } } + if (isset($forward_cc) && $forward_cc) { + $bodyTop .= _("Cc") . ': ' . $orig_header->cc[0] . "\n"; + if (count($orig_header->cc) > 1) { + for ($x = 1; $x < count($orig_header->cc); $x++) { + $bodyTop .= ' ' . $orig_header->cc[$x] . "\n"; + } + } + } $bodyTop .= "\n"; $body = $bodyTop . $body; } @@ -509,7 +572,7 @@ function showInputForm ($session) { $from_htmladdr_search, $location_of_buttons, $attachment_dir, $username, $data_dir, $identity, $draft_id, $delete_draft, $mailprio, $default_use_mdn, $mdn_user_support, $compose_new_win, - $saved_draft, $mail_sent; + $saved_draft, $mail_sent, $sig_first, $edit_as_new; $subject = decodeHeader($subject, false); $reply_subj = decodeHeader($reply_subj, false); @@ -533,7 +596,7 @@ function showInputForm ($session) { echo ">\n"; - if (isset($draft_id)) { + if (isset($draft_id) && !$edit_as_new) { echo '\n"; } if (isset($delete_draft)) { @@ -551,6 +614,7 @@ function showInputForm ($session) { } echo '' . "\n"; if ($compose_new_win == '1') { + echo '
'."\n"; echo ' '."\n"; } if ($location_of_buttons == 'top') { @@ -642,13 +706,30 @@ function showInputForm ($session) { if ($location_of_buttons == 'between') { showComposeButtonRow(); } - - echo ' ' . "\n" . - ' ' . "\n" . @@ -679,12 +760,12 @@ function showInputForm ($session) { ' ' . '
' . "\n" . - '   
' . "\n" . '
'; foreach ($attachments as $key => $info) { - if ($info['session'] == $session) { - $attached_file = "$hashed_attachment_dir/$info[localfilename]"; - echo '\n" . - $info['remotefilename'] . ' - ' . $info['type'] . ' (' . - show_readable_size(filesize($attached_file)) . ")
\n"; - } + if ($info['session'] == $session) { + $attached_file = "$hashed_attachment_dir/$info[localfilename]"; + echo '\n" . + $info['remotefilename'] . ' - ' . $info['type'] . ' (' . + show_readable_size( filesize( $attached_file ) ) . ")
\n"; + } } echo '' . "\n"; if ($reply_id) { echo ''. _("On read"). - ' '. _("On Delivery"); + ''. _("On read"). + ' '. _("On Delivery"); } } @@ -811,15 +897,18 @@ function ClearAttachments($session) $hashed_attachment_dir = getHashedDir($username, $attachment_dir); $rem_attachments = array(); - foreach ($attachments as $info) { - if ($info['session'] == $session) { - $attached_file = "$hashed_attachment_dir/$info[localfilename]"; - if (file_exists($attached_file)) { - unlink($attached_file); - } - } else { - $rem_attachments[] = $info; - } + if (is_array($attachments)) { + foreach ($attachments as $info) { + if ($info['session'] == $session) { + $attached_file = "$hashed_attachment_dir/$info[localfilename]"; + if (file_exists($attached_file)) { + unlink($attached_file); + } + } + else { + $rem_attachments[] = $info; + } + } } $attachments = $rem_attachments; } @@ -862,7 +951,7 @@ function getReplyCitation($orig_from) $end = '">'; break; case 'user-defined': - $start = $reply_citation_start; + $start = $reply_citation_start . ' '; $end = $reply_citation_end; break; default: