xref: /plugin/combo/ComboStrap/FirstSvgIllustration.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace ComboStrap;
4*04fd306cSNickeau
5*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
6*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataImage;
7*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore;
8*04fd306cSNickeau
9*04fd306cSNickeau/**
10*04fd306cSNickeau * A derived meta that captures the first svg image
11*04fd306cSNickeau * via {@link \syntax_plugin_combo_media::registerFirstImage()}
12*04fd306cSNickeau *
13*04fd306cSNickeau * Note: The first svg icon is captured at {@link FeaturedIcon::FIRST_ICON_PARSED}
14*04fd306cSNickeau */
15*04fd306cSNickeauclass FirstSvgIllustration extends MetadataImage
16*04fd306cSNickeau{
17*04fd306cSNickeau
18*04fd306cSNickeau
19*04fd306cSNickeau    public const PROPERTY_NAME = "first-svg-illustration";
20*04fd306cSNickeau
21*04fd306cSNickeau    public static function createForPage(ResourceCombo $resource): FirstSvgIllustration
22*04fd306cSNickeau    {
23*04fd306cSNickeau        return (new FirstSvgIllustration())
24*04fd306cSNickeau            ->setResource($resource);
25*04fd306cSNickeau    }
26*04fd306cSNickeau
27*04fd306cSNickeau    static public function getDescription(): string
28*04fd306cSNickeau    {
29*04fd306cSNickeau        return "The first svg illustration of the page";
30*04fd306cSNickeau    }
31*04fd306cSNickeau
32*04fd306cSNickeau    static public function getLabel(): string
33*04fd306cSNickeau    {
34*04fd306cSNickeau        return "First Svg illustration";
35*04fd306cSNickeau    }
36*04fd306cSNickeau
37*04fd306cSNickeau    public static function getName(): string
38*04fd306cSNickeau    {
39*04fd306cSNickeau        return self::PROPERTY_NAME;
40*04fd306cSNickeau    }
41*04fd306cSNickeau
42*04fd306cSNickeau
43*04fd306cSNickeau    static public function isMutable(): bool
44*04fd306cSNickeau    {
45*04fd306cSNickeau        return false;
46*04fd306cSNickeau    }
47*04fd306cSNickeau
48*04fd306cSNickeau    public function buildFromReadStore(): FirstSvgIllustration
49*04fd306cSNickeau    {
50*04fd306cSNickeau
51*04fd306cSNickeau        $this->wasBuild = true;
52*04fd306cSNickeau        $store = $this->getReadStore();
53*04fd306cSNickeau        if (!($store instanceof MetadataDokuWikiStore)) {
54*04fd306cSNickeau            return $this;
55*04fd306cSNickeau        }
56*04fd306cSNickeau
57*04fd306cSNickeau        /**
58*04fd306cSNickeau         * Dokuwiki stores the first image in under relation
59*04fd306cSNickeau         * but as we can't take over the renderer code to enable svg as first image
60*04fd306cSNickeau         * we write it in the root to overcome a conflict
61*04fd306cSNickeau         *
62*04fd306cSNickeau         * Image set by {@link \syntax_plugin_combo_media::registerFirstImage()}
63*04fd306cSNickeau         */
64*04fd306cSNickeau        $firstImageId = $store->getFromName(FirstSvgIllustration::PROPERTY_NAME);
65*04fd306cSNickeau
66*04fd306cSNickeau
67*04fd306cSNickeau        $this->setFromStoreValueWithoutException($firstImageId);
68*04fd306cSNickeau
69*04fd306cSNickeau        return $this;
70*04fd306cSNickeau    }
71*04fd306cSNickeau
72*04fd306cSNickeau
73*04fd306cSNickeau    static public function getPersistenceType(): string
74*04fd306cSNickeau    {
75*04fd306cSNickeau        return Metadata::DERIVED_METADATA;
76*04fd306cSNickeau    }
77*04fd306cSNickeau
78*04fd306cSNickeau    static public function getDrive(): string
79*04fd306cSNickeau    {
80*04fd306cSNickeau        return WikiPath::MEDIA_DRIVE;
81*04fd306cSNickeau    }
82*04fd306cSNickeau}
83