xref: /plugin/combo/ComboStrap/FirstRasterImage.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 raster image
11*04fd306cSNickeau * via {@link \syntax_plugin_combo_media::registerFirstImage()}
12*04fd306cSNickeau */
13*04fd306cSNickeauclass FirstRasterImage extends MetadataImage
14*04fd306cSNickeau{
15*04fd306cSNickeau
16*04fd306cSNickeau    /**
17*04fd306cSNickeau     * Our first image metadata
18*04fd306cSNickeau     * We can't overwrite the {@link \Doku_Renderer_metadata::$firstimage first image}
19*04fd306cSNickeau     * We put it then in directly under the root
20*04fd306cSNickeau     */
21*04fd306cSNickeau    public const PROPERTY_NAME = "first-image-raster";
22*04fd306cSNickeau
23*04fd306cSNickeau    public static function createForPage(ResourceCombo $resource): FirstRasterImage
24*04fd306cSNickeau    {
25*04fd306cSNickeau        return (new FirstRasterImage())
26*04fd306cSNickeau            ->setResource($resource);
27*04fd306cSNickeau    }
28*04fd306cSNickeau
29*04fd306cSNickeau    static public function getDescription(): string
30*04fd306cSNickeau    {
31*04fd306cSNickeau        return "The first raster image of the page";
32*04fd306cSNickeau    }
33*04fd306cSNickeau
34*04fd306cSNickeau    static public function getLabel(): string
35*04fd306cSNickeau    {
36*04fd306cSNickeau        return "First Raster image";
37*04fd306cSNickeau    }
38*04fd306cSNickeau
39*04fd306cSNickeau    public static function getName(): string
40*04fd306cSNickeau    {
41*04fd306cSNickeau        return self::PROPERTY_NAME;
42*04fd306cSNickeau    }
43*04fd306cSNickeau
44*04fd306cSNickeau
45*04fd306cSNickeau    static public function isMutable(): bool
46*04fd306cSNickeau    {
47*04fd306cSNickeau        return false;
48*04fd306cSNickeau    }
49*04fd306cSNickeau
50*04fd306cSNickeau    /**
51*04fd306cSNickeau     * @return WikiPath
52*04fd306cSNickeau     * @throws ExceptionNotFound
53*04fd306cSNickeau     */
54*04fd306cSNickeau    public function getValue(): WikiPath
55*04fd306cSNickeau    {
56*04fd306cSNickeau
57*04fd306cSNickeau        $store = $this->getReadStore();
58*04fd306cSNickeau        if (!($store instanceof MetadataDokuWikiStore)) {
59*04fd306cSNickeau            throw new ExceptionNotFound();
60*04fd306cSNickeau        }
61*04fd306cSNickeau
62*04fd306cSNickeau        /**
63*04fd306cSNickeau         *
64*04fd306cSNickeau         * Image set by {@link \syntax_plugin_combo_media::registerFirstImage()}
65*04fd306cSNickeau         */
66*04fd306cSNickeau        $firstImageId = $store->getFromName(FirstRasterImage::PROPERTY_NAME);
67*04fd306cSNickeau
68*04fd306cSNickeau        if ($firstImageId !== null) {
69*04fd306cSNickeau            return WikiPath::createMediaPathFromId($firstImageId);
70*04fd306cSNickeau        }
71*04fd306cSNickeau
72*04fd306cSNickeau        throw new ExceptionNotFound();
73*04fd306cSNickeau
74*04fd306cSNickeau    }
75*04fd306cSNickeau
76*04fd306cSNickeau    static public function getPersistenceType(): string
77*04fd306cSNickeau    {
78*04fd306cSNickeau        return Metadata::DERIVED_METADATA;
79*04fd306cSNickeau    }
80*04fd306cSNickeau
81*04fd306cSNickeau    static public function getDrive(): string
82*04fd306cSNickeau    {
83*04fd306cSNickeau        return WikiPath::MEDIA_DRIVE;
84*04fd306cSNickeau    }
85*04fd306cSNickeau
86*04fd306cSNickeau}
87