Happy New Year
[squirrelmail.git] / src / read_body.php
index 10657bba59771c20ef8a68ef8295cd17a2e971ea..1a0e54577d9e0b5aa118356a9d83d5f4916c4309 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-2007 The SquirrelMail Project Team
+ * @copyright 1999-2020 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
@@ -273,7 +273,7 @@ function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) {
         if (! empty($deliver->dlv_server_msg)) {
             $msg.= "\n" .
                 _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
-                nl2br(htmlspecialchars($deliver->dlv_server_msg));
+                nl2br(sm_encode_html_special_chars($deliver->dlv_server_msg));
         }
         plain_error_message($msg);
     } else {
@@ -358,7 +358,7 @@ function formatRecipientString($recipients, $item ) {
             $a[] = array(
                             // note: decodeHeader is htmlsafe by default
                             'Name'  => decodeHeader($r->getAddress(false)),
-                            'Email' => htmlspecialchars($r->getEmail()),
+                            'Email' => sm_encode_html_special_chars($r->getEmail()),
                             'Full'  => decodeHeader($r->getAddress(true))
                         );
         }
@@ -554,7 +554,8 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,
                        '&mailbox='.$urlMailbox.'&sort='.$sort.
                        '&startMessage='.$startMessage.'&show_more=0'.
                        "&where=$where&what=$what" .
-                       '&delete_id='.$passed_id;
+                       '&delete_id='.$passed_id .
+                       '&smtoken='.sm_generate_security_token();
             }
 
             if ($next >= 0) {
@@ -562,7 +563,8 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,
                        '&mailbox='.$urlMailbox.'&sort='.$sort.
                        '&startMessage='.$startMessage.'&show_more=0'.
                        "&where=$where&what=$what" .
-                       '&delete_id='.$passed_id;
+                       '&delete_id='.$passed_id .
+                       '&smtoken='.sm_generate_security_token();
             }
         }
     }
@@ -628,7 +630,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,
 
     // If Draft folder - create Resume link
     $resume_draft = $edit_as_new = false;
-    if (($mailbox == $draft_folder) && ($save_as_draft)) {
+    if (isDraftMailbox($mailbox) && ($save_as_draft)) {
         $resume_draft = true;
     } else if (handleAsSent($mailbox)) {
         $edit_as_new = true;
@@ -674,12 +676,14 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,
         global $accesskey_read_msg_reply, $accesskey_read_msg_reply_all,
                $accesskey_read_msg_forward, $accesskey_read_msg_as_attach,
                $accesskey_read_msg_delete, $accesskey_read_msg_bypass_trash,
-               $accesskey_read_msg_move, $accesskey_read_msg_move_to;
+               $accesskey_read_msg_move, $accesskey_read_msg_move_to,
+               $accesskey_read_msg_copy;
     } else {
         $accesskey_read_msg_reply = $accesskey_read_msg_reply_all =
         $accesskey_read_msg_forward = $accesskey_read_msg_as_attach =
         $accesskey_read_msg_delete = $accesskey_read_msg_bypass_trash =
-        $accesskey_read_msg_move = $accesskey_read_msg_move_to = 'NONE';
+        $accesskey_read_msg_move = $accesskey_read_msg_move_to =
+        $accesskey_read_msg_copy = 'NONE';
     }
     $oTemplate->assign('accesskey_read_msg_reply', $accesskey_read_msg_reply);
     $oTemplate->assign('accesskey_read_msg_reply_all', $accesskey_read_msg_reply_all);
@@ -689,6 +693,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,
     $oTemplate->assign('accesskey_read_msg_bypass_trash', $accesskey_read_msg_bypass_trash);
     $oTemplate->assign('accesskey_read_msg_move_to', $accesskey_read_msg_move_to);
     $oTemplate->assign('accesskey_read_msg_move', $accesskey_read_msg_move);
+    $oTemplate->assign('accesskey_read_msg_copy', $accesskey_read_msg_copy);
 
     global $null;
     do_hook('read_body_menu', $null);
@@ -962,6 +967,14 @@ if (isset($passed_ent_id) && $passed_ent_id) {
 }
 $header = $message->header;
 
+// gmail does not mark messages as read when retrieving the message body
+// even though RFC 3501, section 6.4.5 (FETCH Command) says:
+// "The \Seen flag is implicitly set; if this causes the flags to change,
+// they SHOULD be included as part of the FETCH responses."
+//
+if ($imap_server_type == 'gmail') {
+    sqimap_toggle_flag($imapConnection, $passed_id, '\\Seen', true, true);
+}
 
 /****************************************/
 /* Block for handling incoming url vars */