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