From 92cd7f34b07e86062f2c024039e3309768b48ce6 Mon Sep 17 00:00:00 2001
From: Andy Wermke <andy@dev.next-step-software.com>
Date: Thu, 04 Apr 2013 10:10:23 -0400
Subject: [PATCH] Merge branch 'master' of https://github.com/roundcube/roundcubemail

---
 program/steps/mail/show.inc |   59 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 38 insertions(+), 21 deletions(-)

diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index 82594f3..552c180 100644
--- a/program/steps/mail/show.inc
+++ b/program/steps/mail/show.inc
@@ -19,7 +19,7 @@
  +-----------------------------------------------------------------------+
 */
 
-$PRINT_MODE = $RCMAIL->action=='print' ? TRUE : FALSE;
+$PRINT_MODE = $RCMAIL->action == 'print' ? TRUE : FALSE;
 
 // Read browser capabilities and store them in session
 if ($caps = get_input_value('_caps', RCUBE_INPUT_GET)) {
@@ -31,8 +31,21 @@
   $_SESSION['browser_caps'] = $browser_caps;
 }
 
+$uid       = get_input_value('_uid', RCUBE_INPUT_GET);
+$mbox_name = $RCMAIL->storage->get_folder();
+
 // similar code as in program/steps/mail/get.inc
-if ($uid = get_input_value('_uid', RCUBE_INPUT_GET)) {
+if ($uid) {
+  // set message format (need to be done before rcube_message construction)
+  if (!empty($_GET['_format'])) {
+    $prefer_html = $_GET['_format'] == 'html';
+    $RCMAIL->config->set('prefer_html', $prefer_html);
+    $_SESSION['msg_formats'][$mbox_name.':'.$uid] = $prefer_html;
+  }
+  else if (isset($_SESSION['msg_formats'][$mbox_name.':'.$uid])) {
+    $RCMAIL->config->set('prefer_html', $_SESSION['msg_formats'][$mbox_name.':'.$uid]);
+  }
+
   $MESSAGE = new rcube_message($uid);
 
   // if message not found (wrong UID)...
@@ -40,7 +53,6 @@
     rcmail_message_error($uid);
   }
 
-  $mbox_name = $RCMAIL->storage->get_folder();
 
   // show images?
   rcmail_check_safe($MESSAGE);
@@ -79,7 +91,7 @@
     }
   }
 
-  $OUTPUT->set_env('mimetypes', $mimetypes);
+  $OUTPUT->set_env('mimetypes', array_values($mimetypes));
 
   if ($CONFIG['drafts_mbox'])
     $OUTPUT->set_env('drafts_mailbox', $CONFIG['drafts_mbox']);
@@ -105,6 +117,11 @@
   if (!$OUTPUT->ajax_call)
     $OUTPUT->add_label('checkingmail', 'deletemessage', 'movemessagetotrash',
       'movingmessage', 'deletingmessage', 'markingmessage');
+
+  $prefer_html = $RCMAIL->config->get('prefer_html');
+  if ($MESSAGE->has_html_part()) {
+    $OUTPUT->set_env('optional_format', $prefer_html ? 'text' : 'html');
+  }
 
   // check for unset disposition notification
   if ($MESSAGE->headers->mdn_to
@@ -147,13 +164,11 @@
   global $PRINT_MODE, $MESSAGE, $RCMAIL;
 
   $out = $ol = '';
+  $attachments = array();
 
   if (sizeof($MESSAGE->attachments)) {
     foreach ($MESSAGE->attachments as $attach_prop) {
-      $filename = $attach_prop->filename;
-      if (empty($filename) && $attach_prop->mimetype == 'text/html') {
-        $filename = rcube_label('htmlmessage');
-      }
+      $filename = rcmail_attachment_name($attach_prop, true);
 
       if ($PRINT_MODE) {
         $size = $RCMAIL->message_part_size($attach_prop);
@@ -161,28 +176,30 @@
       }
       else {
         if (mb_strlen($filename) > 50) {
+          $title    = $filename;
           $filename = abbreviate_string($filename, 50);
-          $title = $filename;
         }
         else {
           $title = '';
         }
 
-        $ol .= html::tag('li', rcmail_filetype2classname($attach_prop->mimetype, $filename),
-          html::a(array(
+        $mimetype = rcmail_fix_mimetype($attach_prop->mimetype);
+        $class    = rcmail_filetype2classname($mimetype, $filename);
+        $id       = 'attach' . $attach_prop->mime_id;
+        $link     = html::a(array(
             'href' => $MESSAGE->get_part_url($attach_prop->mime_id, false),
-            'onclick' => sprintf(
-              'return %s.command(\'load-attachment\',{part:\'%s\', mimetype:\'%s\'},this)',
-              JS_OBJECT_NAME,
-              $attach_prop->mime_id,
-              rcmail_fix_mimetype($attach_prop->mimetype)),
-              'title' => Q($title),
-            ),
-            Q($filename)));
+            'onclick' => sprintf('return %s.command(\'load-attachment\',\'%s\',this)',
+              JS_OBJECT_NAME, $attach_prop->mime_id),
+            'title' => Q($title),
+            ), Q($filename));
+        $ol .= html::tag('li', array('class' => $class, 'id' => $id), $link);
+
+        $attachments[$attach_prop->mime_id] = $mimetype;
       }
     }
 
     $out = html::tag('ul', $attrib, $ol, html::$common_attrib);
+    $RCMAIL->output->set_env('attachments', $attachments);
   }
 
   return $out;
@@ -288,9 +305,9 @@
 ));
 
 
-if ($RCMAIL->action=='print' && $OUTPUT->template_exists('messageprint'))
+if ($RCMAIL->action == 'print' && $OUTPUT->template_exists('messageprint'))
   $OUTPUT->send('messageprint', false);
-else if ($RCMAIL->action=='preview' && $OUTPUT->template_exists('messagepreview'))
+else if ($RCMAIL->action == 'preview' && $OUTPUT->template_exists('messagepreview'))
   $OUTPUT->send('messagepreview', false);
 else
   $OUTPUT->send('message', false);

--
Gitblit v1.9.1