first start of removing direct access of key/onetimepad in all scripts
[squirrelmail.git] / src / read_body.php
index 65e74c7cf7f13aed0492e1fa80aced4f8624a8c7..e8a74a1582504c83f219a2ba4887fe1b76d9e885 100644 (file)
  */
 
 /**
- * Path for SquirrelMail required files.
- * @ignore
+ * Include the SquirrelMail initialization file.
  */
-define('SM_PATH','../');
+require('../include/init.php');
 
 /* SquirrelMail required files. */
-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/imap_asearch.php'); // => move to mailbox_display
 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/identity.php');
-include_once(SM_PATH . 'functions/arrays.php');
-include_once(SM_PATH . 'functions/mailbox_display.php');
+require_once(SM_PATH . 'functions/arrays.php');
+require_once(SM_PATH . 'functions/mailbox_display.php');
+require_once(SM_PATH . 'functions/forms.php');
+require_once(SM_PATH . 'functions/attachment_common.php');
 
 /**
  * Given an IMAP message id number, this will look it up in the cached
@@ -115,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) .
+                    '&passed_ent_id=' . urlencode($passed_ent_id) .
+                    '&mailbox=' . urlencode($mailbox);
+        foreach($vars as $var) {
+            if(sqgetGlobalVar($var, $temp)) {
+                $new_link .= '&' . $var . '=' . urlencode($temp);
+            }
+        }
+
+        if($show_html_default == 1) {
+            $new_link .= '&show_html_default=0';
+            $link      = _("View as plain text");
+        } else {
+            $new_link .= '&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) ||
@@ -245,8 +294,16 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
 
     if ($useSendmail) {
         require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php');
-        global $sendmail_path;
-        $deliver = new Deliver_SendMail();
+        global $sendmail_path, $sendmail_args;
+        // Check for outdated configuration
+        if (!isset($sendmail_args)) {
+            if ($sendmail_path=='/var/qmail/bin/qmail-inject') {
+                $sendmail_args = '';
+            } else {
+                $sendmail_args = '-i -t';
+            }
+        }
+        $deliver = new Deliver_SendMail(array('sendmail_args'=>$sendmail_args));
         $stream = $deliver->initStream($composeMessage,$sendmail_path);
     } else {
         require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
@@ -269,16 +326,15 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
                 _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
                 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);
         }
     }
@@ -384,7 +440,11 @@ function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message,
                     if (!(handleAsSent($mailbox) ||
                           $message->is_deleted ||
                           $passed_ent_id)) {
-                        $mdn_url = $PHP_SELF . '&sendreceipt=1';
+                        $mdn_url = $PHP_SELF;
+                        $mdn_url = set_url_var($PHP_SELF, 'mailbox', urlencode($mailbox));
+                        $mdn_url = set_url_var($PHP_SELF, 'passed_id', $passed_id);
+                        $mdn_url = set_url_var($PHP_SELF, 'passed_ent_id', $passed_ent_id);
+                        $mdn_url = set_url_var($PHP_SELF, 'sendreceipt', 1);
                         if ($FirstTimeSee && $javascript_on) {
                             $script  = '<script type="text/javascript">' . "\n";
                             $script .= '<!--'. "\n";
@@ -440,7 +500,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
     global $base_uri, $draft_folder, $where, $what, $color, $sort,
            $startMessage, $PHP_SELF, $save_as_draft,
            $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox,
-           $username, $delete_prev_next_display,
+           $username, $delete_prev_next_display, $show_copy_buttons,
            $compose_new_win, $javascript_on, $compose_width, $compose_height;
 
     //FIXME cleanup argument list, use $aMailbox where possible
@@ -529,7 +589,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.
@@ -539,7 +599,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.
@@ -660,7 +720,14 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
         }
         $menu_row .= '</select> ';
 
-        $menu_row .= getButton('submit', 'moveButton',_("Move")) . "\n" . '</form>';
+        $menu_row .= getButton('submit', 'moveButton',_("Move")) . "\n";
+
+        // Add msg copy button
+        if ($show_copy_buttons) {
+            $menu_row .= getButton('submit', 'copyButton', _("Copy"));
+        }
+
+        $menu_row .= '</form>';
     }
     $menu_row .= '</td></tr>';
 
@@ -708,10 +775,11 @@ 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;
+        echo $download_and_unsafe_link;
     }
 
     do_hook("read_body_header_right");
@@ -757,7 +825,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) ) {
@@ -804,6 +876,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
  */
@@ -827,6 +911,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 ;)
@@ -834,11 +919,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(
@@ -903,7 +989,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') {
@@ -923,8 +1008,6 @@ if (isset($passed_ent_id) && $passed_ent_id) {
 }
 $header = $message->header;
 
-$header = $message->header;
-
 
 /****************************************/
 /* Block for handling incoming url vars */
@@ -949,8 +1032,6 @@ if (isset($sendreceipt)) {
 /* End of block for handling incoming url vars */
 /***********************************************/
 
-
-
 $messagebody = '';
 do_hook('read_body_top');
 if ($show_html_default == 1) {
@@ -966,6 +1047,13 @@ for ($i = 0; $i < $cnt; $i++) {
    }
 }
 
+/**
+ * Write mailbox with updated seen flag information back to cache.
+ */
+$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
+sqsession_register($mailbox_cache,'mailbox_cache');
+$_SESSION['mailbox_cache'] = $mailbox_cache;
+
 displayPageHeader($color, $mailbox,'','');
 formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false);
 formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
@@ -1032,11 +1120,5 @@ formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
 
 do_hook('read_body_bottom');
 sqimap_logout($imapConnection);
-
-/**
- * Write mailbox with updated seen flag information back to cache.
- */
-$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
-sqsession_register($mailbox_cache,'mailbox_cache');
 $oTemplate->display('footer.tpl');
-?>
\ No newline at end of file
+?>