1*c3437056SNickeau<?php 2*c3437056SNickeau 3*c3437056SNickeau 4*c3437056SNickeaunamespace ComboStrap; 5*c3437056SNickeau 6*c3437056SNickeau/** 7*c3437056SNickeau * Class LocalPath 8*c3437056SNickeau * @package ComboStrap 9*c3437056SNickeau * A local file system path 10*c3437056SNickeau */ 11*c3437056SNickeauclass LocalPath extends PathAbs 12*c3437056SNickeau{ 13*c3437056SNickeau 14*c3437056SNickeau private const FILE_SYSTEM_DIRECTORY_SEPARATOR = DIRECTORY_SEPARATOR; 15*c3437056SNickeau 16*c3437056SNickeau private $path; 17*c3437056SNickeau 18*c3437056SNickeau /** 19*c3437056SNickeau * LocalPath constructor. 20*c3437056SNickeau * @param $path 21*c3437056SNickeau */ 22*c3437056SNickeau public function __construct($path) 23*c3437056SNickeau { 24*c3437056SNickeau $this->path = $path; 25*c3437056SNickeau } 26*c3437056SNickeau 27*c3437056SNickeau 28*c3437056SNickeau public static function create(string $filePath): LocalPath 29*c3437056SNickeau { 30*c3437056SNickeau return new LocalPath($filePath); 31*c3437056SNickeau } 32*c3437056SNickeau 33*c3437056SNickeau public static function createFromPath(string $string): LocalPath 34*c3437056SNickeau { 35*c3437056SNickeau return new LocalPath($string); 36*c3437056SNickeau } 37*c3437056SNickeau 38*c3437056SNickeau function getScheme(): string 39*c3437056SNickeau { 40*c3437056SNickeau return LocalFs::SCHEME; 41*c3437056SNickeau } 42*c3437056SNickeau 43*c3437056SNickeau function getLastName() 44*c3437056SNickeau { 45*c3437056SNickeau $names = $this->getNames(); 46*c3437056SNickeau $sizeof = sizeof($names); 47*c3437056SNickeau if ($sizeof === 0) { 48*c3437056SNickeau return null; 49*c3437056SNickeau } 50*c3437056SNickeau return $names[$sizeof - 1]; 51*c3437056SNickeau 52*c3437056SNickeau } 53*c3437056SNickeau 54*c3437056SNickeau public function getExtension() 55*c3437056SNickeau { 56*c3437056SNickeau return pathinfo($this->path, PATHINFO_EXTENSION); 57*c3437056SNickeau } 58*c3437056SNickeau 59*c3437056SNickeau function getNames() 60*c3437056SNickeau { 61*c3437056SNickeau $directorySeparator = $this->getDirectorySeparator(); 62*c3437056SNickeau return explode($directorySeparator, $this->path); 63*c3437056SNickeau } 64*c3437056SNickeau 65*c3437056SNickeau function getDokuwikiId() 66*c3437056SNickeau { 67*c3437056SNickeau throw new ExceptionComboRuntime("Not implemented"); 68*c3437056SNickeau } 69*c3437056SNickeau 70*c3437056SNickeau 71*c3437056SNickeau function toString() 72*c3437056SNickeau { 73*c3437056SNickeau return $this->path; 74*c3437056SNickeau } 75*c3437056SNickeau 76*c3437056SNickeau public function getParent(): ?Path 77*c3437056SNickeau { 78*c3437056SNickeau $absolutePath = pathinfo($this->path, PATHINFO_DIRNAME); 79*c3437056SNickeau if (empty($absolutePath)) { 80*c3437056SNickeau return null; 81*c3437056SNickeau } 82*c3437056SNickeau return new LocalPath($absolutePath); 83*c3437056SNickeau } 84*c3437056SNickeau 85*c3437056SNickeau function toAbsolutePath(): Path 86*c3437056SNickeau { 87*c3437056SNickeau $path = realpath($this->path); 88*c3437056SNickeau if ($path !== false) { 89*c3437056SNickeau // Path return false when the file does not exist 90*c3437056SNickeau return new LocalPath($path); 91*c3437056SNickeau } 92*c3437056SNickeau return $this; 93*c3437056SNickeau 94*c3437056SNickeau } 95*c3437056SNickeau 96*c3437056SNickeau /** 97*c3437056SNickeau * @return string 98*c3437056SNickeau */ 99*c3437056SNickeau private function getDirectorySeparator(): string 100*c3437056SNickeau { 101*c3437056SNickeau $directorySeparator = self::FILE_SYSTEM_DIRECTORY_SEPARATOR; 102*c3437056SNickeau if ( 103*c3437056SNickeau $directorySeparator === '\\' 104*c3437056SNickeau && 105*c3437056SNickeau strpos($this->path, "/") !== false 106*c3437056SNickeau ) { 107*c3437056SNickeau $directorySeparator = "/"; 108*c3437056SNickeau } 109*c3437056SNickeau return $directorySeparator; 110*c3437056SNickeau } 111*c3437056SNickeau 112*c3437056SNickeau 113*c3437056SNickeau} 114