From: Michael M Slusarz Date: Wed, 17 Dec 2008 06:13:06 +0000 (-0700) Subject: Request #3402 - Add support for '$Forwarded' IMAP keyword X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b4cc0cff3495af6da6d84d3c12a38cba48b5aae9;p=horde.git Request #3402 - Add support for '$Forwarded' IMAP keyword --- diff --git a/imp/docs/CHANGES b/imp/docs/CHANGES index 47a745f74..03e7b3f24 100644 --- a/imp/docs/CHANGES +++ b/imp/docs/CHANGES @@ -2,6 +2,7 @@ v5.0-cvs -------- +[mms] Add support for '$Forwarded' IMAP keyword (Request #3402). [mms] Attachments in a signed message now can be downloaded via the download all attachments link (Bug #2939). [mms] Added separate Fetch Mail action to DIMP (Request #7370). diff --git a/imp/lib/Compose.php b/imp/lib/Compose.php index ce839552a..09f2291dd 100644 --- a/imp/lib/Compose.php +++ b/imp/lib/Compose.php @@ -516,21 +516,32 @@ class IMP_Compose $sent_saved = true; - /* Log the reply. */ - if (!empty($opts['reply_type']) && - !empty($header['in_reply_to']) && - !empty($conf['maillog']['use_maillog'])) { - IMP_Maillog::log($opts['reply_type'], $header['in_reply_to'], $recipients); - } - - if (!empty($opts['reply_index']) && - !empty($opts['reply_type']) && - ($opts['reply_type'] == 'reply')) { - /* Make sure to set the IMAP reply flag and unset any - * 'flagged' flag. */ - $imp_message = &IMP_Message::singleton(); - $imp_message->flag(array('\\answered'), array($opts['reply_index'])); - $imp_message->flag(array('\\flagged'), array($opts['reply_index']), false); + if (!empty($opts['reply_type'])) { + /* Log the reply. */ + if (!empty($header['in_reply_to']) && + !empty($conf['maillog']['use_maillog'])) { + IMP_Maillog::log($opts['reply_type'], $header['in_reply_to'], $recipients); + } + + if (!empty($opts['reply_index'])) { + $imp_message = &IMP_Message::singleton(); + + switch ($opts['reply_type']) { + case 'reply': + /* Make sure to set the IMAP reply flag and unset any + * 'flagged' flag. */ + $imp_message->flag(array('\\answered'), array($opts['reply_index'])); + $imp_message->flag(array('\\flagged'), array($opts['reply_index']), false); + break; + + case 'forward': + /* Set the '$Forwarded' flag, if possible, in the mailbox. + * This flag is a pseudo-standard flag. See, e.g.: + * http://tools.ietf.org/html/draft-melnikov-imap-keywords-03 */ + $imp_message->flag(array('$Forwarded'), array($opts['reply_index'])); + break; + } + } } $entry = sprintf("%s Message sent to %s from %s", $_SERVER['REMOTE_ADDR'], $recipients, $_SESSION['imp']['uniquser']); diff --git a/imp/lib/IMP.php b/imp/lib/IMP.php index 751a755c3..b8fc862a5 100644 --- a/imp/lib/IMP.php +++ b/imp/lib/IMP.php @@ -33,6 +33,7 @@ class IMP const FLAG_FLAGGED = 8; const FLAG_DRAFT = 16; const FLAG_PERSONAL = 32; + const FLAG_FORWARDED = 64; /* IMP Mailbox view constants. */ const MAILBOX_START_FIRSTUNSEEN = 1; diff --git a/imp/lib/Views/ListMessages.php b/imp/lib/Views/ListMessages.php index c3e358b9b..e71ed5c62 100644 --- a/imp/lib/Views/ListMessages.php +++ b/imp/lib/Views/ListMessages.php @@ -317,6 +317,9 @@ class IMP_Views_ListMessages if (in_array('\\deleted', $ob['flags'])) { $bg[] = 'deletedmsg'; } + if (in_array('$forwarded', $ob['flags'])) { + $bg[] = 'forwarded'; + } } $msg['bg'] = $bg; diff --git a/imp/mailbox-mimp.php b/imp/mailbox-mimp.php index dc26471b5..e399a93dd 100644 --- a/imp/mailbox-mimp.php +++ b/imp/mailbox-mimp.php @@ -142,6 +142,11 @@ while (list(,$ob) = each($mbox_info['overview'])) { if (in_array('\\deleted', $ob['flags'])) { $msg['status'] .= 'D'; } + + /* Support for the pseudo-standard '$Forwarded' flag. */ + if (in_array('$forwarded', $ob['flags'])) { + $msg['status'] .= 'F'; + } } $msg['target'] = $target; diff --git a/imp/mailbox.php b/imp/mailbox.php index 8ef6b2a70..d21214e0e 100644 --- a/imp/mailbox.php +++ b/imp/mailbox.php @@ -509,6 +509,7 @@ if ($pageOb['msgcount']) { $n_template->set('imp_deleted', IMP::FLAG_DELETED); $n_template->set('imp_draft', IMP::FLAG_DRAFT); $n_template->set('imp_personal', IMP::FLAG_PERSONAL); + $n_template->set('imp_forwarded', IMP::FLAG_FORWARDED); if ($n_template->get('use_folders')) { $n_template->set('move', Horde::widget('#', _("Move to folder"), 'widget', '', "transfer('move_messages', 1); return false;", _("Move"), true)); $n_template->set('copy', Horde::widget('#', _("Copy to folder"), 'widget', '', "transfer('copy_messages', 1); return false;", _("Copy"), true)); @@ -785,6 +786,13 @@ while (list($seq, $ob) = each($mbox_info['overview'])) { $msg['status'] .= Horde::img('mail_deleted.png', _("Deleted"), array('title' => _("Deleted"))); $bg[] = 'deleted'; } + + /* Support for the pseudo-standard '$Forwarded' flag. */ + if (in_array('$forwarded', $ob['flags'])) { + $flagbits |= IMP::FLAG_FORWARDED; + $msg['status'] .= Horde::img('mail_forwarded.png', _("Forwarded"), array('title' => _("Forwarded"))); + $bg[] = 'forwarded'; + } } $ids[$msg['id']] = $flagbits; diff --git a/imp/message-mimp.php b/imp/message-mimp.php index 8f02bf587..146fe9c71 100644 --- a/imp/message-mimp.php +++ b/imp/message-mimp.php @@ -197,13 +197,15 @@ if (!$use_pop) { $status .= 'N'; } $flag_array = array( - 'answered' => 'r', - 'draft' => 'D', - 'flagged' => '!', - 'deleted' => 'd' + '\\answered' => 'r', + '\\draft' => 'D', + '\\flagged' => '!', + '\\deleted' => 'd', + /* Support for the pseudo-standard '$Forwarded' flag. */ + '$forwarded' => 'F' ); foreach ($flag_array as $flag => $desc) { - if (in_array('\\' . $flag, $flags)) { + if (in_array($flag, $flags)) { $status .= $desc; } } diff --git a/imp/message.php b/imp/message.php index 05fe754e9..a0b73b131 100644 --- a/imp/message.php +++ b/imp/message.php @@ -431,14 +431,16 @@ if (!IMP::$printMode) { $status .= Horde::img('mail_unseen.png', _("Unseen"), array('title' => _("Unseen"))); } $flag_array = array( - 'answered' => _("Answered"), - 'draft' => _("Draft"), - 'flagged' => _("Flagged For Followup"), - 'deleted' => _("Deleted") + '\\answered' => _("Answered"), + '\\draft' => _("Draft"), + '\\flagged' => _("Flagged For Followup"), + '\\deleted' => _("Deleted"), + /* Support for the pseudo-standard '$Forwarded' flag. */ + '$forwarded' => _("Forwarded") ); foreach ($flag_array as $flag => $desc) { - if (in_array('\\' . $flag, $flags)) { - $status .= Horde::img('mail_' . $flag . '.png', $desc, array('title' => $desc)); + if (in_array($flag, $flags)) { + $status .= Horde::img('mail_' . ltrim($flag, '\\$') . '.png', $desc, array('title' => $desc)); } } } diff --git a/imp/templates/mailbox/navbar.html b/imp/templates/mailbox/navbar.html index 3f17dd02c..de80ab941 100644 --- a/imp/templates/mailbox/navbar.html +++ b/imp/templates/mailbox/navbar.html @@ -17,6 +17,8 @@ + + diff --git a/imp/themes/screen-dimp.css b/imp/themes/screen-dimp.css index ce66b1fc7..ddc8b088a 100644 --- a/imp/themes/screen-dimp.css +++ b/imp/themes/screen-dimp.css @@ -239,6 +239,9 @@ div.msgSize { .msglist div.answered { background: #cfc; } +.msglist div.forwarded { + background: #add; +} .msglist div.flagged { background: #fcc; } @@ -286,6 +289,9 @@ div.msgSize { .msglist div.answered .msCompose { background: transparent url("graphics/mail_answered.png") center center no-repeat; } +.msglist div.forwarded .msCompose { + background: transparent url("graphics/mail_forwarded.png") center center no-repeat; +} .msglist div.draft .msCompose { background: transparent url("graphics/mail_draft.png") center center no-repeat; } diff --git a/imp/themes/screen.css b/imp/themes/screen.css index 4b0ecb10a..d8d7162ac 100644 --- a/imp/themes/screen.css +++ b/imp/themes/screen.css @@ -218,6 +218,12 @@ tr.unseen:hover, tr.unseen-over { tr.answered:hover, tr.answered-over { background: #9e9; } +.forwarded { + background: #add; +} +tr.forwarded:hover, tr.forwarded-over { + background: #8bd; +} .important, .flagged { background: #fcc; }