xref: /plugin/combo/ComboStrap/WikiFileSystem.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeaunamespace ComboStrap;
5*04fd306cSNickeau
6*04fd306cSNickeau
7*04fd306cSNickeauuse DateTime;
8*04fd306cSNickeau
9*04fd306cSNickeau/**
10*04fd306cSNickeau *
11*04fd306cSNickeau * @package ComboStrap
12*04fd306cSNickeau *
13*04fd306cSNickeau * The wiki file system is based
14*04fd306cSNickeau * on drive name (such as page and media)
15*04fd306cSNickeau * that locates a directory on the local file system
16*04fd306cSNickeau */
17*04fd306cSNickeauclass WikiFileSystem implements FileSystem
18*04fd306cSNickeau{
19*04fd306cSNickeau
20*04fd306cSNickeau
21*04fd306cSNickeau    public const SCHEME = 'wiki';
22*04fd306cSNickeau
23*04fd306cSNickeau
24*04fd306cSNickeau    /**
25*04fd306cSNickeau     * @var WikiFileSystem
26*04fd306cSNickeau     */
27*04fd306cSNickeau    private static WikiFileSystem $wikiFileSystem;
28*04fd306cSNickeau
29*04fd306cSNickeau    public static function getOrCreate(): WikiFileSystem
30*04fd306cSNickeau    {
31*04fd306cSNickeau        if (!isset(self::$wikiFileSystem)) {
32*04fd306cSNickeau            self::$wikiFileSystem = new WikiFileSystem();
33*04fd306cSNickeau        }
34*04fd306cSNickeau        return self::$wikiFileSystem;
35*04fd306cSNickeau    }
36*04fd306cSNickeau
37*04fd306cSNickeau    /**
38*04fd306cSNickeau     * @param WikiPath $path
39*04fd306cSNickeau     */
40*04fd306cSNickeau    function exists(Path $path): bool
41*04fd306cSNickeau    {
42*04fd306cSNickeau        return FileSystems::exists($path->toLocalPath());
43*04fd306cSNickeau    }
44*04fd306cSNickeau
45*04fd306cSNickeau    /**
46*04fd306cSNickeau     * @param WikiPath $path
47*04fd306cSNickeau     * @throws ExceptionNotFound
48*04fd306cSNickeau     */
49*04fd306cSNickeau    function getContent(Path $path): string
50*04fd306cSNickeau    {
51*04fd306cSNickeau        $localPath = $path->toLocalPath();
52*04fd306cSNickeau        return FileSystems::getContent($localPath);
53*04fd306cSNickeau    }
54*04fd306cSNickeau
55*04fd306cSNickeau    /**
56*04fd306cSNickeau     * @param WikiPath $path
57*04fd306cSNickeau     * @throws ExceptionNotFound
58*04fd306cSNickeau     */
59*04fd306cSNickeau    function getModifiedTime(Path $path): DateTime
60*04fd306cSNickeau    {
61*04fd306cSNickeau        return FileSystems::getModifiedTime($path->toLocalPath());
62*04fd306cSNickeau    }
63*04fd306cSNickeau
64*04fd306cSNickeau    /**
65*04fd306cSNickeau     * @param WikiPath $path
66*04fd306cSNickeau     * @return DateTime
67*04fd306cSNickeau     * @throws ExceptionNotFound
68*04fd306cSNickeau     */
69*04fd306cSNickeau    public function getCreationTime(Path $path): DateTime
70*04fd306cSNickeau    {
71*04fd306cSNickeau        return FileSystems::getCreationTime($path->toLocalPath());
72*04fd306cSNickeau    }
73*04fd306cSNickeau
74*04fd306cSNickeau    /**
75*04fd306cSNickeau     * @param WikiPath $path
76*04fd306cSNickeau     */
77*04fd306cSNickeau    public function delete(Path $path)
78*04fd306cSNickeau    {
79*04fd306cSNickeau        FileSystems::delete($path->toLocalPath());
80*04fd306cSNickeau    }
81*04fd306cSNickeau
82*04fd306cSNickeau    /**
83*04fd306cSNickeau     * @param WikiPath $path
84*04fd306cSNickeau     */
85*04fd306cSNickeau    public function getSize(Path $path)
86*04fd306cSNickeau    {
87*04fd306cSNickeau        return FileSystems::getSize($path->toLocalPath());
88*04fd306cSNickeau    }
89*04fd306cSNickeau
90*04fd306cSNickeau    /**
91*04fd306cSNickeau     * @param WikiPath $dirPath
92*04fd306cSNickeau     * @return mixed
93*04fd306cSNickeau     * @throws ExceptionCompile
94*04fd306cSNickeau     */
95*04fd306cSNickeau    public function createDirectory(Path $dirPath)
96*04fd306cSNickeau    {
97*04fd306cSNickeau        return FileSystems::createDirectory($dirPath->toLocalPath());
98*04fd306cSNickeau    }
99*04fd306cSNickeau
100*04fd306cSNickeau    /**
101*04fd306cSNickeau     * @param WikiPath $path
102*04fd306cSNickeau     * @return bool
103*04fd306cSNickeau     */
104*04fd306cSNickeau    public function isDirectory(Path $path): bool
105*04fd306cSNickeau    {
106*04fd306cSNickeau        return WikiPath::isNamespacePath($path->toAbsoluteId());
107*04fd306cSNickeau        // and not FileSystems::isDirectory($path->toLocalPath());
108*04fd306cSNickeau    }
109*04fd306cSNickeau
110*04fd306cSNickeau    /**
111*04fd306cSNickeau     * @param WikiPath $path
112*04fd306cSNickeau     * @param string|null $type
113*04fd306cSNickeau     * @return WikiPath[]
114*04fd306cSNickeau     */
115*04fd306cSNickeau    public function getChildren(Path $path, string $type = null): array
116*04fd306cSNickeau    {
117*04fd306cSNickeau
118*04fd306cSNickeau        $children = LocalFileSystem::getOrCreate()->getChildren($path->toLocalPath(), $type);
119*04fd306cSNickeau        $childrenWiki = [];
120*04fd306cSNickeau        foreach ($children as $child) {
121*04fd306cSNickeau            try {
122*04fd306cSNickeau                $childrenWiki[] = WikiPath::createFromPathObject($child);
123*04fd306cSNickeau            } catch (ExceptionCompile $e) {
124*04fd306cSNickeau                // Should not happen
125*04fd306cSNickeau                LogUtility::internalError("Unable to get back the wiki path from the local path. Error: {$e->getMessage()}");
126*04fd306cSNickeau            }
127*04fd306cSNickeau        }
128*04fd306cSNickeau        return $childrenWiki;
129*04fd306cSNickeau
130*04fd306cSNickeau    }
131*04fd306cSNickeau
132*04fd306cSNickeau    /**
133*04fd306cSNickeau     * @param WikiPath $path
134*04fd306cSNickeau     * @param string $lastFullName
135*04fd306cSNickeau     * @return Path
136*04fd306cSNickeau     * @throws ExceptionNotFound
137*04fd306cSNickeau     */
138*04fd306cSNickeau    public function closest(Path $path, string $lastFullName): Path
139*04fd306cSNickeau    {
140*04fd306cSNickeau        return FileSystems::closest($path->toLocalPath(), $lastFullName);
141*04fd306cSNickeau    }
142*04fd306cSNickeau
143*04fd306cSNickeau    /**
144*04fd306cSNickeau     * @param WikiPath $path
145*04fd306cSNickeau     * @return void
146*04fd306cSNickeau     */
147*04fd306cSNickeau    public function createRegularFile(Path $path)
148*04fd306cSNickeau    {
149*04fd306cSNickeau        FileSystems::createRegularFile($path->toLocalPath());
150*04fd306cSNickeau    }
151*04fd306cSNickeau
152*04fd306cSNickeau    /**
153*04fd306cSNickeau     * @param WikiPath $path
154*04fd306cSNickeau     * @param string $content
155*04fd306cSNickeau     * @return void
156*04fd306cSNickeau     */
157*04fd306cSNickeau    public function setContent(Path $path, string $content)
158*04fd306cSNickeau    {
159*04fd306cSNickeau        FileSystems::setContent($path->toLocalPath(), $content);
160*04fd306cSNickeau    }
161*04fd306cSNickeau}
162