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