another stupidy. It looks that i wasn't awake yesterday.
[squirrelmail.git] / src / compose.php
index eab20f32332609b035e2502ff9230b22e1a85952..d6bc77491c891422706c651c4ffbd33d733b1af6 100644 (file)
@@ -3,9 +3,6 @@
 /**
  * compose.php
  *
- * Copyright (c) 1999-2005 The SquirrelMail Project Team
- * Licensed under the GNU GPL. For full terms see the file COPYING.
- *
  * This code sends a mail.
  *
  * There are 4 modes of operation:
@@ -14,6 +11,8 @@
  *    - Send mail
  *    - Save As Draft
  *
+ * @copyright © 1999-2005 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
  */
@@ -77,7 +76,12 @@ sqgetGlobalVar('draft_id',$draft_id);
 sqgetGlobalVar('ent_num',$ent_num);
 sqgetGlobalVar('saved_draft',$saved_draft);
 sqgetGlobalVar('delete_draft',$delete_draft);
-sqgetGlobalVar('startMessage',$startMessage);
+if ( sqgetGlobalVar('startMessage',$startMessage) ) {
+    $startMessage = (int)$startMessage;
+} else {
+    $startMessage = 1;
+}
+
 
 /** POST VARS */
 sqgetGlobalVar('sigappend',             $sigappend,             SQ_POST);
@@ -93,6 +97,12 @@ if ( sqgetGlobalVar('return', $temp, SQ_POST) ) {
 
 /** GET VARS */
 sqgetGlobalVar('attachedmessages', $attachedmessages, SQ_GET);
+if ( sqgetGlobalVar('account', $temp,  SQ_GET) ) {
+    $iAccount = (int) $temp;
+} else {
+    $iAccount = 0;
+}
+
 
 /** get smaction */
 if ( !sqgetGlobalVar('smaction',$action) )
@@ -169,11 +179,10 @@ function replyAllString($header) {
 function getReplyCitation($orig_from, $orig_date) {
     global $reply_citation_style, $reply_citation_start, $reply_citation_end;
 
-    // FIXME: why object is rewritten with string.
     if (!is_object($orig_from)) {
-        $orig_from = '';
+        $sOrig_from = '';
     } else {
-        $orig_from = decodeHeader($orig_from->getAddress(false),false,false,true);
+        $sOrig_from = decodeHeader($orig_from->getAddress(false),false,false,true);
     }
 
 //    $from = decodeHeader($orig_header->getAddr_s('from',"\n$indent"),false,false);
@@ -184,7 +193,7 @@ function getReplyCitation($orig_from, $orig_date) {
     }
 
     /* Make sure our final value isn't an empty string. */
-    if ($orig_from == '') {
+    if ($sOrig_from == '') {
         return '';
     }
 
@@ -194,13 +203,13 @@ function getReplyCitation($orig_from, $orig_date) {
         /**
          * To translators: %s is for author's name
          */
-        $full_reply_citation = sprintf(_("%s wrote:"),$orig_from);
+        $full_reply_citation = sprintf(_("%s wrote:"),$sOrig_from);
         break;
     case 'quote_who':
         // FIXME: do we have to translate xml formating?
         $start = '<' . _("quote") . ' ' . _("who") . '="';
         $end   = '">';
-        $full_reply_citation = $start . $orig_from . $end;
+        $full_reply_citation = $start . $sOrig_from . $end;
         break;
     case 'date_time_author':
         /**
@@ -212,13 +221,13 @@ function getReplyCitation($orig_from, $orig_date) {
          * If you have to put author's name in front of date string, check comments about
          * argument swapping at http://www.php.net/sprintf
          */
-        $full_reply_citation = sprintf(_("On %s, %s wrote:"), getLongDateString($orig_date), $orig_from);
+        $full_reply_citation = sprintf(_("On %s, %s wrote:"), getLongDateString($orig_date), $sOrig_from);
         break;
     case 'user-defined':
         $start = $reply_citation_start .
             ($reply_citation_start == '' ? '' : ' ');
         $end   = $reply_citation_end;
-        $full_reply_citation = $start . $orig_from . $end;
+        $full_reply_citation = $start . $sOrig_from . $end;
         break;
     default:
         return '';
@@ -388,7 +397,7 @@ if ($draft) {
                 echo '   <br><br><center><a href="' . $location
                     . '/compose.php?saved_sent=yes&amp;session=' . $composesession . '">'
                     . _("Return") . '</a></center>';
-            }            
+            }
             exit();
         } else {
             if ( !isset($pageheader_sent) || !$pageheader_sent ) {
@@ -399,7 +408,7 @@ if ($draft) {
                     . '/right_main.php?mailbox=' . urlencode($draft_folder)
                     . '&amp;startMessage=1&amp;note=' . urlencode($draft_message) .'">'
                     . _("Return") . '</a></center>';
-            }            
+            }
             exit();
         }
     }
@@ -731,6 +740,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
                 }
             }
 
