diff options
Diffstat (limited to 'inc')
-rw-r--r-- | inc/confutils.php | 22 | ||||
-rw-r--r-- | inc/media.php | 2 | ||||
-rw-r--r-- | inc/parser/xhtml.php | 19 |
3 files changed, 27 insertions, 16 deletions
diff --git a/inc/confutils.php b/inc/confutils.php index aab0be4be..5ad8385c4 100644 --- a/inc/confutils.php +++ b/inc/confutils.php @@ -10,21 +10,31 @@ /** * Returns the (known) extension and mimetype of a given filename * + * If $knownonly is true (the default), then only known extensions + * are returned. + * * @author Andreas Gohr <andi@splitbrain.org> */ -function mimetype($file){ +function mimetype($file, $knownonly=true){ $ret = array(false,false,false); // return array $mtypes = getMimeTypes(); // known mimetypes $exts = join('|',array_keys($mtypes)); // known extensions (regexp) + if(!$knownonly){ + $exts = $exts.'|[_\-A-Za-z0-9]+'; // any extension + } if(preg_match('#\.('.$exts.')$#i',$file,$matches)){ $ext = strtolower($matches[1]); } - if($ext && $mtypes[$ext]){ - if($mtypes[$ext][0] == '!'){ - $ret = array($ext, substr($mtypes[$ext],1), true); - }else{ - $ret = array($ext, $mtypes[$ext], false); + if($ext){ + if (isset($mtypes[$ext])){ + if($mtypes[$ext][0] == '!'){ + $ret = array($ext, substr($mtypes[$ext],1), true); + }else{ + $ret = array($ext, $mtypes[$ext], false); + } + elseif(!$knownonly){ + $ret = array($ext, 'application/octet-stream', true); } } diff --git a/inc/media.php b/inc/media.php index f1b6ea62e..4ad7047b2 100644 --- a/inc/media.php +++ b/inc/media.php @@ -555,7 +555,7 @@ function media_printfile($item,$auth,$jump,$display_namespace=false){ } // Prepare fileicons - list($ext,$mime,$dl) = mimetype($item['file']); + list($ext,$mime,$dl) = mimetype($item['file'],false); $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext); $class = 'select mediafile mf_'.$class; diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 665307d45..e67deacd6 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -390,7 +390,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { if($filename){ // add icon - list($ext) = mimetype($filename); + list($ext) = mimetype($filename,false); $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext); $class = 'mediafile mf_'.$class; @@ -710,7 +710,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $render = ($linking == 'linkonly') ? false : true; $link = $this->_getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render); - list($ext,$mime,$dl) = mimetype($src); + list($ext,$mime,$dl) = mimetype($src,false); if(substr($mime,0,5) == 'image' && $render){ $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),($linking=='direct')); }elseif($mime == 'application/x-shockwave-flash' && $render){ @@ -743,16 +743,17 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $link['url'] = ml($src,array('cache'=>$cache)); - list($ext,$mime,$dl) = mimetype($src); + list($ext,$mime,$dl) = mimetype($src,false); if(substr($mime,0,5) == 'image' && $render){ - // link only jpeg images - // if ($ext != 'jpg' && $ext != 'jpeg') $noLink = true; + // link only jpeg images + // if ($ext != 'jpg' && $ext != 'jpeg') $noLink = true; }elseif($mime == 'application/x-shockwave-flash' && $render){ - // don't link flash movies - $noLink = true; + // don't link flash movies + $noLink = true; }else{ - // add file icons - $link['class'] .= ' mediafile mf_'.$ext; + // add file icons + $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext); + $link['class'] .= ' mediafile mf_'.$class; } if($hash) $link['url'] .= '#'.$hash; |