1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 7c3437056SNickeauabstract class PathAbs implements Path 8c3437056SNickeau{ 9c3437056SNickeau 10c3437056SNickeau 11*04fd306cSNickeau /** 12*04fd306cSNickeau * @throws ExceptionNotFound 13*04fd306cSNickeau */ 14*04fd306cSNickeau public function getExtension(): string 15c3437056SNickeau { 16*04fd306cSNickeau $extension = pathinfo($this->getLastName(), PATHINFO_EXTENSION); 17*04fd306cSNickeau if ($extension === "") { 18*04fd306cSNickeau throw new ExceptionNotFound("No extension found"); 19*04fd306cSNickeau } 20*04fd306cSNickeau return $extension; 21*04fd306cSNickeau 22*04fd306cSNickeau } 23*04fd306cSNickeau 24*04fd306cSNickeau /** 25*04fd306cSNickeau * @return Mime based on the {@link PathAbs::getExtension()} 26*04fd306cSNickeau * @throws ExceptionNotFound 27*04fd306cSNickeau * @deprecated see {@link FileSystems::getMime()} 28*04fd306cSNickeau */ 29*04fd306cSNickeau public function getMime(): Mime 30*04fd306cSNickeau { 31*04fd306cSNickeau 32*04fd306cSNickeau return FileSystems::getMime($this); 33*04fd306cSNickeau 34*04fd306cSNickeau } 35*04fd306cSNickeau 36*04fd306cSNickeau /** 37*04fd306cSNickeau * @throws ExceptionNotFound 38*04fd306cSNickeau */ 39*04fd306cSNickeau public function getLastNameWithoutExtension(): string 40*04fd306cSNickeau { 41*04fd306cSNickeau $lastName = $this->getLastName(); 42*04fd306cSNickeau $lastPoint = strrpos($lastName, '.'); 43*04fd306cSNickeau if ($lastPoint === false) { 44*04fd306cSNickeau return $lastName; 45*04fd306cSNickeau } 46*04fd306cSNickeau return substr($lastName, 0, $lastPoint); 47c3437056SNickeau } 48c3437056SNickeau 49c3437056SNickeau /** 50c3437056SNickeau * 51c3437056SNickeau */ 52*04fd306cSNickeau public function getNamesWithoutExtension() 53c3437056SNickeau { 54*04fd306cSNickeau $names = $this->getNames(); 55*04fd306cSNickeau $sizeof = sizeof($names); 56*04fd306cSNickeau if ($sizeof == 0) { 57*04fd306cSNickeau return $names; 58c3437056SNickeau } 59*04fd306cSNickeau $lastName = $names[$sizeof - 1]; 60*04fd306cSNickeau $index = strrpos($lastName, "."); 61*04fd306cSNickeau if ($index === false) { 62*04fd306cSNickeau return $names; 63c3437056SNickeau } 64*04fd306cSNickeau $names[$sizeof - 1] = substr($lastName, 0, $index); 65*04fd306cSNickeau return $names; 66c3437056SNickeau } 67c3437056SNickeau 68c3437056SNickeau public function __toString() 69c3437056SNickeau { 704cadd4f8SNickeau return $this->toUriString(); 714cadd4f8SNickeau } 724cadd4f8SNickeau 734cadd4f8SNickeau 744cadd4f8SNickeau public function toUriString(): string 754cadd4f8SNickeau { 76*04fd306cSNickeau return $this->toAbsoluteId(); 77c3437056SNickeau } 78c3437056SNickeau 794cadd4f8SNickeau /** 80*04fd306cSNickeau * @throws ExceptionCast when 81*04fd306cSNickeau * Utility {@link WikiPath::createFromPathObject()} 824cadd4f8SNickeau */ 83*04fd306cSNickeau function toWikiPath(): WikiPath 844cadd4f8SNickeau { 85*04fd306cSNickeau if ($this instanceof WikiPath) { 864cadd4f8SNickeau return $this; 874cadd4f8SNickeau } 884cadd4f8SNickeau if ($this instanceof LocalPath) { 89*04fd306cSNickeau try { 90*04fd306cSNickeau return $this->toWikiPath(); 91*04fd306cSNickeau } catch (ExceptionBadArgument|ExceptionCast $e) { 92*04fd306cSNickeau throw new ExceptionCast($e); 934cadd4f8SNickeau } 94*04fd306cSNickeau } 95*04fd306cSNickeau if ($this instanceof MarkupPath) { 96*04fd306cSNickeau try { 97*04fd306cSNickeau return $this->getPathObject()->toWikiPath(); 98*04fd306cSNickeau } catch (ExceptionCast $e) { 99*04fd306cSNickeau throw new ExceptionCast($e); 100*04fd306cSNickeau } 101*04fd306cSNickeau } 102*04fd306cSNickeau throw new ExceptionCast("This is not a wiki path or local path"); 103*04fd306cSNickeau } 104*04fd306cSNickeau 105*04fd306cSNickeau /** 106*04fd306cSNickeau * @throws ExceptionCast when 107*04fd306cSNickeau */ 108*04fd306cSNickeau function toLocalPath(): LocalPath 109*04fd306cSNickeau { 110*04fd306cSNickeau if ($this instanceof LocalPath) { 111*04fd306cSNickeau return $this; 112*04fd306cSNickeau } 113*04fd306cSNickeau if ($this instanceof WikiPath) { 114*04fd306cSNickeau return $this->toLocalPath(); 115*04fd306cSNickeau } 116*04fd306cSNickeau if ($this instanceof MarkupPath) { 117*04fd306cSNickeau return $this->getPathObject()->toLocalPath(); 118*04fd306cSNickeau } 119*04fd306cSNickeau throw new ExceptionCast("Unable to cast to LocalPath as this path is not a wiki path or a local path but a " . get_class($this)); 1204cadd4f8SNickeau } 1214cadd4f8SNickeau 122c3437056SNickeau 123c3437056SNickeau} 124