1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 7c3437056SNickeauclass Mime 8c3437056SNickeau{ 9c3437056SNickeau 10c3437056SNickeau public const JSON = "application/json"; 11c3437056SNickeau public const HTML = "text/html"; 12c3437056SNickeau public const XHTML = self::HTML; 13c3437056SNickeau const PLAIN_TEXT = "text/plain"; 14c3437056SNickeau const HEADER_CONTENT_TYPE = "Content-Type"; 15c3437056SNickeau public const SVG = "image/svg+xml"; 16c3437056SNickeau public const JAVASCRIPT = "text/javascript"; 17c3437056SNickeau const PNG = "image/png"; 18c3437056SNickeau const GIF = "image/gif"; 19c3437056SNickeau const JPEG = "image/jpeg"; 20c3437056SNickeau const BMP = "image/bmp"; 21c3437056SNickeau const WEBP = "image/webp"; 22*4cadd4f8SNickeau const CSS = "text/css"; 23c3437056SNickeau /** 24c3437056SNickeau * @var array|null 25c3437056SNickeau */ 26c3437056SNickeau private static $knownTypes; 27c3437056SNickeau 28c3437056SNickeau /** 29c3437056SNickeau * @var string 30c3437056SNickeau */ 31c3437056SNickeau private $mime; 32c3437056SNickeau 33c3437056SNickeau /** 34c3437056SNickeau * Mime constructor. 35c3437056SNickeau */ 36c3437056SNickeau public function __construct(string $mime) 37c3437056SNickeau { 38c3437056SNickeau if (trim($mime) === "") { 39c3437056SNickeau LogUtility::msg("The mime should not be an empty string"); 40c3437056SNickeau } 41c3437056SNickeau $this->mime = $mime; 42c3437056SNickeau } 43c3437056SNickeau 44c3437056SNickeau public static function create(string $mime): Mime 45c3437056SNickeau { 46c3437056SNickeau return new Mime($mime); 47c3437056SNickeau } 48c3437056SNickeau 49c3437056SNickeau public function __toString() 50c3437056SNickeau { 51c3437056SNickeau return $this->mime; 52c3437056SNickeau } 53c3437056SNickeau 54c3437056SNickeau public function isKnown(): bool 55c3437056SNickeau { 56c3437056SNickeau 57c3437056SNickeau if (self::$knownTypes === null) { 58c3437056SNickeau self::$knownTypes = getMimeTypes(); 59c3437056SNickeau } 60c3437056SNickeau return array_search($this->mime, self::$knownTypes) !== false; 61c3437056SNickeau 62c3437056SNickeau } 63c3437056SNickeau 64c3437056SNickeau public function isTextBased(): bool 65c3437056SNickeau { 66c3437056SNickeau if ($this->getFirstPart() === "text") { 67c3437056SNickeau return true; 68c3437056SNickeau } 69c3437056SNickeau if (in_array($this->mime, [self::SVG, self::JSON])) { 70c3437056SNickeau return true; 71c3437056SNickeau } 72c3437056SNickeau return false; 73c3437056SNickeau } 74c3437056SNickeau 75c3437056SNickeau private function getFirstPart() 76c3437056SNickeau { 77c3437056SNickeau return explode("/", $this->mime)[0]; 78c3437056SNickeau } 79c3437056SNickeau 80c3437056SNickeau public function isImage(): bool 81c3437056SNickeau { 82c3437056SNickeau return substr($this->mime, 0, 5) === 'image'; 83c3437056SNickeau } 84c3437056SNickeau 85c3437056SNickeau public function toString(): string 86c3437056SNickeau { 87c3437056SNickeau return $this->__toString(); 88c3437056SNickeau } 89c3437056SNickeau 90c3437056SNickeau 91c3437056SNickeau} 92