X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fcompose.php;h=2e1ed4015a8090b7853e7f6e6b98c82812ce573b;hb=21366e951879b247d668a5ccac18afd6966608bc;hp=2c5317f434c8d85d19b53f56beed63450775379d;hpb=9bd3b1e61b35fd25ed9d724571004a80b9f8ab2c;p=squirrelmail.git diff --git a/src/compose.php b/src/compose.php index 2c5317f4..2e1ed401 100644 --- a/src/compose.php +++ b/src/compose.php @@ -3,7 +3,7 @@ /** * compose.php * - * Copyright (c) 1999-2003 The SquirrelMail Project Team + * Copyright (c) 1999-2004 The SquirrelMail Project Team * Licensed under the GNU GPL. For full terms see the file COPYING. * * This code sends a mail. @@ -32,6 +32,7 @@ require_once(SM_PATH . 'functions/display_messages.php'); require_once(SM_PATH . 'class/deliver/Deliver.class.php'); require_once(SM_PATH . 'functions/addressbook.php'); require_once(SM_PATH . 'functions/identity.php'); +require_once(SM_PATH . 'functions/forms.php'); /* --------------------- Get globals ------------------------------------- */ /** COOKIE VARS */ @@ -47,7 +48,6 @@ sqgetGlobalVar('composesession', $composesession, SQ_SESSION); sqgetGlobalVar('compose_messages', $compose_messages, SQ_SESSION); /** SESSION/POST/GET VARS */ -sqgetGlobalVar('smaction',$action); sqgetGlobalVar('session',$session); sqgetGlobalVar('mailbox',$mailbox); if(!sqgetGlobalVar('identity',$identity)) { @@ -91,6 +91,17 @@ if ( sqgetGlobalVar('return', $temp, SQ_POST) ) { /** GET VARS */ sqgetGlobalVar('attachedmessages', $attachedmessages, SQ_GET); +/** get smaction */ +if ( !sqgetGlobalVar('smaction',$action) ) +{ + if ( sqgetGlobalVar('smaction_reply',$tmp) ) $action = 'reply'; + if ( sqgetGlobalVar('smaction_reply_all',$tmp) ) $action = 'reply_all'; + if ( sqgetGlobalVar('smaction_forward',$tmp) ) $action = 'forward'; + if ( sqgetGlobalVar('smaction_attache',$tmp) ) $action = 'forward_as_attachment'; + if ( sqgetGlobalVar('smaction_draft',$tmp) ) $action = 'draft'; + if ( sqgetGlobalVar('smaction_edit_new',$tmp) ) $action = 'edit_as_new'; +} + /* Location (For HTTP 1.1 Header("Location: ...") redirects) */ $location = get_location(); /* Identities (fetch only once) */ @@ -144,7 +155,7 @@ function replyAllString($header) { return $url_replytoallcc; } -function getReplyCitation($orig_from) { +function getReplyCitation($orig_from, $orig_date) { global $reply_citation_style, $reply_citation_start, $reply_citation_end; $orig_from = decodeHeader($orig_from->getAddress(false),false,false,true); // $from = decodeHeader($orig_header->getAddr_s('from',"\n$indent"),false,false); @@ -168,6 +179,10 @@ function getReplyCitation($orig_from) { $start = '<' . _("quote") . ' ' . _("who") . '="'; $end = '">'; break; + case 'date_time_author': + $start = 'On ' . getLongDateString($orig_date) . ', '; + $end = ' ' . _("said") . ':'; + break; case 'user-defined': $start = $reply_citation_start . ($reply_citation_start == '' ? '' : ' '); @@ -623,17 +638,17 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $bodypart = $languages[$squirrelmail_language]['XTRA_CODE']('decode', $bodypart); } } - - if (isset($body_part_entity->header->parameters['charset'])) { + + if (isset($body_part_entity->header->parameters['charset'])) { $actual = $body_part_entity->header->parameters['charset']; } else { $actual = 'us-ascii'; } - if ( $actual && is_conversion_safe($actual) && $actual != $default_charset){ - $bodypart = charset_decode($actual,$bodypart); - } - + if ( $actual && is_conversion_safe($actual) && $actual != $default_charset){ + $bodypart = charset_decode($actual,$bodypart); + } + $body .= $bodypart; } if ($default_use_priority) { @@ -669,17 +684,17 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se if ($identity_match) { $identity = $identity_match; } - // we need identiy here fore draft case #845290 - // echo $identity."leer"; + // we need identiy here fore draft case #845290 + // echo $identity."leer"; } switch ($action) { case ('draft'): $use_signature = FALSE; $composeMessage->rfc822_header = $orig_header; - $send_to = decodeHeader($orig_header->getAddr_s('to'),false,true,true); - $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,true,true); - $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,true,true); + $send_to = decodeHeader($orig_header->getAddr_s('to'),false,false,true); + $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,false,true); + $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,false,true); $send_from = $orig_header->getAddr_s('from'); $send_from_parts = new AddressStructure(); $send_from_parts = $orig_header->parseAddress($send_from); @@ -693,7 +708,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se } } } - $subject = decodeHeader($orig_header->subject,false,true,true); + $subject = decodeHeader($orig_header->subject,false,false,true); // /* remember the references and in-reply-to headers in case of an reply */ $composeMessage->rfc822_header->more_headers['References'] = $orig_header->references; $composeMessage->rfc822_header->more_headers['In-Reply-To'] = $orig_header->in_reply_to; @@ -711,10 +726,10 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection); break; case ('edit_as_new'): - $send_to = decodeHeader($orig_header->getAddr_s('to'),false,true,true); - $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,true,true); - $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,true,true); - $subject = decodeHeader($orig_header->subject,false,true,true); + $send_to = decodeHeader($orig_header->getAddr_s('to'),false,false,true); + $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,false,true); + $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,false,true); + $subject = decodeHeader($orig_header->subject,false,false,true); $mailprio = $orig_header->priority; $orig_from = ''; $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection); @@ -722,14 +737,14 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se break; case ('forward'): $send_to = ''; - $subject = getforwardSubject(decodeHeader($orig_header->subject,false,true,true)); + $subject = getforwardSubject(decodeHeader($orig_header->subject,false,false,true)); $body = getforwardHeader($orig_header) . $body; sqUnWordWrap($body); $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection); $body = "\n" . $body; break; case ('forward_as_attachment'): - $subject = getforwardSubject(decodeHeader($orig_header->subject,false,true,true)); + $subject = getforwardSubject(decodeHeader($orig_header->subject,false,false,true)); $composeMessage = getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, $passed_ent_id, $imapConnection); $body = ''; break; @@ -738,7 +753,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $send_to = $orig_header->getAddr_s('mail_followup_to'); } else { $send_to_cc = replyAllString($orig_header); - $send_to_cc = decodeHeader($send_to_cc,false,true,true); + $send_to_cc = decodeHeader($send_to_cc,false,false,true); } case ('reply'): // skip this if send_to was already set right above here @@ -752,8 +767,8 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $send_to = $orig_header->getAddr_s('from'); } } - $send_to = decodeHeader($send_to,false,true,true); - $subject = decodeHeader($orig_header->subject,false,true,true); + $send_to = decodeHeader($send_to,false,false,true); + $subject = decodeHeader($orig_header->subject,false,false,true); $subject = str_replace('"', "'", $subject); $subject = trim($subject); if (substr(strtolower($subject), 0, 3) != 're:') { @@ -762,12 +777,12 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se /* this corrects some wrapping/quoting problems on replies */ $rewrap_body = explode("\n", $body); $from = (is_array($orig_header->from)) ? $orig_header->from[0] : $orig_header->from; - sqUnWordWrap($body); // unwrap and then reset it?! + sqUnWordWrap($body); // unwrap and then reset it?! $body = ''; $strip_sigs = getPref($data_dir, $username, 'strip_sigs'); foreach ($rewrap_body as $line) { if ($strip_sigs && substr($line,0,3) == '-- ') { - break; + break; } sqWordWrap($line, ($editor_size)); if (preg_match("/^(>+)/", $line, $matches)) { @@ -777,7 +792,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $body .= '> ' . str_replace("\n", "\n> ", rtrim($line)) . "\n"; } } - $body = getReplyCitation($from) . $body; + $body = getReplyCitation($from , $orig_header->date) . $body; $composeMessage->reply_rfc822_header = $orig_header; break; @@ -825,7 +840,7 @@ function getAttachments($message, &$composeMessage, $passed_id, $entities, $imap $filename = $message->getFilename(); break; } - $filename = str_replace(' ', ' ', decodeHeader($filename)); + $filename = str_replace(' ', ' ', decodeHeader($filename)); if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { $filename = $languages[$squirrelmail_language]['XTRA_CODE']('encode', $filename); @@ -838,7 +853,7 @@ function getAttachments($message, &$composeMessage, $passed_id, $entities, $imap } $message->att_local_name = $full_localfilename; - $composeMessage->initAttachment($message->type0.'/'.$message->type1,$filename, + $composeMessage->initAttachment($message->type0.'/'.$message->type1,$filename, $full_localfilename); /* Write Attachment to file */ @@ -858,17 +873,17 @@ function getAttachments($message, &$composeMessage, $passed_id, $entities, $imap function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, $passed_ent_id='', $imapConnection) { - global $attachments, $attachment_dir, $username, $data_dir, $uid_support; + global $attachments, $attachment_dir, $username, $data_dir; $hashed_attachment_dir = getHashedDir($username, $attachment_dir); if (!$passed_ent_id) { $body_a = sqimap_run_command($imapConnection, 'FETCH '.$passed_id.' RFC822', TRUE, $response, $readmessage, - $uid_support); + TRUE); } else { $body_a = sqimap_run_command($imapConnection, 'FETCH '.$passed_id.' BODY['.$passed_ent_id.']', - TRUE, $response, $readmessage, $uid_support); + TRUE, $response, $readmessage, TRUE); $message = $message->parent; } if ($response == 'OK') { @@ -892,7 +907,7 @@ function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, function showInputForm ($session, $values=false) { global $send_to, $send_to_cc, $body, $startMessage, $passed_body, $color, $use_signature, $signature, $prefix_sig, - $editor_size, $attachments, $subject, $newmail, + $editor_size, $editor_height, $attachments, $subject, $newmail, $use_javascript_addr_book, $send_to_bcc, $passed_id, $mailbox, $from_htmladdr_search, $location_of_buttons, $attachment_dir, $username, $data_dir, $identity, $idents, $draft_id, $delete_draft, @@ -901,7 +916,6 @@ function showInputForm ($session, $values=false) { $username, $compose_messages, $composesession, $default_charset; $composeMessage = $compose_messages[$session]; - if ($values) { $send_to = $values['send_to']; $send_to_cc = $values['send_to_cc']; @@ -911,9 +925,9 @@ function showInputForm ($session, $values=false) { $body = $values['body']; $identity = (int) $values['identity']; } else { - $send_to = decodeHeader($send_to); - $send_to_cc = decodeHeader($send_to_cc); - $send_to_bcc = decodeHeader($send_to_bcc); + $send_to = decodeHeader($send_to, true, false); + $send_to_cc = decodeHeader($send_to_cc, true, false); + $send_to_bcc = decodeHeader($send_to_bcc, true, false); } if ($use_javascript_addr_book) { @@ -933,20 +947,20 @@ function showInputForm ($session, $values=false) { echo ">\n"; - echo '\n"; + echo addHidden('startMessage', $startMessage); if ($action == 'draft') { - echo '\n"; + echo addHidden('delete_draft', $passed_id); } if (isset($delete_draft)) { - echo '\n"; + echo addHidden('delete_draft', $delete_draft); } if (isset($session)) { - echo '\n"; + echo addHidden('session', $session); } if (isset($passed_id)) { - echo '\n"; + echo addHidden('passed_id', $passed_id); } if ($saved_draft == 'yes') { @@ -966,54 +980,47 @@ function showInputForm ($session, $values=false) { /* display select list for identities */ if (count($idents) > 1) { + $ident_list = array(); + foreach($idents as $id => $data) { + $ident_list[$id] = + $data['full_name'].' <'.$data['email_address'].'>'; + } echo ' ' . "\n" . html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) . _("From:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) . - ' ' . "\n" . - ' ' . "\n" . + echo ' ' . "\n" . ' ' . "\n"; } echo ' ' . "\n" . html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) . _("To:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) . - '
' . "\n" . + addInput('send_to', $send_to, 60). '
' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . html_tag( 'td', '', 'right', $color[4] ) . _("CC:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4] ) . - '
' . "\n" . + addInput('send_to_cc', $send_to_cc, 60). '
' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . html_tag( 'td', '', 'right', $color[4] ) . _("BCC:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4] ) . - '
' . "\n" . + addInput('send_to_bcc', $send_to_bcc, 60).'
' . "\n" . ' ' . "\n" . ' ' . "\n" . ' ' . "\n" . html_tag( 'td', '', 'right', $color[4] ) . _("Subject:") . '' . "\n" . html_tag( 'td', '', 'left', $color[4] ) . "\n"; - echo ' ' . "\n" . + echo ' '.addInput('subject', $subject, 60). ' ' . "\n" . ' ' . "\n\n"; @@ -1025,14 +1032,14 @@ function showInputForm ($session, $values=false) { if ($compose_new_win == '1') { echo ' ' . "\n" . ' ' . "\n" . - '
' . "\n" . ' ' . "\n" . @@ -1095,7 +1102,7 @@ function showInputForm ($session, $values=false) { } else { $maxsize = ''; } - echo ''; + echo addHidden('MAX_FILE_SIZE', min( $sizes )); echo ' ' . "\n" . ' ' . "\n" . ' mime_header->type1; $s_a[] = '
\n" . $attached_filename . + '" border="0">
'. + addCheckBox('delete[]', FALSE, $key). + "\n" . $attached_filename . '- ' . $type . '('. show_readable_size( filesize( $attached_file ) ) . ')
'."\n"; } @@ -1154,19 +1162,18 @@ function showInputForm ($session, $values=false) { } echo '' . "\n" . - '\n" . - '\n" . - '\n"; + addHidden('username', $username). + addHidden('smaction', $action). + addHidden('mailbox', $mailbox); /* store the complete ComposeMessages array in a hidden input value so we can restore them in case of a session timeout. */ sqgetGlobalVar('QUERY_STRING', $queryString, SQ_SERVER); - echo '\n"; - echo '\n"; - echo '\n"; - echo ''; + echo addHidden('restoremessages', serialize($compose_messages)). + addHidden('composesession', $composesession). + addHidden('querystring', $queryString). + "\n"; if (!(bool) ini_get('file_uploads')) { /* File uploads are off, so we didn't show that part of the form. To avoid bogus bug reports, tell the user why. */ @@ -1190,22 +1197,20 @@ function showComposeButtonRow() { ' ' . "\n"; if ($default_use_priority) { if(!isset($mailprio)) { - $mailprio = "3"; - } - echo ' ' . _("Priority") .': ' . "\n"; + $mailprio = '3'; + } + echo ' ' . _("Priority") . + addSelect('mailprio', array( + '1' => _("High"), + '3' => _("Normal"), + '5' => _("Low") ), $mailprio, TRUE); } $mdn_user_support=getPref($data_dir, $username, 'mdn_user_support',$default_use_mdn); if ($default_use_mdn) { if ($mdn_user_support) { echo ' ' . _("Receipt") .': '. - ''. _("On Read"). - ' '. _("On Delivery"); + addCheckBox('request_mdn', $request_mdn == '1', '1'). _("On Read"). + addCheckBox('request_dr', $request_dr == '1', '1'). _("On Delivery"); } } @@ -1351,8 +1356,8 @@ function deliverMessage($composeMessage, $draft=false) { by replacing them back to spaces addressparsing works */ /* FIXME: How to handle in case of other charsets where "\240" is not a non breaking space ??? */ - /* THEFIX: browsers don't replace space with nbsp. SM replaces - space with nbsp when decodes headers. If problem still happens, + /* THEFIX: browsers don't replace space with nbsp. SM replaces + space with nbsp when decodes headers. If problem still happens, use cleanup_nbsp() */ // $send_to = str_replace("\240",' ',$send_to); @@ -1443,7 +1448,7 @@ function deliverMessage($composeMessage, $draft=false) { } if ($default_charset) { $content_type->properties['charset']=$default_charset; - } + } } $rfc822_header->content_type = $content_type; @@ -1528,6 +1533,13 @@ function deliverMessage($composeMessage, $draft=false) { } if (($fld_sent && $svr_allow_sent && !$lcl_allow_sent) || ($fld_sent && $lcl_allow_sent)) { + global $passed_id, $mailbox, $action; + if ($action == 'reply' || $action == 'reply_all') { + $save_reply_with_orig=getPref($data_dir,$username,'save_reply_with_orig'); + if ($save_reply_with_orig) { + $sent_folder = $mailbox; + } + } sqimap_append ($imap_stream, $sent_folder, $length); require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); $imap_deliver = new Deliver_IMAP();