xref: /template/strap/ComboStrap/ThirdMediaLink.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
137748cd8SNickeau<?php
237748cd8SNickeau
337748cd8SNickeau
437748cd8SNickeaunamespace ComboStrap;
537748cd8SNickeau
6*04fd306cSNickeauuse ComboStrap\Web\Url;
7*04fd306cSNickeau
837748cd8SNickeau/**
937748cd8SNickeau * Class ThirdMediaLink
1037748cd8SNickeau * @package ComboStrap
11*04fd306cSNickeau *
1237748cd8SNickeau */
1337748cd8SNickeauclass ThirdMediaLink extends MediaLink
1437748cd8SNickeau{
1537748cd8SNickeau
16*04fd306cSNickeau
171fa8c418SNickeau    public function renderMediaTag(): string
1837748cd8SNickeau    {
19*04fd306cSNickeau
20*04fd306cSNickeau        $mediaMarkup = $this->mediaMarkup;
21*04fd306cSNickeau        $tagAttributes = $this->mediaMarkup->getExtraMediaTagAttributes();
22*04fd306cSNickeau
23*04fd306cSNickeau        $urlString = $mediaMarkup->getFetchUrl()->toString();
24*04fd306cSNickeau        $path = $mediaMarkup->getPath();
25*04fd306cSNickeau        $tagAttributes->addOutputAttributeValue("href", $urlString);
26*04fd306cSNickeau
27*04fd306cSNickeau        try {
28*04fd306cSNickeau            $label = $mediaMarkup->getLabel();
29*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
30*04fd306cSNickeau            $label = $path->getLastName();
31*04fd306cSNickeau        }
32*04fd306cSNickeau        $tagAttributes->addOutputAttributeValue("title", $label);
33*04fd306cSNickeau
34*04fd306cSNickeau        // dokuwiki class
35*04fd306cSNickeau        $tagAttributes
36*04fd306cSNickeau            ->addClassName("media")
37*04fd306cSNickeau            ->addClassName("mediafile")
38*04fd306cSNickeau            ->addClassName("wikilink2");
39*04fd306cSNickeau        try {
40*04fd306cSNickeau            // dokuwiki icon
41*04fd306cSNickeau            $extension = FileSystems::getMime($path);
42*04fd306cSNickeau            $tagAttributes->addClassName("mf_$extension");
43*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
44*04fd306cSNickeau            LogUtility::warning("No icon could be added to the media link. Error: {$e->getMessage()}");
4537748cd8SNickeau        }
4637748cd8SNickeau
47*04fd306cSNickeau        if (!FileSystems::exists($path)) {
48*04fd306cSNickeau            $tagAttributes->addClassName(LinkMarkup::getHtmlClassNotExist());
49*04fd306cSNickeau        }
50*04fd306cSNickeau
51*04fd306cSNickeau        return $tagAttributes->toHtmlEnterTag("a") . $label . "</a>";
52*04fd306cSNickeau
53*04fd306cSNickeau    }
54*04fd306cSNickeau
55*04fd306cSNickeau
56*04fd306cSNickeau    /**
57*04fd306cSNickeau     */
58*04fd306cSNickeau    public function getFetchUrl(): Url
59*04fd306cSNickeau    {
60*04fd306cSNickeau
61*04fd306cSNickeau
62*04fd306cSNickeau        $path = $this->mediaMarkup->getPath();
63*04fd306cSNickeau        if(!$path instanceof WikiPath){
64*04fd306cSNickeau            return $this->mediaMarkup->getFetchUrl();
65*04fd306cSNickeau        }
66*04fd306cSNickeau
67*04fd306cSNickeau        try {
68*04fd306cSNickeau            $mime = FileSystems::getMime($path);
69*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
70*04fd306cSNickeau            return parent::getFetchUrl();
71*04fd306cSNickeau        }
72*04fd306cSNickeau
73*04fd306cSNickeau        switch ($mime->toString()) {
74*04fd306cSNickeau            case Mime::PDF:
75*04fd306cSNickeau                try {
76*04fd306cSNickeau                    return (new FetcherPdf())
77*04fd306cSNickeau                        ->buildFromUrl($this->mediaMarkup->getFetchUrl())
78*04fd306cSNickeau                        ->getFetchUrl();
79*04fd306cSNickeau                } catch (ExceptionBadArgument $e) {
80*04fd306cSNickeau                    LogUtility::internalError($e->getMessage());
81*04fd306cSNickeau                    return FetcherRawLocalPath::createFromPath($path)
82*04fd306cSNickeau                        ->getFetchUrl();
83*04fd306cSNickeau                }
84*04fd306cSNickeau            default:
85*04fd306cSNickeau                return FetcherRawLocalPath::createFromPath($path)
86*04fd306cSNickeau                    ->getFetchUrl();
87*04fd306cSNickeau        }
88*04fd306cSNickeau
89*04fd306cSNickeau
904cadd4f8SNickeau    }
914cadd4f8SNickeau
9237748cd8SNickeau
9337748cd8SNickeau}
94