diff --git a/core/basethemelet.php b/core/basethemelet.php
index cc493bb8..bcae8d9f 100644
--- a/core/basethemelet.php
+++ b/core/basethemelet.php
@@ -53,7 +53,7 @@ class BaseThemelet
$h_tip = html_escape($image->get_tooltip());
$h_tags = html_escape(strtolower($image->get_tag_list()));
- $extArr = array_flip(['swf', 'svg', 'mp3']); //List of thumbless filetypes
+ $extArr = array_flip([EXTENSION_FLASH, EXTENSION_SVG, EXTENSION_MP3]); //List of thumbless filetypes
if (!isset($extArr[$image->ext])) {
$tsize = get_thumbnail_size($image->width, $image->height);
} else {
diff --git a/core/extension.php b/core/extension.php
index a0060fb0..37d6cad9 100644
--- a/core/extension.php
+++ b/core/extension.php
@@ -275,7 +275,7 @@ abstract class FormatterExtension extends Extension
*/
abstract class DataHandlerExtension extends Extension
{
- protected $SUPPORTED_EXT = [];
+ protected $SUPPORTED_MIME = [];
protected function move_upload_to_archive(DataUploadEvent $event)
{
@@ -403,7 +403,7 @@ abstract class DataHandlerExtension extends Extension
$image->hash = $metadata['hash'];
$image->filename = (($pos = strpos($metadata['filename'], '?')) !== false) ? substr($metadata['filename'], 0, $pos) : $metadata['filename'];
if ($config->get_bool("upload_use_mime")) {
- $image->ext = get_extension(getMimeType($filename));
+ $image->ext = get_extension_for_file($filename);
} else {
$image->ext = (($pos = strpos($metadata['extension'], '?')) !== false) ? substr($metadata['extension'], 0, $pos) : $metadata['extension'];
}
@@ -419,15 +419,20 @@ abstract class DataHandlerExtension extends Extension
protected function supported_ext(string $ext): bool
{
- return in_array(strtolower($ext), $this->SUPPORTED_EXT);
+ return in_array(get_mime_for_extension($ext), $this->SUPPORTED_MIME);
}
public static function get_all_supported_exts(): array
{
$arr = [];
foreach (getSubclassesOf("DataHandlerExtension") as $handler) {
- $arr = array_merge($arr, (new $handler())->SUPPORTED_EXT);
+ $handler = (new $handler());
+
+ foreach($handler->SUPPORTED_MIME as $mime) {
+ $arr = array_merge($arr, get_all_extension_for_mime($mime));
+ }
}
+ $arr = array_unique($arr);
return $arr;
}
}
diff --git a/core/filetypes.php b/core/filetypes.php
new file mode 100644
index 00000000..169ba58e
--- /dev/null
+++ b/core/filetypes.php
@@ -0,0 +1,409 @@
+ [
+ MIME_TYPE_MAP_EXT => [EXTENSION_ANI],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_ANI],
+ ],
+ MIME_TYPE_AVI => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_AVI],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_AVI,'video/avi','video/msvideo'],
+ ],
+ MIME_TYPE_ASF => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_ASF,EXTENSION_WMA,EXTENSION_WMV],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_ASF,'audio/x-ms-wma','video/x-ms-wmv'],
+ ],
+ MIME_TYPE_BMP => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_BMP],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_BMP],
+ ],
+ MIME_TYPE_BZIP => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_BZIP],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_BZIP],
+ ],
+ MIME_TYPE_BZIP2 => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_BZIP2],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_BZIP2],
+ ],
+ MIME_TYPE_COMIC_ZIP => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_CBZ],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_COMIC_ZIP],
+ ],
+ MIME_TYPE_CSS => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_CSS],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_CSS],
+ ],
+ MIME_TYPE_CSV => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_CSV],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_CSV],
+ ],
+ MIME_TYPE_FLASH => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_FLASH],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_FLASH],
+ ],
+ MIME_TYPE_FLASH_VIDEO => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_FLASH_VIDEO],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_FLASH_VIDEO,'video/flv'],
+ ],
+ MIME_TYPE_GIF => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_GIF],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_GIF],
+ ],
+ MIME_TYPE_GZIP => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_GZIP],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_TAR],
+ ],
+ MIME_TYPE_HTML => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_HTM, EXTENSION_HTML],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_HTML],
+ ],
+ MIME_TYPE_ICO => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_ICO, EXTENSION_CUR],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_ICO, MIME_TYPE_WIN_BITMAP],
+ ],
+ MIME_TYPE_JPEG => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_JPG, EXTENSION_JPEG, EXTENSION_JFIF, EXTENSION_JFI],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_JPEG],
+ ],
+ MIME_TYPE_JS => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_JS],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_JS],
+ ],
+ MIME_TYPE_JSON => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_JSON],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_JSON],
+ ],
+ MIME_TYPE_MKV => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_MKV],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_MKV],
+ ],
+ MIME_TYPE_MP3 => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_MP3],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_MP3],
+ ],
+ MIME_TYPE_MP4_AUDIO => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_M4A],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_MP4_AUDIO,"audio/m4a"],
+ ],
+ MIME_TYPE_MP4_VIDEO => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_MP4,EXTENSION_M4V],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_MP4_VIDEO,'video/x-m4v'],
+ ],
+ MIME_TYPE_MPEG => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_MPG,EXTENSION_MPEG],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_MPEG],
+ ],
+ MIME_TYPE_PDF => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_PDF],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_PDF],
+ ],
+ MIME_TYPE_PHP => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_PHP,EXTENSION_PHP5],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_PHP],
+ ],
+ MIME_TYPE_PNG => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_PNG],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_PNG],
+ ],
+ MIME_TYPE_PSD => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_PSD],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_PSD],
+ ],
+ MIME_TYPE_OGG_AUDIO => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_OGG_AUDIO,EXTENSION_OGG],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_OGG_AUDIO,MIME_TYPE_OGG],
+ ],
+ MIME_TYPE_OGG_VIDEO => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_OGG_VIDEO],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_OGG_VIDEO],
+ ],
+ MIME_TYPE_QUICKTIME => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_MOV],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_QUICKTIME],
+ ],
+ MIME_TYPE_RSS => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_RSS],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_RSS],
+ ],
+ MIME_TYPE_SVG => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_SVG],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_SVG],
+ ],
+ MIME_TYPE_TAR => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_TAR],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_TAR],
+ ],
+ MIME_TYPE_TEXT => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_TEXT, EXTENSION_ASC],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_TEXT],
+ ],
+ MIME_TYPE_TIFF => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_TIF,EXTENSION_TIFF],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_TIFF],
+ ],
+ MIME_TYPE_WAV => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_WAV],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_WAV],
+ ],
+ MIME_TYPE_WEBM => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_WEBM],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_WEBM],
+ ],
+ MIME_TYPE_WEBP => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_WEBP],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_WEBP],
+ ],
+ MIME_TYPE_XML => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_XML],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_XML,MIME_TYPE_XML_APPLICATION],
+ ],
+ MIME_TYPE_XSL => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_XSL],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_XSL],
+ ],
+ MIME_TYPE_ZIP => [
+ MIME_TYPE_MAP_EXT => [EXTENSION_ZIP],
+ MIME_TYPE_MAP_MIME => [MIME_TYPE_ZIP],
+ ],
+];
+
+/**
+ * Returns the mimetype that matches the provided extension.
+ */
+function get_mime_for_extension(string $ext): ?string
+{
+ $ext = strtolower($ext);
+
+ foreach (MIME_TYPE_MAP as $key=>$value) {
+ if(in_array($ext,$value[MIME_TYPE_MAP_EXT])) {
+ return $key;
+ }
+ }
+ return null;
+}
+
+/**
+ * Returns the mimetype for the specified file, trying file inspection methods before falling back on extension-based detection.
+ * @param String $file
+ * @param String $ext The files extension, for if the current filename somehow lacks the extension
+ * @return String The extension that was found.
+ */
+function get_mime(string $file, string $ext=""): string
+{
+ if(!file_exists($file)) {
+ throw new SCoreException("File not found: ".$file);
+ }
+
+ $type = false;
+
+ if (extension_loaded('fileinfo')) {
+ $finfo = finfo_open(FILEINFO_MIME_TYPE);
+ try {
+ $type = finfo_file($finfo, $file);
+ } finally {
+ finfo_close($finfo);
+ }
+ } elseif (function_exists('mime_content_type')) {
+ // If anyone is still using mime_content_type()
+ $type = trim(mime_content_type($file));
+ }
+
+ if($type===false || empty($type)) {
+ // Checking by extension is our last resort
+ if($ext==null||strlen($ext) == 0)
+ $ext = pathinfo($file, PATHINFO_EXTENSION);
+
+ $type = get_mime_for_extension($ext);
+ }
+
+ if ($type !== false && strlen($type) > 0) {
+ return $type;
+ }
+
+ return MIME_TYPE_OCTET_STREAM;
+}
+
+/**
+ * Returns the file extension associated with the specified mimetype.
+ */
+function get_extension(?string $mime_type): ?string
+{
+ if (empty($mime_type)) {
+ return null;
+ }
+
+ if($mime_type==MIME_TYPE_OCTET_STREAM) {
+ return null;
+ }
+
+ foreach (MIME_TYPE_MAP as $key=>$value) {
+ if(in_array($mime_type,$value[MIME_TYPE_MAP_MIME])) {
+ return $value[MIME_TYPE_MAP_EXT][0];
+ }
+ }
+ return null;
+}
+
+/**
+ * Returns all of the file extensions associated with the specified mimetype.
+ */
+function get_all_extension_for_mime(?string $mime_type): array
+{
+ $output = [];
+ if (empty($mime_type)) {
+ return $output;
+ }
+
+ foreach (MIME_TYPE_MAP as $key=>$value) {
+ if(in_array($mime_type,$value[MIME_TYPE_MAP_MIME])) {
+ $output = array_merge($output, $value[MIME_TYPE_MAP_EXT]);
+ }
+ }
+ return $output;
+}
+
+/**
+ * Gets an the extension defined in MIME_TYPE_MAP for a file.
+ *
+ * @param String $file_path
+ * @return String The extension that was found, or null if one can not be found.
+ */
+function get_extension_for_file(String $file_path): ?String
+{
+ $mime = get_mime($file_path);
+ if (!empty($mime)) {
+ if($mime==MIME_TYPE_OCTET_STREAM) {
+ return null;
+ } else {
+ $ext = get_extension($mime);
+ }
+ if (!empty($ext)) {
+ return $ext;
+ }
+ }
+ return null;
+}
diff --git a/core/imageboard/image.php b/core/imageboard/image.php
index 513ddbc1..6b786472 100644
--- a/core/imageboard/image.php
+++ b/core/imageboard/image.php
@@ -570,7 +570,7 @@ class Image
*/
public function get_mime_type(): string
{
- return getMimeType($this->get_image_filename(), $this->get_ext());
+ return get_mime($this->get_image_filename(), $this->get_ext());
}
/**
diff --git a/core/imageboard/misc.php b/core/imageboard/misc.php
index 393e0f94..2fe18795 100644
--- a/core/imageboard/misc.php
+++ b/core/imageboard/misc.php
@@ -142,7 +142,7 @@ function create_scaled_image(string $inname, string $outname, array $tsize, stri
}
$output_format = $config->get_string(ImageConfig::THUMB_TYPE);
- if ($output_format=="webp") {
+ if ($output_format==EXTENSION_WEBP) {
$output_format = Media::WEBP_LOSSY;
}
diff --git a/core/imageboard/tag.php b/core/imageboard/tag.php
index 6b10de46..129bdc39 100644
--- a/core/imageboard/tag.php
+++ b/core/imageboard/tag.php
@@ -116,8 +116,6 @@ class Tag
for ($i = 0; $i < count($tags1); $i++) {
if ($tags1[$i]!==$tags2[$i]) {
- var_dump($tags1);
- var_dump($tags2);
return false;
}
}
diff --git a/core/polyfills.php b/core/polyfills.php
index 0b733987..38c82baf 100644
--- a/core/polyfills.php
+++ b/core/polyfills.php
@@ -3,6 +3,9 @@
* Things which should be in the core API *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+require_once "filetypes.php";
+
+
/**
* Return the unique elements of an array, case insensitively
*/
@@ -253,99 +256,6 @@ if (!function_exists('mb_strlen')) {
}
}
-const MIME_TYPE_MAP = [
- 'jpg' => 'image/jpeg',
- 'gif' => 'image/gif',
- 'png' => 'image/png',
- 'tif' => 'image/tiff',
- 'tiff' => 'image/tiff',
- 'ico' => 'image/x-icon',
- 'swf' => 'application/x-shockwave-flash',
- 'flv' => 'video/x-flv',
- 'svg' => 'image/svg+xml',
- 'pdf' => 'application/pdf',
- 'zip' => 'application/zip',
- 'gz' => 'application/x-gzip',
- 'tar' => 'application/x-tar',
- 'bz' => 'application/x-bzip',
- 'bz2' => 'application/x-bzip2',
- 'txt' => 'text/plain',
- 'asc' => 'text/plain',
- 'htm' => 'text/html',
- 'html' => 'text/html',
- 'css' => 'text/css',
- 'js' => 'text/javascript',
- 'xml' => 'text/xml',
- 'xsl' => 'application/xsl+xml',
- 'ogg' => 'application/ogg',
- 'mp3' => 'audio/mpeg',
- 'wav' => 'audio/x-wav',
- 'avi' => 'video/x-msvideo',
- 'mpg' => 'video/mpeg',
- 'mpeg' => 'video/mpeg',
- 'mov' => 'video/quicktime',
- 'php' => 'text/x-php',
- 'mp4' => 'video/mp4',
- 'ogv' => 'video/ogg',
- 'webm' => 'video/webm',
- 'webp' => 'image/webp',
- 'bmp' =>'image/x-ms-bmp',
- 'psd' => 'image/vnd.adobe.photoshop',
- 'mkv' => 'video/x-matroska'
-];
-
-/**
- * Get MIME type for file
- *
- * The contents of this function are taken from the __getMimeType() function
- * from the "Amazon S3 PHP class" which is Copyright (c) 2008, Donovan Schönknecht
- * and released under the 'Simplified BSD License'.
- */
-function getMimeType(string $file, string $ext=""): string
-{
- // Static extension lookup
- $ext = strtolower($ext);
-
- if (array_key_exists($ext, MIME_TYPE_MAP)) {
- return MIME_TYPE_MAP[$ext];
- }
-
- $type = false;
- // Fileinfo documentation says fileinfo_open() will use the
- // MAGIC env var for the magic file
- if (extension_loaded('fileinfo') && isset($_ENV['MAGIC']) &&
- ($finfo = finfo_open(FILEINFO_MIME, $_ENV['MAGIC'])) !== false) {
- if (($type = finfo_file($finfo, $file)) !== false) {
- // Remove the charset and grab the last content-type
- $type = explode(' ', str_replace('; charset=', ';charset=', $type));
- $type = array_pop($type);
- $type = explode(';', $type);
- $type = trim(array_shift($type));
- }
- finfo_close($finfo);
-
- // If anyone is still using mime_content_type()
- } elseif (function_exists('mime_content_type')) {
- $type = trim(mime_content_type($file));
- }
-
- if ($type !== false && strlen($type) > 0) {
- return $type;
- }
-
- return 'application/octet-stream';
-}
-
-function get_extension(?string $mime_type): ?string
-{
- if (empty($mime_type)) {
- return null;
- }
-
- $ext = array_search($mime_type, MIME_TYPE_MAP);
- return ($ext ? $ext : null);
-}
-
/** @noinspection PhpUnhandledExceptionInspection */
function getSubclassesOf(string $parent)
{
@@ -860,3 +770,4 @@ function stringer($s)
}
return (string)$s;
}
+
diff --git a/ext/alias_editor/main.php b/ext/alias_editor/main.php
index e8a3a678..f3d4f979 100644
--- a/ext/alias_editor/main.php
+++ b/ext/alias_editor/main.php
@@ -96,7 +96,7 @@ class AliasEditor extends Extension
$this->theme->display_aliases($t->table($t->query()), $t->paginator());
} elseif ($event->get_arg(0) == "export") {
$page->set_mode(PageMode::DATA);
- $page->set_type("text/csv");
+ $page->set_type(MIME_TYPE_CSV);
$page->set_filename("aliases.csv");
$page->set_data($this->get_alias_csv($database));
} elseif ($event->get_arg(0) == "import") {
diff --git a/ext/auto_tagger/main.php b/ext/auto_tagger/main.php
index da32789a..8f8d16b9 100644
--- a/ext/auto_tagger/main.php
+++ b/ext/auto_tagger/main.php
@@ -98,7 +98,7 @@ class AutoTagger extends Extension
$this->theme->display_auto_tagtable($t->table($t->query()), $t->paginator());
} elseif ($event->get_arg(0) == "export") {
$page->set_mode(PageMode::DATA);
- $page->set_type("text/csv");
+ $page->set_type(MIME_TYPE_CSV);
$page->set_filename("auto_tag.csv");
$page->set_data($this->get_auto_tag_csv($database));
} elseif ($event->get_arg(0) == "import") {
diff --git a/ext/autocomplete/main.php b/ext/autocomplete/main.php
index 843c8536..4d459651 100644
--- a/ext/autocomplete/main.php
+++ b/ext/autocomplete/main.php
@@ -20,7 +20,7 @@ class AutoComplete extends Extension
}
$page->set_mode(PageMode::DATA);
- $page->set_type("application/json");
+ $page->set_type(MIME_TYPE_JSON);
$s = strtolower($_GET["s"]);
if (
diff --git a/ext/browser_search/main.php b/ext/browser_search/main.php
index d29326e0..c3965896 100644
--- a/ext/browser_search/main.php
+++ b/ext/browser_search/main.php
@@ -42,7 +42,7 @@ class BrowserSearch extends Extension
// And now to send it to the browser
$page->set_mode(PageMode::DATA);
- $page->set_type("text/xml");
+ $page->set_type(MIME_TYPE_XML);
$page->set_data($xml);
} elseif ($event->page_matches("browser_search")) {
$suggestions = $config->get_string("search_suggestions_results_order");
diff --git a/ext/danbooru_api/main.php b/ext/danbooru_api/main.php
index 4eadd66c..0892e3fd 100644
--- a/ext/danbooru_api/main.php
+++ b/ext/danbooru_api/main.php
@@ -10,13 +10,13 @@ class DanbooruApi extends Extension
if ($event->page_matches("api/danbooru/add_post") || $event->page_matches("api/danbooru/post/create.xml")) {
// No XML data is returned from this function
- $page->set_type("text/plain");
+ $page->set_type(MIME_TYPE_TEXT);
$this->api_add_post();
} elseif ($event->page_matches("api/danbooru/find_posts") || $event->page_matches("api/danbooru/post/index.xml")) {
- $page->set_type("application/xml");
+ $page->set_type(MIME_TYPE_XML_APPLICATION);
$page->set_data($this->api_find_posts());
} elseif ($event->page_matches("api/danbooru/find_tags")) {
- $page->set_type("application/xml");
+ $page->set_type(MIME_TYPE_XML_APPLICATION);
$page->set_data($this->api_find_tags());
}
diff --git a/ext/handle_archive/main.php b/ext/handle_archive/main.php
index 04937c90..d493d354 100644
--- a/ext/handle_archive/main.php
+++ b/ext/handle_archive/main.php
@@ -2,7 +2,7 @@
class ArchiveFileHandler extends DataHandlerExtension
{
- protected $SUPPORTED_EXT = ["zip"];
+ protected $SUPPORTED_MIME = [MIME_TYPE_ZIP];
public function onInitExt(InitExtEvent $event)
{
diff --git a/ext/handle_cbz/main.php b/ext/handle_cbz/main.php
index b9011c52..c6ce429e 100644
--- a/ext/handle_cbz/main.php
+++ b/ext/handle_cbz/main.php
@@ -2,7 +2,7 @@
class CBZFileHandler extends DataHandlerExtension
{
- public $SUPPORTED_EXT = ["cbz"];
+ public $SUPPORTED_MIME = [MIME_TYPE_COMIC_ZIP];
protected function media_check_properties(MediaCheckPropertiesEvent $event): void
{
@@ -27,7 +27,7 @@ class CBZFileHandler extends DataHandlerExtension
$cover,
warehouse_path(Image::THUMBNAIL_DIR, $hash),
get_thumbnail_max_size_scaled(),
- get_extension(getMimeType($cover)),
+ get_extension(get_mime($cover)),
null
);
return true;
diff --git a/ext/handle_flash/main.php b/ext/handle_flash/main.php
index 2f8fd1aa..2bad8e3e 100644
--- a/ext/handle_flash/main.php
+++ b/ext/handle_flash/main.php
@@ -2,7 +2,7 @@
class FlashFileHandler extends DataHandlerExtension
{
- protected $SUPPORTED_EXT = ["swf"];
+ protected $SUPPORTED_MIME = [MIME_TYPE_FLASH];
protected function media_check_properties(MediaCheckPropertiesEvent $event): void
{
diff --git a/ext/handle_ico/main.php b/ext/handle_ico/main.php
index f80555d3..50e570fd 100644
--- a/ext/handle_ico/main.php
+++ b/ext/handle_ico/main.php
@@ -2,7 +2,7 @@
class IcoFileHandler extends DataHandlerExtension
{
- protected $SUPPORTED_EXT = ["ico", "ani", "cur"];
+ protected $SUPPORTED_MIME = [MIME_TYPE_ICO, MIME_TYPE_ANI];
protected function media_check_properties(MediaCheckPropertiesEvent $event): void
{
diff --git a/ext/handle_mp3/main.php b/ext/handle_mp3/main.php
index 1d943b62..17123bff 100644
--- a/ext/handle_mp3/main.php
+++ b/ext/handle_mp3/main.php
@@ -2,7 +2,7 @@
class MP3FileHandler extends DataHandlerExtension
{
- protected $SUPPORTED_EXT = ["mp3"];
+ protected $SUPPORTED_MIME = [MIME_TYPE_MP3];
protected function media_check_properties(MediaCheckPropertiesEvent $event): void
{
@@ -23,6 +23,6 @@ class MP3FileHandler extends DataHandlerExtension
protected function check_contents(string $tmpname): bool
{
- return getMimeType($tmpname) == 'audio/mpeg';
+ return get_mime($tmpname) === MIME_TYPE_MP3;
}
}
diff --git a/ext/handle_pixel/main.php b/ext/handle_pixel/main.php
index c44f7bd0..0ba5c73e 100644
--- a/ext/handle_pixel/main.php
+++ b/ext/handle_pixel/main.php
@@ -2,13 +2,13 @@
class PixelFileHandler extends DataHandlerExtension
{
- protected $SUPPORTED_EXT = ["jpg", "jpeg", "gif", "png", "webp"];
+ protected $SUPPORTED_MIME = [MIME_TYPE_JPEG, MIME_TYPE_GIF, MIME_TYPE_PNG, MIME_TYPE_WEBP];
protected function media_check_properties(MediaCheckPropertiesEvent $event): void
{
if (in_array($event->ext, Media::LOSSLESS_FORMATS)) {
$event->image->lossless = true;
- } elseif ($event->ext=="webp") {
+ } elseif ($event->ext==EXTENSION_WEBP) {
$event->image->lossless = Media::is_lossless_webp($event->file_name);
}
@@ -17,10 +17,10 @@ class PixelFileHandler extends DataHandlerExtension
}
$event->image->audio = false;
switch ($event->ext) {
- case "gif":
+ case EXTENSION_GIF:
$event->image->video = Media::is_animated_gif($event->file_name);
break;
- case "webp":
+ case EXTENSION_WEBP:
$event->image->video = Media::is_animated_webp($event->file_name);
break;
default:
diff --git a/ext/handle_svg/main.php b/ext/handle_svg/main.php
index 84eb19a6..7b366a4a 100644
--- a/ext/handle_svg/main.php
+++ b/ext/handle_svg/main.php
@@ -3,7 +3,7 @@ use enshrined\svgSanitize\Sanitizer;
class SVGFileHandler extends DataHandlerExtension
{
- protected $SUPPORTED_EXT = ["svg"];
+ protected $SUPPORTED_MIME = [MIME_TYPE_SVG];
/** @var SVGFileHandlerTheme */
protected $theme;
@@ -16,7 +16,7 @@ class SVGFileHandler extends DataHandlerExtension
$image = Image::by_id($id);
$hash = $image->hash;
- $page->set_type("image/svg+xml");
+ $page->set_type(MIME_TYPE_SVG);
$page->set_mode(PageMode::DATA);
$sanitizer = new Sanitizer();
@@ -67,7 +67,7 @@ class SVGFileHandler extends DataHandlerExtension
protected function check_contents(string $file): bool
{
- if (getMimeType($file)!="image/svg+xml") {
+ if (get_mime($file)!==MIME_TYPE_SVG) {
return false;
}
diff --git a/ext/handle_video/main.php b/ext/handle_video/main.php
index 5b5b3beb..cd3d5453 100644
--- a/ext/handle_video/main.php
+++ b/ext/handle_video/main.php
@@ -3,13 +3,12 @@
class VideoFileHandler extends DataHandlerExtension
{
protected $SUPPORTED_MIME = [
- 'video/webm',
- 'video/mp4',
- 'video/ogg',
- 'video/flv',
- 'video/x-flv'
+ MIME_TYPE_WEBM,
+ MIME_TYPE_MP4_VIDEO,
+ MIME_TYPE_OGG_VIDEO,
+ MIME_TYPE_FLASH_VIDEO,
];
- protected $SUPPORTED_EXT = ["flv", "mp4", "m4v", "ogv", "webm"];
+ protected $SUPPORTED_EXT = [EXTENSION_FLASH_VIDEO, EXTENSION_MP4, EXTENSION_M4V, EXTENSION_OGG_VIDEO, EXTENSION_WEBM];
public function onInitExt(InitExtEvent $event)
{
@@ -87,6 +86,6 @@ class VideoFileHandler extends DataHandlerExtension
protected function check_contents(string $tmpname): bool
{
- return in_array(getMimeType($tmpname), $this->SUPPORTED_MIME);
+ return in_array(get_mime($tmpname), $this->SUPPORTED_MIME);
}
}
diff --git a/ext/handle_video/theme.php b/ext/handle_video/theme.php
index 24619e0c..f0e7b71e 100644
--- a/ext/handle_video/theme.php
+++ b/ext/handle_video/theme.php
@@ -2,6 +2,9 @@
class VideoFileHandlerTheme extends Themelet
{
+
+ const SUPPORTED_TYPES = [MIME_TYPE_MP4_VIDEO, MIME_TYPE_OGG_VIDEO, MIME_TYPE_WEBM, MIME_TYPE_FLASH_VIDEO];
+
public function display_image(Page $page, Image $image)
{
global $config;
@@ -16,10 +19,11 @@ class VideoFileHandlerTheme extends Themelet
$html = "Video not playing? Click here to download the file.
";
//Browser media format support: https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
- $supportedExts = ['mp4' => 'video/mp4', 'm4v' => 'video/mp4', 'ogv' => 'video/ogg', 'webm' => 'video/webm', 'flv' => 'video/flv'];
- if (array_key_exists($ext, $supportedExts)) {
+ $mime = get_mime_for_extension($ext);
+
+ if (in_array($mime, self::SUPPORTED_TYPES)) {
//FLV isn't supported by