HTML fix
[squirrelmail.git] / src / compose.php
index bc93c0d99ded1949f8b505d147fd90711749936c..a11e178e518d84a12e1d3a5395ef8d2e971b0e6e 100644 (file)
@@ -34,8 +34,8 @@ require_once(SM_PATH . 'functions/plugin.php');
 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');
+require_once(SM_PATH . 'functions/identity.php');
 
 /* --------------------- Get globals ------------------------------------- */
 /** COOKIE VARS */
@@ -77,7 +77,11 @@ 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);
@@ -169,8 +173,12 @@ 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.
-    $orig_from = decodeHeader($orig_from->getAddress(false),false,false,true);
+    if (!is_object($orig_from)) {
+        $sOrig_from = '';
+    } else {
+        $sOrig_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. */
@@ -179,7 +187,7 @@ function getReplyCitation($orig_from, $orig_date) {
     }
 
     /* Make sure our final value isn't an empty string. */
-    if ($orig_from == '') {
+    if ($sOrig_from == '') {
         return '';
     }
 
@@ -189,31 +197,31 @@ function getReplyCitation($orig_from, $orig_date) {
         /**
          * To translators: %s is for author's name
          */
-        $full_reply_citation = sprintf(_("%s said:"),$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':
         /**
          * To translators:
-         *  first %s is for date string, second %s is for author's name. Date uses 
+         *  first %s is for date string, second %s is for author's name. Date uses
          *  formating from "D, F j, Y g:i a" and "D, F j, Y H:i" translations.
          * Example string:
-         *  "On Sat, December 24, 2004 23:59, Santa said:"
+         *  "On Sat, December 24, 2004 23:59, Santa wrote:"
          * 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 said:"), 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 '';
@@ -226,9 +234,9 @@ function getReplyCitation($orig_from, $orig_date) {
 /**
  * Creates header fields in forwarded email body
  *
- * $default_charset global must be set correctly before you call this function. 
+ * $default_charset global must be set correctly before you call this function.
  * @param object $orig_header
- * @return $string 
+ * @return $string
  */
 function getforwardHeader($orig_header) {
     global $editor_size, $default_charset;
@@ -307,7 +315,13 @@ if (sqsession_is_registered('session_expired_post')) {
     if ($compose_new_win == '1') {
         compose_Header($color, $mailbox);
     } else {
-        displayPageHeader($color, $mailbox);
+        $sHeaderJs = (isset($sHeaderJs)) ? $sHeaderJs : '';
+        if (strpos($action, 'reply') !== false && $reply_focus) {
+            $sBodyTagJs = 'onload="checkForm(\''.$replyfocus.'\');"';
+        } else {
+            $sBodyTagJs = 'onload="checkForm();"';
+        }
+        displayPageHeader($color, $mailbox,$sHeaderJs,$sBodyTagJs);
     }
     showInputForm($session, false);
     exit();
@@ -326,6 +340,7 @@ if (!isset($session) || (isset($newmessage) && $newmessage)) {
 if (!isset($compose_messages)) {
     $compose_messages = array();
 }
+
 if (!isset($compose_messages[$session]) || ($compose_messages[$session] == NULL)) {
     /* if (!array_key_exists($session, $compose_messages)) {  /* We can only do this in PHP >= 4.1 */
     $composeMessage = new Message();
@@ -333,6 +348,7 @@ if (!isset($compose_messages[$session]) || ($compose_messages[$session] == NULL)
     $composeMessage->rfc822_header = $rfc822_header;
     $composeMessage->reply_rfc822_header = '';
     $compose_messages[$session] = $composeMessage;
+
     sqsession_register($compose_messages,'compose_messages');
 } else {
     $composeMessage=$compose_messages[$session];
@@ -360,7 +376,7 @@ if ($draft) {
             $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, false);
             sqimap_mailbox_select($imap_stream, $draft_folder);
             // force bypass_trash=true because message should be saved when deliverMessage() returns true.
-            // in current implementation of sqimap_msgs_list_flag() single message id can 
+            // in current implementation of sqimap_msgs_list_flag() single message id can
             // be submitted as string. docs state that it should be array.
             sqimap_msgs_list_delete($imap_stream, $draft_folder, $delete_draft, true);
             if ($auto_expunge) {
@@ -369,11 +385,24 @@ if ($draft) {
             sqimap_logout($imap_stream);
         }
         if ($compose_new_win == '1') {
-            Header("Location: $location/compose.php?saved_draft=yes&session=$composesession");
+            if ( !isset($pageheader_sent) || !$pageheader_sent ) {
+                Header("Location: $location/compose.php?saved_draft=yes&session=$composesession");
+            } else {
+                echo '   <br><br><center><a href="' . $location
+                    . '/compose.php?saved_sent=yes&amp;session=' . $composesession . '">'
+                    . _("Return") . '</a></center>';
+            }
             exit();
         } else {
-            Header("Location: $location/right_main.php?mailbox=" . urlencode($draft_folder) .
+            if ( !isset($pageheader_sent) || !$pageheader_sent ) {
+                Header("Location: $location/right_main.php?mailbox=" . urlencode($draft_folder) .
                    "&startMessage=1&note=".urlencode($draft_message));
+            } else {
+                echo '   <br><br><center><a href="' . $location
+                    . '/right_main.php?mailbox=' . urlencode($draft_folder)
+                    . '&amp;startMessage=1&amp;note=' . urlencode($draft_message) .'">'
+                    . _("Return") . '</a></center>';
+            }
             exit();
         }
     }
@@ -439,7 +468,7 @@ if ($send) {
             $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, false);
             sqimap_mailbox_select($imap_stream, $draft_folder);
             // bypass_trash=true because message should be saved when deliverMessage() returns true.
-            // in current implementation of sqimap_msgs_list_flag() single message id can 
+            // in current implementation of sqimap_msgs_list_flag() single message id can
             // be submitted as string. docs state that it should be array.
             sqimap_msgs_list_delete($imap_stream, $draft_folder, $delete_draft, true);
             if ($auto_expunge) {
@@ -448,10 +477,25 @@ if ($send) {
             sqimap_logout($imap_stream);
         }
         if ($compose_new_win == '1') {
-            Header("Location: $location/compose.php?mail_sent=yes");
-        }else {
-            Header("Location: $location/right_main.php?mailbox=$urlMailbox".
-                   "&startMessage=$startMessage&mail_sent=yes");
+            if ( !isset($pageheader_sent) || !$pageheader_sent ) {
+                Header("Location: $location/compose.php?mail_sent=yes");
+            } else {
+                echo '   <br><br><center><a href="' . $location
+                    . '/compose.php?mail_sent=yes">'
+                    . _("Return") . '</a></center>';
+            }
+            exit();
+        } else {
+            if ( !isset($pageheader_sent) || !$pageheader_sent ) {
+                Header("Location: $location/right_main.php?mailbox=$urlMailbox".
+                    "&startMessage=$startMessage&mail_sent=yes");
+            } else {
+                echo '   <br><br><center><a href="' . $location
+                    . "/right_main.php?mailbox=$urlMailbox"
+                    . "&amp;startMessage=$startMessage&amp;mail_sent=yes\">"
+                    . _("Return") . '</a></center>';
+            }
+            exit();
         }
     } else {
         if ($compose_new_win == '1') {
@@ -690,6 +734,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 {
@@ -699,6 +744,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;
         }
@@ -789,6 +835,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
                 // forwarded message text should be as undisturbed as possible, so commenting out this call
                 // sqUnWordWrap($body);
                 $composeMessage = getAttachments($message, $composeMessage, $passed_id, $entities, $imapConnection);
+
                 //add a blank line after the forward headers
                 $body = "\n" . $body;
                 break;
@@ -874,7 +921,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
  * @param integer $passed_id
  * @param mixed $entities
  * @param mixed $imapConnection
- * @return object  
+ * @return object
  */
 function getAttachments($message, &$composeMessage, $passed_id, $entities, $imapConnection) {
     global $attachment_dir, $username, $data_dir, $squirrelmail_language, $languages;
@@ -919,9 +966,7 @@ function getAttachments($message, &$composeMessage, $passed_id, $entities, $imap
 
             /* Write Attachment to file */
             $fp = fopen ("$hashed_attachment_dir/$localfilename", 'wb');
-            fputs($fp, decodeBody(mime_fetch_body($imapConnection,
-                            $passed_id, $message->entity_id),
-                        $message->header->encoding));
+            mime_print_body_lines ($imapConnection, $passed_id, $message->entity_id, $message->header->encoding, $fp);
             fclose ($fp);
         }
     } else {
@@ -1029,12 +1074,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();
@@ -1112,7 +1158,7 @@ function showInputForm ($session, $values=false) {
             /*
              * FIXME: test is specific to ja_JP translation implementation.
              * This test might apply incorrect conversion to other translations, but
-             * use of 7bit iso-2022-jp charset in other translations might have other 
+             * use of 7bit iso-2022-jp charset in other translations might have other
              * issues too.
              */
             if ($default_charset == 'iso-2022-jp') {
@@ -1227,10 +1273,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).
@@ -1564,7 +1606,7 @@ function deliverMessage($composeMessage, $draft=false) {
     }
     if (!$succes) {
         $msg  = $deliver->dlv_msg . '<br />' .
-            _("Server replied: ") . $deliver->dlv_ret_nr . ' '.
+            _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
             $deliver->dlv_server_msg;
         plain_error_message($msg, $color);
     } else {
@@ -1611,12 +1653,11 @@ function deliverMessage($composeMessage, $draft=false) {
         ClearAttachments($composeMessage);
         if ($action == 'reply' || $action == 'reply_all') {
             sqimap_mailbox_select ($imap_stream, $mailbox);
-            sqimap_messages_flag ($imap_stream, $passed_id, $passed_id, 'Answered', false);
+            sqimap_toggle_flag($imap_stream, array($passed_id), '\\Answered', true, false);
         }
         sqimap_logout($imap_stream);
     }
     return $succes;
 }
 
-// vim: et ts=4
 ?>
\ No newline at end of file