ChangeLog
[squirrelmail.git] / src / compose.php
index 36a1fb86869e3614e5dc968b9d2ccbaa8059b1cc..ea6112f6f6681fb05258fe6793de1e54a9252385 100644 (file)
@@ -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.
@@ -144,9 +144,9 @@ 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);
+    $orig_from = decodeHeader($orig_from->getAddress(false),false,false,true);
 //    $from = decodeHeader($orig_header->getAddr_s('from',"\n$indent"),false,false);
     /* First, return an empty string when no citation style selected. */
     if (($reply_citation_style == '') || ($reply_citation_style == 'none')) {
@@ -168,6 +168,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 == '' ? '' : ' ');
@@ -194,11 +198,11 @@ function getforwardHeader($orig_header) {
    foreach($display as $key => $val) {
       $display[$key] = $key .': '. str_pad('', $maxsize - $val);
    }
-   $from = decodeHeader($orig_header->getAddr_s('from',"\n$indent"),false,false);
+   $from = decodeHeader($orig_header->getAddr_s('from',"\n$indent"),false,false,true);
    $from = str_replace('&nbsp;',' ',$from);
-   $to = decodeHeader($orig_header->getAddr_s('to',"\n$indent"),false,false);
+   $to = decodeHeader($orig_header->getAddr_s('to',"\n$indent"),false,false,true);
    $to = str_replace('&nbsp;',' ',$to);
-   $subject = decodeHeader($orig_header->subject,false,false);
+   $subject = decodeHeader($orig_header->subject,false,false,true);
    $subject = str_replace('&nbsp;',' ',$subject);
    $bodyTop =  str_pad(' '._("Original Message").' ',$editor_size -2,'-',STR_PAD_BOTH) .
                "\n". $display[_("Subject")] . $subject . "\n" .
@@ -206,7 +210,7 @@ function getforwardHeader($orig_header) {
                $display[_("Date")] . getLongDateString( $orig_header->date ). "\n" .
                $display[_("To")] . $to . "\n";
    if ($orig_header->cc != array() && $orig_header->cc !='') {
-      $cc = decodeHeader($orig_header->getAddr_s('cc',"\n$indent"),false,false);
+      $cc = decodeHeader($orig_header->getAddr_s('cc',"\n$indent"),false,false,true);
       $cc = str_replace('&nbsp;',' ',$cc);
      $bodyTop .= $display[_("Cc")] .$cc . "\n";
   }
@@ -623,17 +627,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,26 +673,35 @@ 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);
-            $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,true);
-            $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,true);
-            $subject = decodeHeader($orig_header->subject,false,true);
+            $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_from = $orig_header->getAddr_s('from');
+            $send_from_parts = new AddressStructure();
+            $send_from_parts = $orig_header->parseAddress($send_from);
+            $send_from_add = $send_from_parts->mailbox . '@' . $send_from_parts->host;
+            $identities = get_identities();
+            if (count($identities) > 0) {
+                foreach($identities as $iddata) {
+                    if ($send_from_add == $iddata['email_address']) {
+                        $identity = $iddata['index'];
+                        break;
+                    }
+                }
+            }
+            $subject = decodeHeader($orig_header->subject,false,true,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;
             $body_ary = explode("\n", $body);
-/*        echo "debug: $identity"; #845290
-          $identity='2'; */
-            echo "header".decodeHeader($orig_header->getAddr_s('from'),false,true)."<BR>";
-           print_r($identities);
             $cnt = count($body_ary) ;
             $body = '';
             for ($i=0; $i < $cnt; $i++) {
@@ -702,10 +715,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);
-            $send_to_cc = decodeHeader($orig_header->getAddr_s('cc'),false,true);
-            $send_to_bcc = decodeHeader($orig_header->getAddr_s('bcc'),false,true);
-            $subject = decodeHeader($orig_header->subject,false,true);
+            $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);
             $mailprio = $orig_header->priority;
             $orig_from = '';
             $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection);
@@ -713,14 +726,14 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
             break;
         case ('forward'):
             $send_to = '';
