From bc29bf702b60906f9dc57ad70ea388fd42077542 Mon Sep 17 00:00:00 2001 From: avel Date: Mon, 9 Oct 2006 14:00:34 +0000 Subject: [PATCH] Support for $Forwarded IMAP keyword, when it is supported or when arbitrary keywords are allowed. RFC 4550 paragraph 2.8 git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@11876 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 5 ++++- src/compose.php | 51 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index f0de65ea..ef2c11b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,9 +4,12 @@ Version 1.5.2 - CVS ------------------- + - Now uses the $Forwarded IMAP keyword for forwarded messages, when it is + enabled or when arbitrary keywords ("PERMANENT FLAGS \*") are permitted. + RFC 4550, paragraph 2.8. - Added support for authorization identifier in IMAP backend, for SASL authentication mechanisms PLAIN and DIGEST-MD5. This can be set upon login - by use of an external plugin. + by use of an external plugin. - Fix warning about array required in array_keys for display options when no fontset is defined. - Added "bad plugin" blacklist in configtest.php. diff --git a/src/compose.php b/src/compose.php index a76e7e65..8bc437c8 100644 --- a/src/compose.php +++ b/src/compose.php @@ -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; } -- 2.25.1