need to encode & in strings
[squirrelmail.git] / src / read_body.php
index de7b9c43a480084b35c73b3166dc44351b0b4282..36dfe50b6244254b763fe537fc5af724869efc1b 100644 (file)
@@ -6,7 +6,7 @@
  * This file is used for reading the msgs array and displaying
  * the resulting emails in the right frame.
  *
- * @copyright © 1999-2005 The SquirrelMail Project Team
+ * @copyright © 1999-2006 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
 define('SM_PATH','../');
 
 /* SquirrelMail required files. */
-require_once(SM_PATH . 'include/validate.php');
-require_once(SM_PATH . 'functions/global.php');
+include_once(SM_PATH . 'include/validate.php');
+//require_once(SM_PATH . 'functions/global.php');
 require_once(SM_PATH . 'functions/imap.php');
 require_once(SM_PATH . 'functions/mime.php');
 require_once(SM_PATH . 'functions/date.php');
 require_once(SM_PATH . 'functions/url_parser.php');
 require_once(SM_PATH . 'functions/html.php');
-require_once(SM_PATH . 'functions/global.php');
+//require_once(SM_PATH . 'functions/global.php');
 require_once(SM_PATH . 'functions/identity.php');
 include_once(SM_PATH . 'functions/arrays.php');
 include_once(SM_PATH . 'functions/mailbox_display.php');