-            $subject = getforwardSubject(decodeHeader($orig_header->subject,false,true));
+            $subject = getforwardSubject(decodeHeader($orig_header->subject,false,true,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));
+            $subject = getforwardSubject(decodeHeader($orig_header->subject,false,true,true));
             $composeMessage = getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, $passed_ent_id, $imapConnection);
             $body = '';
             break;
@@ -729,7 +742,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);
+                $send_to_cc = decodeHeader($send_to_cc,false,true,true);
             }
         case ('reply'):
             // skip this if send_to was already set right above here
@@ -743,8 +756,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);
-            $subject = decodeHeader($orig_header->subject,false,true);
+            $send_to = decodeHeader($send_to,false,true,true);
+            $subject = decodeHeader($orig_header->subject,false,true,true);
             $subject = str_replace('"', "'", $subject);
             $subject = trim($subject);
             if (substr(strtolower($subject), 0, 3) != 're:') {
@@ -753,12 +766,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)) {
@@ -768,7 +781,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;
@@ -829,7 +842,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 */
@@ -883,7 +896,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,
@@ -1016,14 +1029,14 @@ function showInputForm ($session, $values=false) {
     if ($compose_new_win == '1') {
         echo '   <TR>' . "\n" .
              '      <TD BGCOLOR="' . $color[0] . '" COLSPAN=2 ALIGN=CENTER>' . "\n" .
-             '         <TEXTAREA NAME=body ID=body ROWS=20 COLS="' .
-                       $editor_size . '" WRAP="VIRTUAL">';
+             '         <TEXTAREA NAME="body" ID="body" ROWS="' . $editor_height .
+             '" COLS="' . $editor_size . '" WRAP="VIRTUAL">';
     }
     else {
         echo '   <TR>' . "\n" .
             '      <TD BGCOLOR="' . $color[4] . '" COLSPAN=2>' . "\n" .
-            '         &nbsp;&nbsp;<TEXTAREA NAME=body ID=body ROWS=20 COLS="' .
-                      $editor_size . '" WRAP="VIRTUAL">';
+            '         &nbsp;&nbsp;<TEXTAREA NAME="body" ID="body" ROWS="' . $editor_height .
+            '" COLS="' . $editor_size . '" WRAP="VIRTUAL">';
     }
 
     if ($use_signature == true && $newmail == true && !isset($from_htmladdr_search)) {
@@ -1166,8 +1179,7 @@ function showInputForm ($session, $values=false) {
     }
 
     do_hook('compose_bottom');
-    if ($compose_new_win != '1')
-       noframes_bottom();
+    echo '</BODY></HTML>' . "\n";
 }
 
 
@@ -1343,10 +1355,13 @@ 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,
+       use cleanup_nbsp() */
 
-    $send_to = str_replace("\240",' ',$send_to);
-    $send_to_cc = str_replace("\240",' ',$send_to_cc);
-    $send_to_bcc = str_replace("\240",' ',$send_to_bcc);
+//    $send_to = str_replace("\240",' ',$send_to);
+//    $send_to_cc = str_replace("\240",' ',$send_to_cc);
+//    $send_to_bcc = str_replace("\240",' ',$send_to_bcc);
 
     $rfc822_header = $composeMessage->rfc822_header;
 
@@ -1432,7 +1447,7 @@ function deliverMessage($composeMessage, $draft=false) {
         }
         if ($default_charset) {
             $content_type->properties['charset']=$default_charset;
-       }
+    }
     }
 
     $rfc822_header->content_type = $content_type;
@@ -1451,16 +1466,8 @@ function deliverMessage($composeMessage, $draft=false) {
         $deliver = new Deliver_SMTP();
         global $smtpServerAddress, $smtpPort, $pop_before_smtp, $smtp_auth_mech;
 
-        if ($smtp_auth_mech == 'none') {
-                $user = '';
-                $pass = '';
-        } else {
-                global $key, $onetimepad;
-                $user = $username;
-                $pass = OneTimePadDecrypt($key, $onetimepad);
-        }
-
         $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
+        get_smtp_user($user, $pass);
         $stream = $deliver->initStream($composeMessage,$domain,0,
                           $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
     } elseif (!$draft) {
@@ -1525,6 +1532,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();