From 7c1231a94b2a3dddd74b17c7c66bc9d41bb55f47 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 28 May 2012 09:01:13 -0400
Subject: [PATCH] Use browser capabilities to decide if PDF/TIFF attachments should be displayed in an overlay page/inline or to provide only direct download for them (#1488452, #1487929)

---
 CHANGELOG                   |    1 +
 program/steps/mail/func.inc |   10 ++++++++--
 program/steps/mail/show.inc |   16 ++++++++++++++--
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 70ac080..3656675 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Don't display PDF and TIFF attachments inline without browser support (#1488452, #1487929)
 - Fix html2text conversion of strong|b|a|th|h tags when used in upper case
 - Add listcontrols template container in Larry skin (#1488498)
 - Fix host autoselection when default_host is an array (#1488495)
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index fb438c9..829f159 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -1097,6 +1097,12 @@
     }
   }
 
+  // Skip TIFF images if browser doesn't support this format
+  // @TODO: we could convert TIFF to JPEG and display it
+  $tiff_support = !empty($_SESSION['browser_caps']) && !empty($_SESSION['browser_caps']['tif']);
+  $mime_regex   = $tiff_support ? '/^image\//i' : '/^image\/(?!tif)/i';
+  $ext_regex    = '/\.(jpg|jpeg|png|gif|bmp' . ($tiff_support ? '|tif|tiff' : '') .')$/i';
+
   // list images after mail body
   if ($CONFIG['inline_images'] && !empty($MESSAGE->attachments)) {
     foreach ($MESSAGE->attachments as $attach_prop) {
@@ -1106,11 +1112,11 @@
       }
 
       // Content-Type: image/*...
-      if (preg_match('/^image\//i', $attach_prop->mimetype) ||
+      if (preg_match($mime_regex, $attach_prop->mimetype) ||
         // ...or known file extension: many clients are using application/octet-stream
         ($attach_prop->filename &&
           preg_match('/^application\/octet-stream$/i', $attach_prop->mimetype) &&
-          preg_match('/\.(jpg|jpeg|png|gif|bmp)$/i', $attach_prop->filename))
+          preg_match($ext_regex, $attach_prop->filename))
       ) {
         $out .= html::tag('hr') . html::p(array('align' => "center"),
           html::img(array(
diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index a104880..bf17576 100644
--- a/program/steps/mail/show.inc
+++ b/program/steps/mail/show.inc
@@ -61,8 +61,20 @@
   $OUTPUT->set_env('mailbox', $mbox_name);
 
   // mimetypes supported by the browser (default settings)
-  $mimetypes = $RCMAIL->config->get('client_mimetypes', 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/x-javascript,application/pdf,application/x-shockwave-flash');
-  $OUTPUT->set_env('mimetypes', is_string($mimetypes) ? explode(',', $mimetypes) : (array)$mimetypes);
+  $mimetypes = $RCMAIL->config->get('client_mimetypes', 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,image/tiff,application/x-javascript,application/pdf,application/x-shockwave-flash');
+  $mimetypes = is_string($mimetypes) ? explode(',', $mimetypes) : (array)$mimetypes;
+
+  // Remove unsupported types, which makes that attachment which cannot be
+  // displayed in a browser will be downloaded directly without displaying an overlay page
+  if (empty($_SESSION['browser_caps']['pdf']) && ($key = array_search('application/pdf', $mimetypes)) !== false) {
+    unset($mimetypes[$key]);
+  }
+  // @TODO: we could convert TIFF to JPEG and display it
+  if (empty($_SESSION['browser_caps']['tif']) && ($key = array_search('image/tiff', $mimetypes)) !== false) {
+    unset($mimetypes[$key]);
+  }
+
+  $OUTPUT->set_env('mimetypes', $mimetypes);
 
   if ($CONFIG['drafts_mbox'])
     $OUTPUT->set_env('drafts_mailbox', $CONFIG['drafts_mbox']);

--
Gitblit v1.9.1