diff options
Diffstat (limited to 'lib/helper.php')
-rw-r--r-- | lib/helper.php | 76 |
1 files changed, 47 insertions, 29 deletions
diff --git a/lib/helper.php b/lib/helper.php index c69445ed788..a315c640d1a 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -27,6 +27,7 @@ class OC_Helper { private static $mimetypes=array(); private static $tmpFiles=array(); + private static $mimetypeIcons = array(); /** * @brief Creates an url using a defined route @@ -187,31 +188,38 @@ class OC_Helper { * * Returns the path to the image of this file type. */ - public static function mimetypeIcon( $mimetype ) { - $alias=array('application/xml'=>'code/xml'); - if(isset($alias[$mimetype])) { - $mimetype=$alias[$mimetype]; + public static function mimetypeIcon($mimetype) { + $alias = array('application/xml' => 'code/xml'); + if (isset($alias[$mimetype])) { + $mimetype = $alias[$mimetype]; + } + if (isset(self::$mimetypeIcons[$mimetype])) { + return self::$mimetypeIcons[$mimetype]; } // Replace slash and backslash with a minus - $mimetype = str_replace( "/", "-", $mimetype ); - $mimetype = str_replace( "\\", "-", $mimetype ); + $icon = str_replace('/', '-', $mimetype); + $icon = str_replace( '\\', '-', $icon); // Is it a dir? - if( $mimetype == "dir" ) { - return OC::$WEBROOT."/core/img/filetypes/folder.png"; + if ($mimetype === 'dir') { + self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/folder.png'; + return OC::$WEBROOT.'/core/img/filetypes/folder.png'; } // Icon exists? - if( file_exists( OC::$SERVERROOT."/core/img/filetypes/$mimetype.png" )) { - return OC::$WEBROOT."/core/img/filetypes/$mimetype.png"; - } - //try only the first part of the filetype - $mimetype=substr($mimetype, 0, strpos($mimetype, '-')); - if( file_exists( OC::$SERVERROOT."/core/img/filetypes/$mimetype.png" )) { - return OC::$WEBROOT."/core/img/filetypes/$mimetype.png"; + if (file_exists(OC::$SERVERROOT.'/core/img/filetypes/'.$icon.'.png')) { + self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/'.$icon.'.png'; + return OC::$WEBROOT.'/core/img/filetypes/'.$icon.'.png'; } - else{ - return OC::$WEBROOT."/core/img/filetypes/file.png"; + + // Try only the first part of the filetype + $mimePart = substr($icon, 0, strpos($icon, '-')); + if (file_exists(OC::$SERVERROOT.'/core/img/filetypes/'.$mimePart.'.png')) { + self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/'.$mimePart.'.png'; + return OC::$WEBROOT.'/core/img/filetypes/'.$mimePart.'.png'; + } else { + self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/file.png'; + return OC::$WEBROOT.'/core/img/filetypes/file.png'; } } @@ -356,6 +364,26 @@ class OC_Helper { } /** + * Try to guess the mimetype based on filename + * + * @param string $path + * @return string + */ + static public function getFileNameMimeType($path){ + if(strpos($path, '.')) { + //try to guess the type by the file extension + if(!self::$mimetypes || self::$mimetypes != include 'mimetypes.list.php') { + self::$mimetypes=include 'mimetypes.list.php'; + } + $extension=strtolower(strrchr(basename($path), ".")); + $extension=substr($extension, 1);//remove leading . + return (isset(self::$mimetypes[$extension]))?self::$mimetypes[$extension]:'application/octet-stream'; + }else{ + return 'application/octet-stream'; + } + } + + /** * get the mimetype form a local file * @param string $path * @return string @@ -369,17 +397,7 @@ class OC_Helper { return "httpd/unix-directory"; } - if(strpos($path, '.')) { - //try to guess the type by the file extension - if(!self::$mimetypes || self::$mimetypes != include 'mimetypes.list.php') { - self::$mimetypes=include 'mimetypes.list.php'; - } - $extension=strtolower(strrchr(basename($path), ".")); - $extension=substr($extension, 1);//remove leading . - $mimeType=(isset(self::$mimetypes[$extension]))?self::$mimetypes[$extension]:'application/octet-stream'; - }else{ - $mimeType='application/octet-stream'; - } + $mimeType = self::getFileNameMimeType($path); if($mimeType=='application/octet-stream' and function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)) { @@ -601,7 +619,7 @@ class OC_Helper { } /** - * remove all files in PHP /oc-noclean temp dir + * remove all files in PHP /oc-noclean temp dir */ public static function cleanTmpNoClean() { $tmpDirNoCleanFile=get_temp_dir().'/oc-noclean/'; |