Request #3402 - Add support for '$Forwarded' IMAP keyword
authorMichael M Slusarz <slusarz@curecanti.org>
Wed, 17 Dec 2008 06:13:06 +0000 (23:13 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Wed, 17 Dec 2008 06:13:06 +0000 (23:13 -0700)
imp/docs/CHANGES
imp/lib/Compose.php
imp/lib/IMP.php
imp/lib/Views/ListMessages.php
imp/mailbox-mimp.php
imp/mailbox.php
imp/message-mimp.php
imp/message.php
imp/templates/mailbox/navbar.html
imp/themes/screen-dimp.css
imp/themes/screen.css

index 47a745f..03e7b3f 100644 (file)
@@ -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).
index ce83955..09f2291 100644 (file)
@@ -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']);
index 751a755..b8fc862 100644 (file)
@@ -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;
index c3e358b..e71ed5c 100644 (file)
@@ -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;
index dc26471..e399a93 100644 (file)
@@ -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;
index 8ef6b2a..d21214e 100644 (file)
@@ -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;
index 8f02bf5..146fe9c 100644 (file)
@@ -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;
         }
     }
index 05fe754..a0b73b1 100644 (file)
@@ -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));
             }
         }
     }
index 3f17dd0..de80ab9 100644 (file)
@@ -17,6 +17,8 @@
      <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>
index ce66b1f..ddc8b08 100644 (file)
@@ -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;
 }
index 4b0ecb1..d8d7162 100644 (file)
@@ -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;
 }