xref: /plugin/combo/ComboStrap/IFetcherLocalImage.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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