@@ -80,7 +80,7 @@ function findPreviousMessage($uidset, $passed_id) {
  * @param int $passed_id
  */
 function printer_friendly_link($mailbox, $passed_id, $passed_ent_id) {
-    global $javascript_on;
+    global $javascript_on, $show_html_default;
 
     /* hackydiehack */
     if( !sqgetGlobalVar('view_unsafe_images', $view_unsafe_images, SQ_GET) ) {
@@ -90,15 +90,16 @@ function printer_friendly_link($mailbox, $passed_id, $passed_ent_id) {
     }
     $params = '?passed_ent_id=' . urlencode($passed_ent_id) .
               '&mailbox=' . urlencode($mailbox) .
-              '&passed_id=' . urlencode($passed_id).
-              '&view_unsafe_images='. (bool) $view_unsafe_images;
+              '&passed_id=' . urlencode($passed_id) .
+              '&view_unsafe_images='. (bool) $view_unsafe_images .
+              '&show_html_default=' . $show_html_default;
 
     $print_text = _("View Printable Version");
 
     $result = '';
     /* Output the link. */
     if ($javascript_on) {
-        $result = '<script language="javascript" type="text/javascript">' . "\n" .
+        $result = '<script type="text/javascript">' . "\n" .
                   '<!--' . "\n" .
                   "  function printFormat() {\n" .
                   '    window.open("../src/printer_friendly_main.php' .
@@ -114,6 +115,55 @@ function printer_friendly_link($mailbox, $passed_id, $passed_ent_id) {
     return $result;
 }
 
+function view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message) {
+    global $base_uri, $show_html_default;
+
+    $has_html = false;
+    if ($message->header->type0 == 'message' && $message->header->type1 == 'rfc822') {
+        $type0 = $message->rfc822_header->content_type->type0;
+        $type1 = $message->rfc822_header->content_type->type1;
+    } else {
+        $type0 = $message->header->type0;
+        $type1 = $message->header->type1;
+    }
+    if($type0 == 'multipart' &&
+       ($type1 == 'alternative' || $type1 == 'mixed' || $type1 == 'related')) {
+        if ($message->findDisplayEntity(array(), array('text/html'), true)) {
+            $has_html = true;
+        }
+    }
+    /*
+     * Normal single part message so check its type.
+     */
+    else {
+        if($type0 == 'text' && $type1 == 'html') {
+            $has_html = true;
+        }
+    }
+    if($has_html == true) {
+        $vars = array('passed_ent_id', 'show_more', 'show_more_cc', 'override_type0', 'override_type1', 'startMessage', 'where', 'what');
+
+        $new_link = $base_uri . 'src/read_body.php?passed_id=' . urlencode($passed_id) .
+                    '&amp;passed_ent_id=' . urlencode($passed_ent_id) .
+                    '&amp;mailbox=' . urlencode($mailbox);
+        foreach($vars as $var) {
+            if(sqgetGlobalVar($var, $temp)) {
+                $new_link .= '&amp;' . $var . '=' . urlencode($temp);
+            }
+        }
+
+        if($show_html_default == 1) {
+            $new_link .= '&amp;show_html_default=0';
+            $link      = _("View as plain text");
+        } else {
+            $new_link .= '&amp;show_html_default=1';
+            $link      = _("View as HTML");
+        }
+        return '&nbsp;|&nbsp<a href="' . $new_link . '">' . $link . '</a>';
+    }
+    return '';
+}
+
 function ServerMDNSupport($aFlags) {
     /* escaping $ doesn't work -> \x36 */
     return ( in_array('$mdnsent',$aFlags,true) ||
@@ -262,19 +312,22 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
         $success = $deliver->finalizeStream($stream);
     }
     if (!$success) {
-        $msg  = $deliver->dlv_msg . '<br />' .
+        $msg = $deliver->dlv_msg;
+        if (! empty($deliver->dlv_server_msg)) {
+            $msg.= '<br />' .
                 _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
-                $deliver->dlv_server_msg;
+                nl2br(htmlspecialchars($deliver->dlv_server_msg));
+        }
         require_once(SM_PATH . 'functions/display_messages.php');
         plain_error_message($msg, $color);
     } else {
         unset ($deliver);
         if (sqimap_mailbox_exists ($imapConnection, $sent_folder)) {
-            sqimap_append ($imapConnection, $sent_folder, $length);
+            $sid = sqimap_append ($imapConnection, $sent_folder, $length);
             require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php');
             $imap_deliver = new Deliver_IMAP();
             $imap_deliver->mail($composeMessage, $imapConnection);
-            sqimap_append_done ($imapConnection);
+            sqimap_append_done ($imapConnection, $sent_folder);
             unset ($imap_deliver);
         }
     }
@@ -382,7 +435,7 @@ function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message,
                           $passed_ent_id)) {
                         $mdn_url = $PHP_SELF . '&sendreceipt=1';
                         if ($FirstTimeSee && $javascript_on) {
-                            $script  = '<script language="JavaScript" type="text/javascript">' . "\n";
+                            $script  = '<script type="text/javascript">' . "\n";
                             $script .= '<!--'. "\n";
                             $script .= 'if(window.confirm("' .
                                        _("The message sender has requested a response to indicate that you have read this message. Would you like to send a receipt?") .
@@ -525,7 +578,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
         // top display is enabled.
         if ( $delete_prev_next_display == 1 &&
                in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
-            $del_prev_link = _("Delete & Prev");
+            $del_prev_link = _("Delete &amp; Prev");
             if ($prev >= 0) {
                 $uri = $base_uri . 'src/read_body.php?passed_id='.$prev.
                        '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
@@ -535,7 +588,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
                 $del_prev_link = '<a href="'.$uri.'">'.$del_prev_link.'</a>';
             }
 
-            $del_next_link = _("Delete & Next");
+            $del_next_link = _("Delete &amp; Next");
             if ($next >= 0) {
                 $uri = $base_uri . 'src/read_body.php?passed_id='.$next.
                        '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
@@ -677,7 +730,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
 }
 
 function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
-    global $base_uri, $where, $what;
+    global $base_uri, $where, $what, $download_and_unsafe_link;
 
     $urlMailbox = urlencode($mailbox);
     $urlPassed_id = urlencode($passed_id);
@@ -704,6 +757,13 @@ function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
     $s .= '&nbsp;|&nbsp;' .
           printer_friendly_link($mailbox, $passed_id, $passed_ent_id);
     echo $s;
+    echo view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message);
+
+    /* Output the download and/or unsafe images link/-s, if any. */
+    if ($download_and_unsafe_link) {
+       echo $download_and_unsafe_link;
+    }
+
     do_hook("read_body_header_right");
     $s = "</small></td>\n" .
          "</tr>\n";
@@ -747,7 +807,11 @@ sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
 if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
     $messages = array();
 }
-
+sqgetGlobalVar('delayed_errors',  $delayed_errors,  SQ_SESSION);
+if (is_array($delayed_errors)) {
+    $oErrorHandler->AssignDelayedErrors($delayed_errors);
+    sqsession_unregister("delayed_errors");
+}
 /** GET VARS */
 sqgetGlobalVar('sendreceipt',   $sendreceipt,   SQ_GET);
 if (!sqgetGlobalVar('where',         $where,         SQ_GET) ) {
@@ -794,6 +858,18 @@ if ( sqgetGlobalVar('startMessage', $temp) ) {
 } else {
     $startMessage = 1;
 }
+if(sqgetGlobalVar('show_html_default', $temp)) {
+    $show_html_default = (int) $temp;
+}
+
+if(sqgetGlobalVar('view_unsafe_images', $temp)) {
+    $view_unsafe_images = (int) $temp;
+    if($view_unsafe_images == 1) {
+        $show_html_default = 1;
+    }
+} else {
+    $view_unsafe_images = 0;
+}
 /**
  * Retrieve mailbox cache
  */
@@ -817,6 +893,7 @@ $aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('s
 /**
  * Replace From => To  in case it concerns a draft or sent folder
  */
+$aColumns = array();
 if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
     !in_array(SQM_COL_TO,$index_order)) {
     $aNewOrder = array(); // nice var name ;)
@@ -824,11 +901,12 @@ if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
         if ($iCol == SQM_COL_FROM) {
             $iCol = SQM_COL_TO;
         }
-        $aNewOrder[] = $iCol;
+        $aColumns[$iCol] = array();
    }
-   $aColumns = $aNewOrder;
 } else {
-   $aColumns = $index_order;
+   foreach ($index_order as $iCol) {
+       $aColumns[$iCol] = array();
+   }
 }
 
 $aProps = array(
@@ -893,7 +971,6 @@ if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
     $message->is_seen = true;
     $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
 }
-
 if (isset($passed_ent_id) && $passed_ent_id) {
     $message = $message->getEntity($passed_ent_id);
     if ($message->type0 != 'message'  && $message->type1 != 'rfc822') {
@@ -913,8 +990,6 @@ if (isset($passed_ent_id) && $passed_ent_id) {
 }
 $header = $message->header;
 
-$header = $message->header;
-
 
 /****************************************/
 /* Block for handling incoming url vars */
@@ -939,8 +1014,6 @@ if (isset($sendreceipt)) {
 /* End of block for handling incoming url vars */
 /***********************************************/
 
-
-
 $messagebody = '';
 do_hook('read_body_top');
 if ($show_html_default == 1) {
@@ -1028,6 +1101,5 @@ sqimap_logout($imapConnection);
  */
 $mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
 sqsession_register($mailbox_cache,'mailbox_cache');
-
+$oTemplate->display('footer.tpl');
 ?>
-</body></html>