xref: /plugin/combo/ComboStrap/PathAbs.php (revision 4cadd4f8c541149bdda95f080e38a6d4e3a640ca)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7c3437056SNickeauuse renderer_plugin_combo_analytics;
8c3437056SNickeau
9c3437056SNickeauabstract class PathAbs implements Path
10c3437056SNickeau{
11c3437056SNickeau
12c3437056SNickeau
13c3437056SNickeau    public function getExtension()
14c3437056SNickeau    {
15c3437056SNickeau        return pathinfo($this->getLastName(), PATHINFO_EXTENSION);
16c3437056SNickeau    }
17c3437056SNickeau
18c3437056SNickeau    /**
19c3437056SNickeau     *
20c3437056SNickeau     * @return Mime based on the {@link PathAbs::getExtension()}
21c3437056SNickeau     */
22c3437056SNickeau    public function getMime(): ?Mime
23c3437056SNickeau    {
24c3437056SNickeau        $extension = $this->getExtension();
25c3437056SNickeau        switch ($extension) {
26c3437056SNickeau            case ImageSvg::EXTENSION:
27c3437056SNickeau                /**
28c3437056SNickeau                 * Svg is authorized when viewing but is not part
29c3437056SNickeau                 * of the {@link File::getKnownMime()}
30c3437056SNickeau                 */
31c3437056SNickeau                return new Mime(Mime::SVG);
32c3437056SNickeau            case JavascriptLibrary::EXTENSION:
33c3437056SNickeau                return new Mime(Mime::JAVASCRIPT);
34c3437056SNickeau            case renderer_plugin_combo_analytics::RENDERER_NAME_MODE:
35c3437056SNickeau            case Json::EXTENSION:
36c3437056SNickeau                return new Mime(Mime::JSON);
37c3437056SNickeau            case "txt":
38c3437056SNickeau                return new Mime(Mime::PLAIN_TEXT);
39c3437056SNickeau            case "xhtml":
40c3437056SNickeau            case "html":
41c3437056SNickeau                return new Mime(Mime::HTML);
42c3437056SNickeau            case "png":
43c3437056SNickeau                return new Mime(Mime::PNG);
44*4cadd4f8SNickeau            case "css":
45*4cadd4f8SNickeau                return new Mime(Mime::CSS);
46c3437056SNickeau            default:
47c3437056SNickeau                $mime = mimetype($this->getLastName(), true)[1];
48c3437056SNickeau                if ($mime === null || $mime === false) {
49c3437056SNickeau                    return null;
50c3437056SNickeau                }
51c3437056SNickeau                return new Mime($mime);
52c3437056SNickeau        }
53c3437056SNickeau    }
54c3437056SNickeau
55c3437056SNickeau    public function getLastNameWithoutExtension()
56c3437056SNickeau    {
57c3437056SNickeau        return pathinfo($this->getLastName(), PATHINFO_FILENAME);
58c3437056SNickeau    }
59c3437056SNickeau
60c3437056SNickeau    public function __toString()
61c3437056SNickeau    {
62*4cadd4f8SNickeau        return $this->toUriString();
63*4cadd4f8SNickeau    }
64*4cadd4f8SNickeau
65*4cadd4f8SNickeau
66*4cadd4f8SNickeau    public function toUriString(): string
67*4cadd4f8SNickeau    {
68c3437056SNickeau        return $this->toString();
69c3437056SNickeau    }
70c3437056SNickeau
71*4cadd4f8SNickeau    /**
72*4cadd4f8SNickeau     * @throws ExceptionCombo
73*4cadd4f8SNickeau     */
74*4cadd4f8SNickeau    function toDokuPath(): DokuPath
75*4cadd4f8SNickeau    {
76*4cadd4f8SNickeau        if($this instanceof DokuPath){
77*4cadd4f8SNickeau            return $this;
78*4cadd4f8SNickeau        }
79*4cadd4f8SNickeau        if($this instanceof LocalPath){
80*4cadd4f8SNickeau            return $this->toDokuPath();
81*4cadd4f8SNickeau        }
82*4cadd4f8SNickeau        throw new ExceptionCombo("This is not a doku path or local path");
83*4cadd4f8SNickeau    }
84*4cadd4f8SNickeau
85c3437056SNickeau
86c3437056SNickeau}
87