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