1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace ComboStrap; 4*04fd306cSNickeau 5*04fd306cSNickeau/** 6*04fd306cSNickeau * 7*04fd306cSNickeau * This class represents a fetcher that sends back a local image processed or not. 8*04fd306cSNickeau * 9*04fd306cSNickeau */ 10*04fd306cSNickeauabstract class IFetcherLocalImage extends FetcherImage implements IFetcherSource 11*04fd306cSNickeau{ 12*04fd306cSNickeau 13*04fd306cSNickeau /** 14*04fd306cSNickeau * @param WikiPath $path 15*04fd306cSNickeau * @return IFetcherLocalImage 16*04fd306cSNickeau * @throws ExceptionBadArgument - if the path is not an image 17*04fd306cSNickeau * @throws ExceptionBadSyntax 18*04fd306cSNickeau * @throws ExceptionNotExists 19*04fd306cSNickeau */ 20*04fd306cSNickeau public static function createImageFetchFromPath(WikiPath $path): IFetcherLocalImage 21*04fd306cSNickeau { 22*04fd306cSNickeau 23*04fd306cSNickeau try { 24*04fd306cSNickeau $mime = FileSystems::getMime($path); 25*04fd306cSNickeau } catch (ExceptionNotFound $e) { 26*04fd306cSNickeau throw new ExceptionBadArgument("The file ($path) has an unknown mime, we can't verify if we support it", FetcherImage::CANONICAL); 27*04fd306cSNickeau } 28*04fd306cSNickeau 29*04fd306cSNickeau if (!$mime->isImage()) { 30*04fd306cSNickeau throw new ExceptionBadArgument("The file ($path) has not been detected as being an image, media returned", FetcherImage::CANONICAL); 31*04fd306cSNickeau } 32*04fd306cSNickeau 33*04fd306cSNickeau if ($mime->toString() === Mime::SVG) { 34*04fd306cSNickeau 35*04fd306cSNickeau $image = FetcherSvg::createSvgFromPath($path); 36*04fd306cSNickeau 37*04fd306cSNickeau } else { 38*04fd306cSNickeau 39*04fd306cSNickeau $image = FetcherRaster::createImageRasterFetchFromPath($path); 40*04fd306cSNickeau 41*04fd306cSNickeau } 42*04fd306cSNickeau 43*04fd306cSNickeau return $image; 44*04fd306cSNickeau 45*04fd306cSNickeau 46*04fd306cSNickeau } 47*04fd306cSNickeau 48*04fd306cSNickeau /** 49*04fd306cSNickeau * @param string $imageId 50*04fd306cSNickeau * @param string|null $rev 51*04fd306cSNickeau * @return IFetcherLocalImage 52*04fd306cSNickeau * @throws ExceptionBadArgument - if the path is not an image 53*04fd306cSNickeau */ 54*04fd306cSNickeau public static function createImageFetchFromId(string $imageId, string $rev = null): IFetcherLocalImage 55*04fd306cSNickeau { 56*04fd306cSNickeau $dokuPath = WikiPath::createMediaPathFromId($imageId, $rev); 57*04fd306cSNickeau return IFetcherLocalImage::createImageFetchFromPath($dokuPath); 58*04fd306cSNickeau } 59*04fd306cSNickeau 60*04fd306cSNickeau 61*04fd306cSNickeau function getBuster(): string 62*04fd306cSNickeau { 63*04fd306cSNickeau try { 64*04fd306cSNickeau return FileSystems::getCacheBuster($this->getSourcePath()); 65*04fd306cSNickeau } catch (ExceptionNotFound $e) { 66*04fd306cSNickeau // file does not exists 67*04fd306cSNickeau return strval((new \DateTime())->getTimestamp()); 68*04fd306cSNickeau } 69*04fd306cSNickeau } 70*04fd306cSNickeau 71*04fd306cSNickeau public function getLabel(): string 72*04fd306cSNickeau { 73*04fd306cSNickeau 74*04fd306cSNickeau $sourcePath = $this->getSourcePath(); 75*04fd306cSNickeau return ResourceName::getFromPath($sourcePath); 76*04fd306cSNickeau 77*04fd306cSNickeau } 78*04fd306cSNickeau 79*04fd306cSNickeau 80*04fd306cSNickeau} 81