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