From 9e9d62d7862bf8fddbf56ae3b0f0d9d9ac0d4c4c Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Sat, 07 Sep 2013 13:16:40 -0400
Subject: [PATCH] Respect (multiple) config dirs from RCUBE_CONFIG_PATH when reading configured mimetypes mapping

---
 program/lib/Roundcube/rcube_config.php |    2 +-
 program/lib/Roundcube/rcube_mime.php   |   18 ++++++++++++++----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/program/lib/Roundcube/rcube_config.php b/program/lib/Roundcube/rcube_config.php
index 2ac611f..781f8a7 100644
--- a/program/lib/Roundcube/rcube_config.php
+++ b/program/lib/Roundcube/rcube_config.php
@@ -232,7 +232,7 @@
      * @param boolean Return -$env file path if exists
      * @return array  List of candidates in config dir path(s)
      */
-    private function resolve_paths($file, $use_env = true)
+    public function resolve_paths($file, $use_env = true)
     {
         $files = array();
         $abs_path = $this->_is_absolute($file);
diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php
index 572540f..96a8eac 100644
--- a/program/lib/Roundcube/rcube_mime.php
+++ b/program/lib/Roundcube/rcube_mime.php
@@ -708,12 +708,20 @@
      */
     public static function file_content_type($path, $name, $failover = 'application/octet-stream', $is_stream = false, $skip_suffix = false)
     {
+        static $mime_ext = array();
+
         $mime_type = null;
-        $mime_magic = rcube::get_instance()->config->get('mime_magic');
-        $mime_ext = $skip_suffix ? null : @include(RCUBE_CONFIG_DIR . '/mimetypes.php');
+        $config = rcube::get_instance()->config;
+        $mime_magic = $config->get('mime_magic');
+
+        if (!$skip_suffix && empty($mime_ext)) {
+            foreach ($config->resolve_paths('mimetypes.php') as $fpath) {
+                $mime_ext = array_merge($mime_ext, (array) @include($fpath));
+            }
+        }
 
         // use file name suffix with hard-coded mime-type map
-        if (is_array($mime_ext) && $name) {
+        if (!$skip_suffix && is_array($mime_ext) && $name) {
             if ($suffix = substr($name, strrpos($name, '.')+1)) {
                 $mime_type = $mime_ext[strtolower($suffix)];
             }
@@ -818,7 +826,9 @@
 
         // fallback to some well-known types most important for daily emails
         if (empty($mime_types)) {
-            $mime_extensions = (array) @include(RCUBE_CONFIG_DIR . '/mimetypes.php');
+            foreach (rcube::get_instance()->config->resolve_paths('mimetypes.php') as $fpath) {
+                $mime_extensions = array_merge($mime_extensions, (array) @include($fpath));
+            }
 
             foreach ($mime_extensions as $ext => $mime) {
                 $mime_types[$mime][] = $ext;

--
Gitblit v1.9.1