1 <?php
2 
3 namespace ComboStrap;
4 
5 use DateTime;
6 
7 class MarkupFileSystem implements FileSystem
8 {
9 
10     const SCHEME = "markup";
11     const CANONICAL = "markup-file-system";
12 
13     private static MarkupFileSystem $pageFileSystem;
14 
15     public static function getOrCreate(): MarkupFileSystem
16     {
17         if (!isset(self::$pageFileSystem)) {
18             self::$pageFileSystem = new MarkupFileSystem();
19         }
20         return self::$pageFileSystem;
21     }
22 
23 
24     /**
25      * @param MarkupPath $path
26      * @return bool
27      */
28     function exists(Path $path): bool
29     {
30         return FileSystems::exists($path->getPathObject());
31     }
32 
33     /**
34      * @param MarkupPath $path
35      * @throws ExceptionNotFound
36      */
37     function getContent(Path $path): string
38     {
39         return FileSystems::getContent($path->getPathObject());
40     }
41 
42     /**
43      * @param MarkupPath $path
44      * @throws ExceptionNotFound
45      */
46     function getModifiedTime(Path $path): DateTime
47     {
48         return FileSystems::getModifiedTime($path->getPathObject());
49     }
50 
51     /**
52      * @param MarkupPath $path
53      * @param string|null $type
54      * @return MarkupPath[]
55      */
56     public function getChildren(Path $path, string $type = null): array
57     {
58         /**
59          * A page is never a directory
60          * We get the parent directory, iterate over it and returns the children page
61          */
62         $pathObject = $path->getPathObject();
63         try {
64             $parent = $pathObject->getParent();
65         } catch (ExceptionNotFound $e) {
66             return [];
67         }
68         $childrenPage = [];
69         $childrenPath = FileSystems::getChildren($parent, $type);
70         foreach ($childrenPath as $child) {
71             if ($child->toUriString() === $pathObject->toUriString()) {
72                 continue;
73             }
74             $childrenPage[] = MarkupPath::createPageFromPathObject($child);
75         }
76         return $childrenPage;
77     }
78 
79     public function setContent(Path $path, string $content)
80     {
81         try {
82             FileSystems::setContent($path->toLocalPath(), $content);
83         } catch (ExceptionCast $e) {
84             throw new ExceptionRuntimeInternal("The path could not be cast to a local path", self::CANONICAL, 1, $e);
85         }
86     }
87 
88     public function delete(Path $path)
89     {
90 
91         try {
92             FileSystems::delete($path->toLocalPath());
93         } catch (ExceptionCast|ExceptionFileSystem $e) {
94             throw new ExceptionRuntimeInternal("The path could not be deleted", self::CANONICAL, 1, $e);
95         }
96 
97     }
98 }
99