xref: /plugin/combo/ComboStrap/MediaLink.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
137748cd8SNickeau<?php
237748cd8SNickeau/**
337748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved.
437748cd8SNickeau *
537748cd8SNickeau * This source code is licensed under the GPL license found in the
637748cd8SNickeau * COPYING  file in the root directory of this source tree.
737748cd8SNickeau *
837748cd8SNickeau * @license  GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
937748cd8SNickeau * @author   ComboStrap <support@combostrap.com>
1037748cd8SNickeau *
1137748cd8SNickeau */
1237748cd8SNickeau
1337748cd8SNickeaunamespace ComboStrap;
1437748cd8SNickeau
1537748cd8SNickeau
16*04fd306cSNickeauuse ComboStrap\Web\Url;
1737748cd8SNickeau
1837748cd8SNickeau/**
1937748cd8SNickeau * Class InternalMedia
20*04fd306cSNickeau * Represent a HTML markup link
2137748cd8SNickeau *
2237748cd8SNickeau *
2337748cd8SNickeau * @package ComboStrap
2437748cd8SNickeau *
2537748cd8SNickeau *
2637748cd8SNickeau *
271fa8c418SNickeau * This is a link to a media (pdf, image, ...).
28*04fd306cSNickeau * (ie img, svg, a)
2937748cd8SNickeau */
301fa8c418SNickeauabstract class MediaLink
3137748cd8SNickeau{
3237748cd8SNickeau
3337748cd8SNickeau
3437748cd8SNickeau    const CANONICAL = "image";
3537748cd8SNickeau
3637748cd8SNickeau
3737748cd8SNickeau    /**
3837748cd8SNickeau     * @deprecated 2021-06-12
3937748cd8SNickeau     */
4037748cd8SNickeau    const LINK_PATTERN = "{{\s*([^|\s]*)\s*\|?.*}}";
41*04fd306cSNickeau    protected MediaMarkup $mediaMarkup;
4237748cd8SNickeau
4337748cd8SNickeau
44*04fd306cSNickeau    public function __construct(MediaMarkup $mediaMarkup)
4537748cd8SNickeau    {
46*04fd306cSNickeau        $this->mediaMarkup = $mediaMarkup;
4737748cd8SNickeau    }
4837748cd8SNickeau
4937748cd8SNickeau
5037748cd8SNickeau    /**
51*04fd306cSNickeau     * @param MediaMarkup $mediaMarkup
52*04fd306cSNickeau     * @return RasterImageLink|SvgImageLink|ThirdMediaLink|MediaLink
53*04fd306cSNickeau     * @throws ExceptionBadArgument
54*04fd306cSNickeau     * @throws ExceptionBadSyntax
55*04fd306cSNickeau     * @throws ExceptionNotExists
56*04fd306cSNickeau     * @throws ExceptionNotFound
5737748cd8SNickeau     */
58*04fd306cSNickeau    public static function createFromMediaMarkup(MediaMarkup $mediaMarkup)
5937748cd8SNickeau    {
604cadd4f8SNickeau
6137748cd8SNickeau        /**
6237748cd8SNickeau         * Processing
6337748cd8SNickeau         */
64*04fd306cSNickeau        $mime = $mediaMarkup->getFetcher()->getMime();
65*04fd306cSNickeau        switch ($mime->toString()) {
664cadd4f8SNickeau            case Mime::SVG:
67*04fd306cSNickeau                return new SvgImageLink($mediaMarkup);
684cadd4f8SNickeau            default:
69c3437056SNickeau                if (!$mime->isImage()) {
70*04fd306cSNickeau                    return new ThirdMediaLink($mediaMarkup);
714cadd4f8SNickeau                } else {
72*04fd306cSNickeau                    return new RasterImageLink($mediaMarkup);
734cadd4f8SNickeau                }
7437748cd8SNickeau        }
7537748cd8SNickeau
7637748cd8SNickeau
7737748cd8SNickeau    }
7837748cd8SNickeau
7937748cd8SNickeau
8037748cd8SNickeau    /**
8137748cd8SNickeau     * @return string - the HTML of the image
8237748cd8SNickeau     */
83*04fd306cSNickeau    public abstract function renderMediaTag(): string;
841fa8c418SNickeau
8537748cd8SNickeau
86*04fd306cSNickeau    public function getFetchUrl(): Url
871fa8c418SNickeau    {
88*04fd306cSNickeau        return $this->mediaMarkup->getFetchUrl();
894cadd4f8SNickeau    }
9037748cd8SNickeau
9182a60d03SNickeau
9237748cd8SNickeau}
93