From 9796cd2063770a8562d58d6492fd6904cdeb4627 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 02 May 2016 12:01:18 -0400
Subject: [PATCH] Merge branch 'dev-rfc822-preview'

---
 program/steps/mail/get.inc |   31 +++++++++++++++++++++++++++----
 1 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc
index f81bdc5..0191502 100644
--- a/program/steps/mail/get.inc
+++ b/program/steps/mail/get.inc
@@ -62,10 +62,22 @@
         'messagepartcontrols' => 'rcmail_message_part_controls',
     ));
 
+    $mimetype = $part ? rcmail_fix_mimetype($part->mimetype) : '';
+
+    // message/rfc822 preview (Note: handle also multipart/ parts, they can
+    // come from Enigma, which replaces message/rfc822 with real mimetype)
+    if ($part_id && ($mimetype == 'message/rfc822' || strpos($mimetype, 'multipart/') === 0)) {
+        $uid = preg_replace('/\.[0-9.]+/', '', $uid);
+        $uid .= '.' . $part_id;
+
+        $OUTPUT->set_env('is_message', true);
+    }
+
     $OUTPUT->set_env('mailbox', $RCMAIL->storage->get_folder());
     $OUTPUT->set_env('uid', $uid);
     $OUTPUT->set_env('part', $part_id);
     $OUTPUT->set_env('filename', $filename);
+    $OUTPUT->set_env('mimetype', $mimetype);
 
     $OUTPUT->send('messagepart');
     exit;
@@ -449,12 +461,23 @@
  */
 function rcmail_message_part_frame($attrib)
 {
-    global $MESSAGE, $RCMAIL;
+    global $RCMAIL;
 
-    $part = $MESSAGE->mime_parts[asciiwords(rcube_utils::get_input_value('_part', rcube_utils::INPUT_GPC))];
-    $ctype_primary = strtolower($part->ctype_primary);
 
-    $attrib['src'] = './?' . str_replace('_frame=', ($ctype_primary=='text' ? '_embed=' : '_preload='), $_SERVER['QUERY_STRING']);
+    if ($RCMAIL->output->get_env('is_message')) {
+        $attrib['src'] = $RCMAIL->url(array(
+                'task'   => 'mail',
+                'action' => 'preview',
+                'uid'    => $RCMAIL->output->get_env('uid'),
+                'mbox'   => $RCMAIL->output->get_env('mailbox'),
+                'framed' => 1,
+        ));
+    }
+    else {
+        $mimetype      = $RCMAIL->output->get_env('mimetype');
+        $frame_replace = strpos($mimetype, 'text/') === 0 ? '_embed=' : '_preload=';
+        $attrib['src'] = './?' . str_replace('_frame=', $frame_replace, $_SERVER['QUERY_STRING']);
+    }
 
     $RCMAIL->output->add_gui_object('messagepartframe', $attrib['id']);
 

--
Gitblit v1.9.1