From 7c1231a94b2a3dddd74b17c7c66bc9d41bb55f47 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 28 May 2012 15:01:13 +0200 Subject: 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) --- program/steps/mail/func.inc | 10 ++++++++-- program/steps/mail/show.inc | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) (limited to 'program') diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index fb438c9ed..829f159f4 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -1097,6 +1097,12 @@ function rcmail_message_body($attrib) } } + // 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 @@ function rcmail_message_body($attrib) } // 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 a104880ca..bf1757699 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -61,8 +61,20 @@ if ($uid = get_input_value('_uid', RCUBE_INPUT_GET)) { $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']); -- cgit v1.2.3