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).
$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']);
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;
if (in_array('\\deleted', $ob['flags'])) {
$bg[] = 'deletedmsg';
}
+ if (in_array('$forwarded', $ob['flags'])) {
+ $bg[] = 'forwarded';
+ }
}
$msg['bg'] = $bg;
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;
$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));
$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;
$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;
}
}
$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));
}
}
}
<option value="!<tag:imp_flagged />"><gettext>Not Important</gettext></option>
<option value="<tag:imp_answered />"><gettext>Answered</gettext></option>
<option value="!<tag:imp_answered />"><gettext>Unanswered</gettext></option>
+ <option value="<tag:imp_forwarded />"><gettext>Forwarded</gettext></option>
+ <option value="!<tag:imp_forwarded />"><gettext>Not Forwarded</gettext></option>
<option value="<tag:imp_deleted />"><gettext>Deleted</gettext></option>
<option value="!<tag:imp_deleted />"><gettext>Not Deleted</gettext></option>
<option value="<tag:imp_draft />"><gettext>Draft</gettext></option>
.msglist div.answered {
background: #cfc;
}
+.msglist div.forwarded {
+ background: #add;
+}
.msglist div.flagged {
background: #fcc;
}
.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;
}
tr.answered:hover, tr.answered-over {
background: #9e9;
}
+.forwarded {
+ background: #add;
+}
+tr.forwarded:hover, tr.forwarded-over {
+ background: #8bd;
+}
.important, .flagged {
background: #fcc;
}