summaryrefslogtreecommitdiffstats
path: root/application/models/file_mod.php
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xinu.at>2011-12-18 17:17:34 +0100
committerFlorian Pritz <bluewind@xinu.at>2011-12-18 17:17:34 +0100
commitf502313f517af07b8edc8ef3d6ffee748831fd73 (patch)
tree2cabc6faf2cb0f757ad962f3cc15b9005dba004a /application/models/file_mod.php
parent74bda3f086ab1922246107df01b577c5e7723bb9 (diff)
factorise mode detection
Signed-off-by: Florian Pritz <bluewind@xinu.at>
Diffstat (limited to 'application/models/file_mod.php')
-rw-r--r--application/models/file_mod.php44
1 files changed, 36 insertions, 8 deletions
diff --git a/application/models/file_mod.php b/application/models/file_mod.php
index af425b8df..2e51d5544 100644
--- a/application/models/file_mod.php
+++ b/application/models/file_mod.php
@@ -230,13 +230,14 @@ class File_mod extends CI_Model {
// autodetect the mode for highlighting if the URL contains a / after the ID (/ID/)
// /ID/mode disables autodetection
- if (!$mode && substr_count(ltrim($this->uri->uri_string(), "/"), '/') >= 1) {
- $mode = $this->mime2extension($type);
- $mode = $this->filename2extension($filedata['filename']) ? $this->filename2extension($filedata['filename']) : $mode;
+ $autodetect_mode = !$mode && substr_count(ltrim($this->uri->uri_string(), "/"), '/') >= 1;
+
+ if ($autodetect_mode) {
+ $mode = $this->get_highlight_mode($type, $filedata["filename"]);
}
// resolve aliases of modes
// this is mainly used for compatibility
- $mode = $this->extension_aliases($mode);
+ $mode = $this->resolve_mode_alias($mode);
header("Last-Modified: ".date('D, d M Y H:i:s', $filedata["date"])." GMT");
header('Etag: "'.$etag.'"');
@@ -256,7 +257,7 @@ class File_mod extends CI_Model {
}
// if there is no mimetype mapping we can't highlight it
- $can_highlight = $this->mime2extension($type);
+ $can_highlight = $this->can_highlight($type);
$filesize_too_big = filesize($file) > $this->config->item('upload_max_text_size');
@@ -380,8 +381,35 @@ class File_mod extends CI_Model {
return $random;
}
+ // Allow certain types to be highlight without doing it automatically
+ function can_highlight($type)
+ {
+ $typearray = array(
+ 'image/svg+xml',
+ );
+ if (in_array($type, $typearray)) return true;
+
+ if ($this->mime2mode($type)) return true;
+
+ return false;
+ }
+
+ // Return the mode that should be used for highlighting
+ function get_highlight_mode($type, $filename)
+ {
+ $mode = $this->mime2mode($type);
+
+ // filename modes overwrite mime type mappings
+ $filename_mode = $this->filename2mode($filename);
+ if ($filename_mode) {
+ return $filename_mode;
+ }
+
+ return $mode;
+ }
+
// Map MIME types to extensions needed for highlighting
- function mime2extension($type)
+ private function mime2mode($type)
{
$typearray = array(
'text/plain' => 'text',
@@ -431,7 +459,7 @@ class File_mod extends CI_Model {
}
// Map special filenames to extensions
- function filename2extension($name)
+ private function filename2mode($name)
{
$namearray = array(
'PKGBUILD' => 'bash',
@@ -443,7 +471,7 @@ class File_mod extends CI_Model {
}
// Handle alias extensions
- function extension_aliases($alias)
+ function resolve_mode_alias($alias)
{
if ($alias === false) return false;
$aliasarray = array(