xref: /plugin/combo/ComboStrap/FetcherRawLocalPath.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace ComboStrap;
4*04fd306cSNickeau
5*04fd306cSNickeauuse ComboStrap\Web\Url;
6*04fd306cSNickeau
7*04fd306cSNickeau/**
8*04fd306cSNickeau * Return raw files.
9*04fd306cSNickeau * The mime is determined by the path.
10*04fd306cSNickeau */
11*04fd306cSNickeauclass FetcherRawLocalPath extends IFetcherAbs implements IFetcherPath, IFetcherSource
12*04fd306cSNickeau{
13*04fd306cSNickeau
14*04fd306cSNickeau    use FetcherTraitWikiPath;
15*04fd306cSNickeau
16*04fd306cSNickeau    public const SRC_QUERY_PARAMETER = "src";
17*04fd306cSNickeau    const NAME = "raw";
18*04fd306cSNickeau
19*04fd306cSNickeau
20*04fd306cSNickeau    public static function createFromPath(WikiPath $wikiPath): FetcherRawLocalPath
21*04fd306cSNickeau    {
22*04fd306cSNickeau        $fetcherRaw = self::createEmpty();
23*04fd306cSNickeau        $fetcherRaw->setSourcePath($wikiPath);
24*04fd306cSNickeau        return $fetcherRaw;
25*04fd306cSNickeau    }
26*04fd306cSNickeau
27*04fd306cSNickeau    /**
28*04fd306cSNickeau     * Empty because a fetch is mostly build through an URL
29*04fd306cSNickeau     * @return FetcherRawLocalPath
30*04fd306cSNickeau     */
31*04fd306cSNickeau    public static function createEmpty(): FetcherRawLocalPath
32*04fd306cSNickeau    {
33*04fd306cSNickeau        return new FetcherRawLocalPath();
34*04fd306cSNickeau    }
35*04fd306cSNickeau
36*04fd306cSNickeau    /**
37*04fd306cSNickeau     * @throws ExceptionBadArgument
38*04fd306cSNickeau     */
39*04fd306cSNickeau    public static function createLocalFromFetchUrl(Url $fetchUrl): FetcherRawLocalPath
40*04fd306cSNickeau    {
41*04fd306cSNickeau        $fetchRaw = FetcherRawLocalPath::createEmpty();
42*04fd306cSNickeau        $fetchRaw->buildFromUrl($fetchUrl);
43*04fd306cSNickeau        return $fetchRaw;
44*04fd306cSNickeau    }
45*04fd306cSNickeau
46*04fd306cSNickeau
47*04fd306cSNickeau    /**
48*04fd306cSNickeau     * @return Url - an URL to download the media
49*04fd306cSNickeau     */
50*04fd306cSNickeau    function getFetchUrl(Url $url = null): Url
51*04fd306cSNickeau    {
52*04fd306cSNickeau
53*04fd306cSNickeau        $url = parent::getFetchUrl($url);
54*04fd306cSNickeau        $this->addLocalPathParametersToFetchUrl($url, self::$MEDIA_QUERY_PARAMETER);
55*04fd306cSNickeau        return $url;
56*04fd306cSNickeau
57*04fd306cSNickeau    }
58*04fd306cSNickeau
59*04fd306cSNickeau    /**
60*04fd306cSNickeau     * @param TagAttributes $tagAttributes
61*04fd306cSNickeau     * @return FetcherRawLocalPath
62*04fd306cSNickeau     * @throws ExceptionBadArgument - if the media/id was not found
63*04fd306cSNickeau     * @throws ExceptionBadSyntax
64*04fd306cSNickeau     * @throws ExceptionNotExists
65*04fd306cSNickeau     * @throws ExceptionNotFound
66*04fd306cSNickeau     */
67*04fd306cSNickeau    public function buildFromTagAttributes(TagAttributes $tagAttributes): FetcherRawLocalPath
68*04fd306cSNickeau    {
69*04fd306cSNickeau
70*04fd306cSNickeau        $this->buildOriginalPathFromTagAttributes($tagAttributes);
71*04fd306cSNickeau        parent::buildFromTagAttributes($tagAttributes);
72*04fd306cSNickeau        return $this;
73*04fd306cSNickeau
74*04fd306cSNickeau    }
75*04fd306cSNickeau
76*04fd306cSNickeau    function getFetchPath(): LocalPath
77*04fd306cSNickeau    {
78*04fd306cSNickeau        return $this->getSourcePath()->toLocalPath();
79*04fd306cSNickeau    }
80*04fd306cSNickeau
81*04fd306cSNickeau
82*04fd306cSNickeau    /**
83*04fd306cSNickeau     * Buster for the {@link IFetcher} interface
84*04fd306cSNickeau     * @throws ExceptionNotFound
85*04fd306cSNickeau     */
86*04fd306cSNickeau    function getBuster(): string
87*04fd306cSNickeau    {
88*04fd306cSNickeau        return FileSystems::getCacheBuster($this->getSourcePath());
89*04fd306cSNickeau    }
90*04fd306cSNickeau
91*04fd306cSNickeau
92*04fd306cSNickeau    public
93*04fd306cSNickeau    function getFetcherName(): string
94*04fd306cSNickeau    {
95*04fd306cSNickeau        return self::NAME;
96*04fd306cSNickeau    }
97*04fd306cSNickeau
98*04fd306cSNickeau    public function getLabel(): string
99*04fd306cSNickeau    {
100*04fd306cSNickeau        $sourcePath = $this->getSourcePath();
101*04fd306cSNickeau        return ResourceName::getFromPath($sourcePath);
102*04fd306cSNickeau    }
103*04fd306cSNickeau}
104