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