From 73076d7ea69df0e1dedf231aeb7f4602532a6ff3 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 31 Mar 2014 13:31:44 -0400
Subject: [PATCH] Set In-Reply-To and References for forwarded messages (#1489593)

---
 CHANGELOG                      |    1 +
 program/steps/mail/compose.inc |   36 ++++++++++++++++++++++++++++--------
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index b78d4cd..93f9b85 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,7 @@
 - Added toolbar button to move message in message view
 - Improve UI integration of ACL settings
 - Drop support for PHP < 5.3.7
+- Set In-Reply-To and References for forwarded messages (#1489593)
 - Fix directories check in Installer on Windows (#1489576)
 - Fix issue when default_addressbook option is set to integer value (#1489407)
 - Fix Opera > 15 detection (#1489562)
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 4628029..2a38670 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -179,14 +179,20 @@
     if (!$MESSAGE->headers) {
         // error
     }
-    else if ($compose_mode == RCUBE_COMPOSE_REPLY) {
-        $COMPOSE['reply_uid']   = $msg_uid;
+    else if ($compose_mode == RCUBE_COMPOSE_FORWARD || $compose_mode == RCUBE_COMPOSE_REPLY) {
+        if ($compose_mode == RCUBE_COMPOSE_REPLY) {
+            $COMPOSE['reply_msgid'] = $MESSAGE->headers->messageID;
+
+            if (!empty($COMPOSE['param']['all'])) {
+                $MESSAGE->reply_all = $COMPOSE['param']['all'];
+            }
+        }
+        else {
+            $COMPOSE['forward_uid'] = $msg_uid;
+        }
+
         $COMPOSE['reply_msgid'] = $MESSAGE->headers->messageID;
         $COMPOSE['references']  = trim($MESSAGE->headers->references . " " . $MESSAGE->headers->messageID);
-
-        if (!empty($COMPOSE['param']['all'])) {
-            $MESSAGE->reply_all = $COMPOSE['param']['all'];
-        }
 
         // Save the sent message in the same folder of the message being replied to
         if ($RCMAIL->config->get('reply_same_folder') && ($sent_folder = $COMPOSE['mailbox'])
@@ -242,8 +248,9 @@
     }
 }
 
-if (!empty($COMPOSE['reply_msgid']))
-  $OUTPUT->set_env('reply_msgid', $COMPOSE['reply_msgid']);
+if (!empty($COMPOSE['reply_msgid'])) {
+    $OUTPUT->set_env('reply_msgid', $COMPOSE['reply_msgid']);
+}
 
 $MESSAGE->compose = array();
 
@@ -1241,6 +1248,7 @@
 
     $storage = $RCMAIL->get_storage();
     $names   = array();
+    $refs    = array();
 
     $loaded_attachments = array();
     foreach ((array)$COMPOSE['attachments'] as $attachment) {
@@ -1323,6 +1331,18 @@
         else if ($path) {
             @unlink($path);
         }
+
+        if ($message->headers->messageID) {
+            $refs[] = $message->headers->messageID;
+        }
+    }
+
+    // set In-Reply-To and References headers
+    if (count($refs) == 1) {
+        $COMPOSE['reply_msgid'] = $refs[0];
+    }
+    if (!empty($refs)) {
+        $COMPOSE['references'] = implode(' ', $refs);
     }
 }
 

--
Gitblit v1.9.1