104fd306cSNickeau<?php 204fd306cSNickeau 304fd306cSNickeaunamespace ComboStrap; 404fd306cSNickeau 504fd306cSNickeauuse ComboStrap\Web\Url; 604fd306cSNickeau 704fd306cSNickeau/** 804fd306cSNickeau * Static class of the fetcher system 904fd306cSNickeau */ 1004fd306cSNickeauclass FetcherSystem 1104fd306cSNickeau{ 1204fd306cSNickeau 1304fd306cSNickeau /** 1404fd306cSNickeau * 1504fd306cSNickeau * @param Url $fetchUrl 1604fd306cSNickeau * @return IFetcherPath 1704fd306cSNickeau * @throws ExceptionBadArgument 1804fd306cSNickeau * @throws ExceptionNotFound 1904fd306cSNickeau * @throws ExceptionInternal 2004fd306cSNickeau */ 2104fd306cSNickeau public static function createPathFetcherFromUrl(Url $fetchUrl): IFetcherPath 2204fd306cSNickeau { 2304fd306cSNickeau 2404fd306cSNickeau try { 2504fd306cSNickeau $fetcherName = $fetchUrl->getQueryPropertyValue(IFetcher::FETCHER_KEY); 2604fd306cSNickeau try { 2704fd306cSNickeau $fetchers = ClassUtility::getObjectImplementingInterface(IFetcherPath::class); 2804fd306cSNickeau } catch (\ReflectionException $e) { 2904fd306cSNickeau throw new ExceptionInternal("We could read fetch classes via reflection Error: {$e->getMessage()}"); 3004fd306cSNickeau } 3104fd306cSNickeau foreach ($fetchers as $fetcher) { 3204fd306cSNickeau /** 3304fd306cSNickeau * @var IFetcherPath $fetcher 3404fd306cSNickeau */ 3504fd306cSNickeau if ($fetcher->getFetcherName() === $fetcherName) { 3604fd306cSNickeau $fetcher->buildFromUrl($fetchUrl); 3704fd306cSNickeau return $fetcher; 3804fd306cSNickeau } 3904fd306cSNickeau } 4004fd306cSNickeau } catch (ExceptionNotFound $e) { 4104fd306cSNickeau // no fetcher property 4204fd306cSNickeau } 4304fd306cSNickeau 4404fd306cSNickeau 4504fd306cSNickeau try { 4604fd306cSNickeau $fetchDoku = FetcherRawLocalPath::createLocalFromFetchUrl($fetchUrl); 4704fd306cSNickeau $dokuPath = $fetchDoku->getSourcePath(); 4804fd306cSNickeau } catch (ExceptionBadArgument $e) { 4904fd306cSNickeau throw new ExceptionNotFound("No fetcher could be matched to the url ($fetchUrl)"); 5004fd306cSNickeau } 5104fd306cSNickeau try { 5204fd306cSNickeau $mime = FileSystems::getMime($dokuPath); 5304fd306cSNickeau } catch (ExceptionNotFound $e) { 5439c00e7eSNico LogUtility::warning("Warning: The mime is unknown for the path ($dokuPath).", LogUtility::SUPPORT_CANONICAL, $e); 55*997da597SNico $mime = new Mime(Mime::BINARY_MIME); 5604fd306cSNickeau } 5704fd306cSNickeau switch ($mime->toString()) { 5804fd306cSNickeau case Mime::SVG: 5904fd306cSNickeau return FetcherSvg::createSvgFromFetchUrl($fetchUrl); 6004fd306cSNickeau default: 6104fd306cSNickeau if ($mime->isImage()) { 6204fd306cSNickeau return FetcherRaster::createRasterFromFetchUrl($fetchUrl); 6304fd306cSNickeau } else { 6404fd306cSNickeau return $fetchDoku; 6504fd306cSNickeau } 6604fd306cSNickeau } 6704fd306cSNickeau 6804fd306cSNickeau } 6904fd306cSNickeau 7004fd306cSNickeau /** 7104fd306cSNickeau * @throws ExceptionInternal - if we can't reflect the class 7204fd306cSNickeau * @throws ExceptionNotFound - if the fetcher is unknown 7304fd306cSNickeau * @throws ExceptionBadArgument - if the fetcher is not set 7404fd306cSNickeau */ 7504fd306cSNickeau public static function createFetcherStringFromUrl(Url $fetchUrl): IFetcherString 7604fd306cSNickeau { 7704fd306cSNickeau 7804fd306cSNickeau try { 7904fd306cSNickeau $fetcherName = $fetchUrl->getQueryPropertyValue(IFetcher::FETCHER_KEY); 8004fd306cSNickeau } catch (ExceptionNotFound $e) { 8104fd306cSNickeau throw new ExceptionBadArgument("No fetcher name found"); 8204fd306cSNickeau } 8304fd306cSNickeau try { 8404fd306cSNickeau $fetchers = ClassUtility::getObjectImplementingInterface(IFetcherString::class); 8504fd306cSNickeau } catch (\ReflectionException $e) { 8604fd306cSNickeau throw new ExceptionInternal("We could read fetch classes via reflection Error: {$e->getMessage()}"); 8704fd306cSNickeau } 8804fd306cSNickeau foreach ($fetchers as $fetcher) { 8904fd306cSNickeau /** 9004fd306cSNickeau * @var IFetcherString $fetcher 9104fd306cSNickeau */ 9204fd306cSNickeau if ($fetcher->getFetcherName() === $fetcherName) { 9304fd306cSNickeau $fetcher->buildFromUrl($fetchUrl); 9404fd306cSNickeau return $fetcher; 9504fd306cSNickeau } 9604fd306cSNickeau } 9704fd306cSNickeau throw new ExceptionNotFound("No fetcher found with the name ($fetcherName)"); 9804fd306cSNickeau 9904fd306cSNickeau } 10004fd306cSNickeau 10104fd306cSNickeau} 102