xref: /template/strap/ComboStrap/FetcherRawLocalPath.php (revision 70bbd7f1f72440223cc13f3495efdcb2b0a11514)
104fd306cSNickeau<?php
204fd306cSNickeau
304fd306cSNickeaunamespace ComboStrap;
404fd306cSNickeau
504fd306cSNickeauuse ComboStrap\Web\Url;
604fd306cSNickeau
704fd306cSNickeau/**
804fd306cSNickeau * Return raw files.
904fd306cSNickeau * The mime is determined by the path.
1004fd306cSNickeau */
1104fd306cSNickeauclass FetcherRawLocalPath extends IFetcherAbs implements IFetcherPath, IFetcherSource
1204fd306cSNickeau{
1304fd306cSNickeau
1404fd306cSNickeau    use FetcherTraitWikiPath;
1504fd306cSNickeau
1604fd306cSNickeau    public const SRC_QUERY_PARAMETER = "src";
1704fd306cSNickeau    const NAME = "raw";
1804fd306cSNickeau
1904fd306cSNickeau
2004fd306cSNickeau    public static function createFromPath(WikiPath $wikiPath): FetcherRawLocalPath
2104fd306cSNickeau    {
2204fd306cSNickeau        $fetcherRaw = self::createEmpty();
2304fd306cSNickeau        $fetcherRaw->setSourcePath($wikiPath);
2404fd306cSNickeau        return $fetcherRaw;
2504fd306cSNickeau    }
2604fd306cSNickeau
2704fd306cSNickeau    /**
2804fd306cSNickeau     * Empty because a fetch is mostly build through an URL
2904fd306cSNickeau     * @return FetcherRawLocalPath
3004fd306cSNickeau     */
3104fd306cSNickeau    public static function createEmpty(): FetcherRawLocalPath
3204fd306cSNickeau    {
3304fd306cSNickeau        return new FetcherRawLocalPath();
3404fd306cSNickeau    }
3504fd306cSNickeau
3604fd306cSNickeau    /**
3704fd306cSNickeau     * @throws ExceptionBadArgument
3804fd306cSNickeau     */
3904fd306cSNickeau    public static function createLocalFromFetchUrl(Url $fetchUrl): FetcherRawLocalPath
4004fd306cSNickeau    {
4104fd306cSNickeau        $fetchRaw = FetcherRawLocalPath::createEmpty();
4204fd306cSNickeau        $fetchRaw->buildFromUrl($fetchUrl);
4304fd306cSNickeau        return $fetchRaw;
4404fd306cSNickeau    }
4504fd306cSNickeau
4604fd306cSNickeau
4704fd306cSNickeau    /**
4804fd306cSNickeau     * @return Url - an URL to download the media
4904fd306cSNickeau     */
5004fd306cSNickeau    function getFetchUrl(Url $url = null): Url
5104fd306cSNickeau    {
5204fd306cSNickeau
5304fd306cSNickeau        $url = parent::getFetchUrl($url);
54*70bbd7f1Sgerardnico        $this->addLocalPathParametersToFetchUrl($url, MediaMarkup::$MEDIA_QUERY_PARAMETER);
5504fd306cSNickeau        return $url;
5604fd306cSNickeau
5704fd306cSNickeau    }
5804fd306cSNickeau
5904fd306cSNickeau    /**
6004fd306cSNickeau     * @param TagAttributes $tagAttributes
6104fd306cSNickeau     * @return FetcherRawLocalPath
6204fd306cSNickeau     * @throws ExceptionBadArgument - if the media/id was not found
6304fd306cSNickeau     * @throws ExceptionBadSyntax
6404fd306cSNickeau     * @throws ExceptionNotExists
6504fd306cSNickeau     * @throws ExceptionNotFound
6604fd306cSNickeau     */
6704fd306cSNickeau    public function buildFromTagAttributes(TagAttributes $tagAttributes): FetcherRawLocalPath
6804fd306cSNickeau    {
6904fd306cSNickeau
7004fd306cSNickeau        $this->buildOriginalPathFromTagAttributes($tagAttributes);
7104fd306cSNickeau        parent::buildFromTagAttributes($tagAttributes);
7204fd306cSNickeau        return $this;
7304fd306cSNickeau
7404fd306cSNickeau    }
7504fd306cSNickeau
7604fd306cSNickeau    function getFetchPath(): LocalPath
7704fd306cSNickeau    {
7804fd306cSNickeau        return $this->getSourcePath()->toLocalPath();
7904fd306cSNickeau    }
8004fd306cSNickeau
8104fd306cSNickeau
8204fd306cSNickeau    /**
8304fd306cSNickeau     * Buster for the {@link IFetcher} interface
8404fd306cSNickeau     * @throws ExceptionNotFound
8504fd306cSNickeau     */
8604fd306cSNickeau    function getBuster(): string
8704fd306cSNickeau    {
8804fd306cSNickeau        return FileSystems::getCacheBuster($this->getSourcePath());
8904fd306cSNickeau    }
9004fd306cSNickeau
9104fd306cSNickeau
9204fd306cSNickeau    public
9304fd306cSNickeau    function getFetcherName(): string
9404fd306cSNickeau    {
9504fd306cSNickeau        return self::NAME;
9604fd306cSNickeau    }
9704fd306cSNickeau
9804fd306cSNickeau    public function getLabel(): string
9904fd306cSNickeau    {
10004fd306cSNickeau        $sourcePath = $this->getSourcePath();
10104fd306cSNickeau        return ResourceName::getFromPath($sourcePath);
10204fd306cSNickeau    }
10304fd306cSNickeau}
104