Support for $Forwarded IMAP keyword, when it is supported or when arbitrary keywords...
[squirrelmail.git] / src / compose.php
index 7b3d4953dd97cbb8c555b707afa16152ba1fd5d6..8bc437c8e81e1a561774e9d49f76c95ef561c3cd 100644 (file)
@@ -681,7 +681,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
     global $editor_size, $default_use_priority, $body, $idents,
         $use_signature, $data_dir, $username,
         $key, $imapServerAddress, $imapPort, $compose_messages,
-        $composeMessage, $body_quotem, $request_mdn, $request_dr,
+        $composeMessage, $body_quote, $request_mdn, $request_dr,
         $default_use_mdn, $mdn_user_support;
     global $languages, $squirrelmail_language, $default_charset;
 
@@ -1636,29 +1636,52 @@ function deliverMessage($composeMessage, $draft=false) {
         global $passed_id, $mailbox, $action, $what, $iAccount,$startMessage;
 
         $composeMessage->purgeAttachments();
-        if ($action == 'reply' || $action == 'reply_all') {
+        if ($action=='reply' || $action=='reply_all' || $action=='forward' || $action=='forward_as_attachment') {
             require(SM_PATH . 'functions/mailbox_display.php');
             $aMailbox = sqm_api_mailbox_select($imap_stream, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
-            // check if we are allowed to set the \\Answered flag
-            if (in_array('\\answered',$aMailbox['PERMANENTFLAGS'], true)) {
-                $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'];
+            switch($action) {
+            case 'reply':
+            case 'reply_all':
+                // check if we are allowed to set the \\Answered flag
+                if (in_array('\\answered',$aMailbox['PERMANENTFLAGS'], true)) {
+                    $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'];
+                        }
+                    }
+                }
+                break;
+            case 'forward':
+            case 'forward_as_attachment':
+                // check if we are allowed to set the $Forwarded flag (RFC 4550 paragraph 2.8)
+                if (in_array('$forwarded',$aMailbox['PERMANENTFLAGS'], true) || 
+                    in_array('\\*',$aMailbox['PERMANENTFLAGS'])) {
+
+                    $aUpdatedMsgs = sqimap_toggle_flag($imap_stream, array($passed_id), '$Forwarded', true, false);
+                    if (isset($aUpdatedMsgs[$passed_id]['FLAGS'])) {
+                        if (isset($aMailbox['MSG_HEADERS'][$passed_id])) {
+                            $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'] = $aMsg['FLAGS'];
+                        }
                     }
                 }
+                break;
             }
+
             /**
              * Write mailbox with updated seen flag information back to cache.
              */
-            $mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
-            sqsession_register($mailbox_cache,'mailbox_cache');
+            if(isset($aUpdatedMsgs[$passed_id])) {
+                $mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
+                sqsession_register($mailbox_cache,'mailbox_cache');
+            }
+
+            sqimap_logout($imap_stream);
         }
-        sqimap_logout($imap_stream);
     }
     return $success;
 }