Aleksander Machniak
2012-05-28 7c1231a94b2a3dddd74b17c7c66bc9d41bb55f47
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)
3 files modified
27 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/steps/mail/func.inc 10 ●●●● patch | view | raw | blame | history
program/steps/mail/show.inc 16 ●●●● patch | view | raw | blame | history
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)
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(
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']);