From d125f864ea31cf0b6ecce462f711467fc6441747 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 25 Mar 2016 08:41:11 -0400
Subject: [PATCH] Message/rfc822 previewer compatibility with Enigma

---
 skins/larry/templates/messagepart.html   |    4 ++--
 program/steps/mail/get.inc               |   11 ++++++++---
 program/js/app.js                        |    4 ++--
 skins/classic/templates/messagepart.html |    4 ++--
 4 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 00028f7..75560e7 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -341,7 +341,7 @@
         }
         else if (this.env.action == 'get') {
           this.enable_command('download', 'print', true);
-          if (this.env.mimetype == 'message/rfc822') {
+          if (this.env.is_message) {
             this.enable_command('reply', 'reply-all', 'forward', 'forward-inline', 'forward-attachment', true);
             if (this.env.list_post)
               this.enable_command('reply-list', true);
@@ -1217,7 +1217,7 @@
             this.open_window(this.env.comm_path + url, true, true);
           }
         }
-        else if (this.env.action == 'get' && this.env.mimetype != 'message/rfc822') {
+        else if (this.env.action == 'get' && !this.env.is_message) {
           this.gui_objects.messagepartframe.contentWindow.print();
         }
         else if (uid = this.get_single_uid()) {
diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc
index 019c063..0191502 100644
--- a/program/steps/mail/get.inc
+++ b/program/steps/mail/get.inc
@@ -63,9 +63,14 @@
     ));
 
     $mimetype = $part ? rcmail_fix_mimetype($part->mimetype) : '';
-    if ($part_id && $mimetype == 'message/rfc822') {
+
+    // 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());
@@ -458,9 +463,8 @@
 {
     global $RCMAIL;
 
-    $mimetype = $RCMAIL->output->get_env('mimetype');
 
-    if ($mimetype == 'message/rfc822') {
+    if ($RCMAIL->output->get_env('is_message')) {
         $attrib['src'] = $RCMAIL->url(array(
                 'task'   => 'mail',
                 'action' => 'preview',
@@ -470,6 +474,7 @@
         ));
     }
     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']);
     }
diff --git a/skins/classic/templates/messagepart.html b/skins/classic/templates/messagepart.html
index 326f7a4..fe5a380 100644
--- a/skins/classic/templates/messagepart.html
+++ b/skins/classic/templates/messagepart.html
@@ -17,7 +17,7 @@
     <roundcube:button command="download" type="link" class="button download" classAct="button download" classSel="button downloadSel" title="download" content=" " />
     <roundcube:button command="print" type="link" class="button print" classAct="button print" classSel="button printSel" title="print" content=" " />
     <roundcube:container name="toolbar" id="messagetoolbar" />
-    <roundcube:if condition="env:mimetype == 'message/rfc822'" />
+    <roundcube:if condition="env:is_message" />
     <span class="toolbarseparator">&nbsp;</span>
     <roundcube:button command="reply" type="link" class="buttonPas reply" classAct="button reply" classSel="button replySel" title="replytomessage" content=" " />
     <span class="dropbutton">
@@ -43,7 +43,7 @@
     </div>
 </div>
 
-<roundcube:if condition="env:mimetype == 'message/rfc822'" />
+<roundcube:if condition="env:is_message" />
 <div id="forwardmenu" class="popupmenu">
     <ul id="forwardmenumenu">
         <roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" />
diff --git a/skins/larry/templates/messagepart.html b/skins/larry/templates/messagepart.html
index b242c34..e9e7cc0 100644
--- a/skins/larry/templates/messagepart.html
+++ b/skins/larry/templates/messagepart.html
@@ -17,7 +17,7 @@
 	<roundcube:button command="download" type="link" class="button download disabled" classAct="button download" classSel="button download pressed" label="download" title="download" />
 	<roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="print" />
 	<roundcube:container name="toolbar" id="messagetoolbar" />
-	<roundcube:if condition="env:mimetype == 'message/rfc822'" />
+	<roundcube:if condition="env:is_message" />
 	<span class="spacer"></span>
 	<roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" />
 	<span class="dropbutton">
@@ -50,7 +50,7 @@
 </div>
 </div>
 
-<roundcube:if condition="env:mimetype == 'message/rfc822'" />
+<roundcube:if condition="env:is_message" />
 <div id="forwardmenu" class="popupmenu" aria-hidden="true">
 	<h3 id="aria-label-forwardmenu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
 	<ul id="forwardmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-forwardmenu">

--
Gitblit v1.9.1