Index: core/admin_templates/js/uploader/uploader.js IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/admin_templates/js/uploader/uploader.js (revision 15713) +++ core/admin_templates/js/uploader/uploader.js (revision ) @@ -297,9 +297,27 @@ Uploader.prototype.getFileIcon = function($filename) { $filename.match(/\.([^.]*)$/); - var ext = RegExp.$1.toLowerCase(); + var $ext = RegExp.$1.toLowerCase(), + $ext_overrides = { + 'doc': '^(docx|dotx|docm|dotm)$', + 'xls': '^(xlsx|xltx|xlsm|xltm|xlam|xlsb)$', + 'ppt': '^(pptx|potx|ppsx|ppam|pptm|potm|ppsm)$' + }; - $icon = ext.match(/^(ai|avi|bmp|cs|dll|doc|dot|exe|fla|gif|htm|html|jpg|js|mdb|mp3|pdf|ppt|rdp|swf|swt|txt|vsd|xls|xml|zip)$/) ? ext : 'default.icon'; + $.each($ext_overrides, function ($new_ext, $expression) { + var $regexp = new RegExp($expression); + + if ( $ext.match($regexp) ) { + $ext = $new_ext; + + return false; + } + + return true; + }); + + var $icon = $ext.match(/^(ai|avi|bmp|cs|dll|doc|dot|exe|fla|gif|htm|html|jpg|js|mdb|mp3|pdf|ppt|rdp|swf|swt|txt|vsd|xls|xml|zip)$/) ? $ext : 'default.icon'; + return this.IconPath + '/' + $icon + '.gif'; } \ No newline at end of file Index: core/kernel/globals.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/kernel/globals.php (revision 15713) +++ core/kernel/globals.php (revision ) @@ -570,8 +570,13 @@ */ public static function mimeContentType($file) { - $ret = ''; + $ret = self::vendorMimeContentType($file); + if ( $ret ) { + // vendor-specific mime types override any automatic detection + return $ret; + } + if ( function_exists('finfo_open') && function_exists('finfo_file') ) { $mime_magic_resource = finfo_open(FILEINFO_MIME_TYPE); @@ -585,7 +590,42 @@ } return $ret ? $ret : self::mimeContentTypeByExtension($file); + } + + /** + * Determines vendor-specific mime type from a given file + * + * @param string $file + * @return bool + * @access public + * @static + */ + public static function vendorMimeContentType($file) + { + $file_extension = mb_strtolower( pathinfo($file, PATHINFO_EXTENSION) ); + + $mapping = Array ( + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'docm' => 'application/vnd.ms-word.document.macroEnabled.12', + 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', + 'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12', + 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', + 'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' + ); + + return isset($mapping[$file_extension]) ? $mapping[$file_extension] : false; - } + } /** * Detects mime type of the file purely based on it's extension \ No newline at end of file