xref: /template/strap/ComboStrap/Mime.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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