xref: /plugin/combo/ComboStrap/PathAbs.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7c3437056SNickeauabstract class PathAbs implements Path
8c3437056SNickeau{
9c3437056SNickeau
10c3437056SNickeau
11*04fd306cSNickeau    /**
12*04fd306cSNickeau     * @throws ExceptionNotFound
13*04fd306cSNickeau     */
14*04fd306cSNickeau    public function getExtension(): string
15c3437056SNickeau    {
16*04fd306cSNickeau        $extension = pathinfo($this->getLastName(), PATHINFO_EXTENSION);
17*04fd306cSNickeau        if ($extension === "") {
18*04fd306cSNickeau            throw new ExceptionNotFound("No extension found");
19*04fd306cSNickeau        }
20*04fd306cSNickeau        return $extension;
21*04fd306cSNickeau
22*04fd306cSNickeau    }
23*04fd306cSNickeau
24*04fd306cSNickeau    /**
25*04fd306cSNickeau     * @return Mime based on the {@link PathAbs::getExtension()}
26*04fd306cSNickeau     * @throws ExceptionNotFound
27*04fd306cSNickeau     * @deprecated see {@link FileSystems::getMime()}
28*04fd306cSNickeau     */
29*04fd306cSNickeau    public function getMime(): Mime
30*04fd306cSNickeau    {
31*04fd306cSNickeau
32*04fd306cSNickeau        return FileSystems::getMime($this);
33*04fd306cSNickeau
34*04fd306cSNickeau    }
35*04fd306cSNickeau
36*04fd306cSNickeau    /**
37*04fd306cSNickeau     * @throws ExceptionNotFound
38*04fd306cSNickeau     */
39*04fd306cSNickeau    public function getLastNameWithoutExtension(): string
40*04fd306cSNickeau    {
41*04fd306cSNickeau        $lastName = $this->getLastName();
42*04fd306cSNickeau        $lastPoint = strrpos($lastName, '.');
43*04fd306cSNickeau        if ($lastPoint === false) {
44*04fd306cSNickeau            return $lastName;
45*04fd306cSNickeau        }
46*04fd306cSNickeau        return substr($lastName, 0, $lastPoint);
47c3437056SNickeau    }
48c3437056SNickeau
49c3437056SNickeau    /**
50c3437056SNickeau     *
51c3437056SNickeau     */
52*04fd306cSNickeau    public function getNamesWithoutExtension()
53c3437056SNickeau    {
54*04fd306cSNickeau        $names = $this->getNames();
55*04fd306cSNickeau        $sizeof = sizeof($names);
56*04fd306cSNickeau        if ($sizeof == 0) {
57*04fd306cSNickeau            return $names;
58c3437056SNickeau        }
59*04fd306cSNickeau        $lastName = $names[$sizeof - 1];
60*04fd306cSNickeau        $index = strrpos($lastName, ".");
61*04fd306cSNickeau        if ($index === false) {
62*04fd306cSNickeau            return $names;
63c3437056SNickeau        }
64*04fd306cSNickeau        $names[$sizeof - 1] = substr($lastName, 0, $index);
65*04fd306cSNickeau        return $names;
66c3437056SNickeau    }
67c3437056SNickeau
68c3437056SNickeau    public function __toString()
69c3437056SNickeau    {
704cadd4f8SNickeau        return $this->toUriString();
714cadd4f8SNickeau    }
724cadd4f8SNickeau
734cadd4f8SNickeau
744cadd4f8SNickeau    public function toUriString(): string
754cadd4f8SNickeau    {
76*04fd306cSNickeau        return $this->toAbsoluteId();
77c3437056SNickeau    }
78c3437056SNickeau
794cadd4f8SNickeau    /**
80*04fd306cSNickeau     * @throws ExceptionCast when
81*04fd306cSNickeau     * Utility {@link WikiPath::createFromPathObject()}
824cadd4f8SNickeau     */
83*04fd306cSNickeau    function toWikiPath(): WikiPath
844cadd4f8SNickeau    {
85*04fd306cSNickeau        if ($this instanceof WikiPath) {
864cadd4f8SNickeau            return $this;
874cadd4f8SNickeau        }
884cadd4f8SNickeau        if ($this instanceof LocalPath) {
89*04fd306cSNickeau            try {
90*04fd306cSNickeau                return $this->toWikiPath();
91*04fd306cSNickeau            } catch (ExceptionBadArgument|ExceptionCast $e) {
92*04fd306cSNickeau                throw new ExceptionCast($e);
934cadd4f8SNickeau            }
94*04fd306cSNickeau        }
95*04fd306cSNickeau        if ($this instanceof MarkupPath) {
96*04fd306cSNickeau            try {
97*04fd306cSNickeau                return $this->getPathObject()->toWikiPath();
98*04fd306cSNickeau            } catch (ExceptionCast $e) {
99*04fd306cSNickeau                throw new ExceptionCast($e);
100*04fd306cSNickeau            }
101*04fd306cSNickeau        }
102*04fd306cSNickeau        throw new ExceptionCast("This is not a wiki path or local path");
103*04fd306cSNickeau    }
104*04fd306cSNickeau
105*04fd306cSNickeau    /**
106*04fd306cSNickeau     * @throws ExceptionCast when
107*04fd306cSNickeau     */
108*04fd306cSNickeau    function toLocalPath(): LocalPath
109*04fd306cSNickeau    {
110*04fd306cSNickeau        if ($this instanceof LocalPath) {
111*04fd306cSNickeau            return $this;
112*04fd306cSNickeau        }
113*04fd306cSNickeau        if ($this instanceof WikiPath) {
114*04fd306cSNickeau            return $this->toLocalPath();
115*04fd306cSNickeau        }
116*04fd306cSNickeau        if ($this instanceof MarkupPath) {
117*04fd306cSNickeau            return $this->getPathObject()->toLocalPath();
118*04fd306cSNickeau        }
119*04fd306cSNickeau        throw new ExceptionCast("Unable to cast to LocalPath as this path is not a wiki path or a local path but a " . get_class($this));
1204cadd4f8SNickeau    }
1214cadd4f8SNickeau
122c3437056SNickeau
123c3437056SNickeau}
124