+            // charset encoding in compose form stuff
             if (isset($body_part_entity->header->parameters['charset'])) {
                 $actual = $body_part_entity->header->parameters['charset'];
             } else {
@@ -740,6 +750,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
             if ( $actual && is_conversion_safe($actual) && $actual != $default_charset){
                 $bodypart = charset_convert($actual,$bodypart,$default_charset,false);
             }
+            // end of charset encoding in compose
 
             $body .= $bodypart;
         }
@@ -1015,6 +1026,14 @@ function showInputForm ($session, $values=false) {
         $mailprio, $compose_new_win, $saved_draft, $mail_sent, $sig_first,
         $username, $compose_messages, $composesession, $default_charset;
 
+    if (checkForJavascript()) {
+        $onfocus = ' onfocus="alreadyFocused=true;"';
+        $onfocus_array = array('onfocus' => 'alreadyFocused=true;');
+    }
+    else {
+        $onfocus = '';
+        $onfocus_array = array();
+    }
 
     $composeMessage = $compose_messages[$session];
     if ($values) {
@@ -1070,12 +1089,13 @@ function showInputForm ($session, $values=false) {
     if ($mail_sent == 'yes') {
         echo '<br /><center><b>'. _("Your Message has been sent.").'</center></b>';
     }
-    echo '<table align="center" cellspacing="0" border="0">' . "\n";
     if ($compose_new_win == '1') {
         echo '<table align="center" bgcolor="'.$color[0].'" width="100%" border="0">'."\n" .
             '   <tr><td></td>'.html_tag( 'td', '', 'right' ).
             '<input type="button" name="Close" onclick="return self.close()" value="'.
             _("Close").'" /></td></tr>'."\n";
+    } else {
+        echo '<table align="center" cellspacing="0" border="0">' . "\n";
     }
     if ($location_of_buttons == 'top') {
         showComposeButtonRow();
@@ -1103,28 +1123,28 @@ function showInputForm ($session, $values=false) {
         html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) .
         _("To") . ':</td>' . "\n" .
         html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) .
-        addInput('send_to', $send_to, 60). '<br />' . "\n" .
+        addInput('send_to', $send_to, 60, 0, $onfocus_array). '<br />' . "\n" .
         '      </td>' . "\n" .
         '   </tr>' . "\n" .
         '   <tr>' . "\n" .
         html_tag( 'td', '', 'right', $color[4] ) .
         _("Cc") . ':</td>' . "\n" .
         html_tag( 'td', '', 'left', $color[4] ) .
-        addInput('send_to_cc', $send_to_cc, 60). '<br />' . "\n" .
+        addInput('send_to_cc', $send_to_cc, 60, 0, $onfocus_array). '<br />' . "\n" .
         '      </td>' . "\n" .
         '   </tr>' . "\n" .
         '   <tr>' . "\n" .
         html_tag( 'td', '', 'right', $color[4] ) .
         _("Bcc") . ':</td>' . "\n" .
         html_tag( 'td', '', 'left', $color[4] ) .
-        addInput('send_to_bcc', $send_to_bcc, 60).'<br />' . "\n" .
+        addInput('send_to_bcc', $send_to_bcc, 60, 0, $onfocus_array).'<br />' . "\n" .
         '      </td>' . "\n" .
         '   </tr>' . "\n" .
         '   <tr>' . "\n" .
         html_tag( 'td', '', 'right', $color[4] ) .
         _("Subject") . ':</td>' . "\n" .
         html_tag( 'td', '', 'left', $color[4] ) . "\n";
-    echo '         '.addInput('subject', $subject, 60).
+    echo '         '.addInput('subject', $subject, 60, 0, $onfocus_array).
         '      </td>' . "\n" .
         '   </tr>' . "\n\n";
 
@@ -1137,13 +1157,13 @@ function showInputForm ($session, $values=false) {
         echo '   <tr>' . "\n" .
             '      <td bgcolor="' . $color[0] . '" colspan="2" align="center">' . "\n" .
             '         <textarea name="body" id="body" rows="' . (int)$editor_height .
-            '" cols="' . (int)$editor_size . '" wrap="virtual">';
+            '" cols="' . (int)$editor_size . '" wrap="virtual"' . $onfocus . '>';
     }
     else {
         echo '   <tr>' . "\n" .
             '      <td bgcolor="' . $color[4] . '" colspan="2">' . "\n" .
             '         &nbsp;&nbsp;<textarea name="body" id="body" rows="' . (int)$editor_height .
-            '" cols="' . (int)$editor_size . '" wrap="virtual">';
+            '" cols="' . (int)$editor_size . '" wrap="virtual"' . $onfocus . '>';
     }
 
     if ($use_signature == true && $newmail == true && !isset($from_htmladdr_search)) {
@@ -1268,10 +1288,6 @@ function showInputForm ($session, $values=false) {
             '   </tr>' . "\n";
     } // End of file_uploads if-block
     /* End of attachment code */
-    if ($compose_new_win == '1') {
-        echo '</table>'."\n";
-    }
-
     echo '</table>' . "\n" .
         addHidden('username', $username).
         addHidden('smaction', $action).
@@ -1379,6 +1395,7 @@ function checkInput ($show) {
 function saveAttachedFiles($session) {
     global $_FILES, $attachment_dir, $attachments, $username,
         $data_dir, $compose_messages;
+
     /* get out of here if no file was attached at all */
     if (! is_uploaded_file($_FILES['attachfile']['tmp_name']) ) {
         return true;
@@ -1647,11 +1664,28 @@ function deliverMessage($composeMessage, $draft=false) {
             sqimap_append_done ($imap_stream, $sent_folder);
             unset ($imap_deliver);
         }
-        global $passed_id, $mailbox, $action;
+
+        global $passed_id, $mailbox, $action, $what, $iAccount,$startMessage;
+
         ClearAttachments($composeMessage);
         if ($action == 'reply' || $action == 'reply_all') {
-            sqimap_mailbox_select ($imap_stream, $mailbox);
-            sqimap_toggle_flag($imap_stream, array($passed_id), '\\Answered', true, false);
+            $aMailbox = sqm_api_mailbox_select($imap_stream, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
+            //sqimap_mailbox_select ($imap_stream, $mailbox);
+            $aUpdatedMsgs = sqimap_toggle_flag($imap_stream, array($passed_id), '\\Answered', true, false);
+             if (isset($aUpdatedMsgs[$passed_id]['FLAGS'])) {
+                /**
+                 * Only update the cached headers if the header is
+                 * cached.
+                 */
+                if (isset($aMailbox['MSG_HEADERS'][$passed_id])) {
+                    $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'] = $aMsg['FLAGS'];
+                }
+            }
+            /**
+             * Write mailbox with updated seen flag information back to cache.
+             */
+            $mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
+            sqsession_register($mailbox_cache,'mailbox_cache');
         }
         sqimap_logout($imap_stream);
     }