1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace ComboStrap\Meta\Field; 4*04fd306cSNickeau 5*04fd306cSNickeauuse ComboStrap\ExceptionNotFound; 6*04fd306cSNickeauuse ComboStrap\FileSystems; 7*04fd306cSNickeauuse ComboStrap\MarkupPath; 8*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 9*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataImage; 10*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 11*04fd306cSNickeauuse ComboStrap\PageImageUsage; 12*04fd306cSNickeauuse ComboStrap\ResourceCombo; 13*04fd306cSNickeauuse ComboStrap\Site; 14*04fd306cSNickeauuse ComboStrap\WikiPath; 15*04fd306cSNickeau 16*04fd306cSNickeau/** 17*04fd306cSNickeau * A field that derived the featured image for the html page/blog 18*04fd306cSNickeau * 19*04fd306cSNickeau * (The featured image for a html page may be a svg 20*04fd306cSNickeau * while for a social network, it should not) 21*04fd306cSNickeau * 22*04fd306cSNickeau * This meta returns the first svg image found 23*04fd306cSNickeau * otherwise the raster one 24*04fd306cSNickeau */ 25*04fd306cSNickeauclass FeaturedImage extends MetadataImage 26*04fd306cSNickeau{ 27*04fd306cSNickeau 28*04fd306cSNickeau 29*04fd306cSNickeau const PROPERTY_NAME = "featured-image"; 30*04fd306cSNickeau 31*04fd306cSNickeau 32*04fd306cSNickeau public static function createFromResourcePage(MarkupPath $page): FeaturedImage 33*04fd306cSNickeau { 34*04fd306cSNickeau return (new FeaturedImage())->setResource($page); 35*04fd306cSNickeau } 36*04fd306cSNickeau 37*04fd306cSNickeau static public function getDescription(): string 38*04fd306cSNickeau { 39*04fd306cSNickeau return "The image for a page/blog"; 40*04fd306cSNickeau } 41*04fd306cSNickeau 42*04fd306cSNickeau static public function getLabel(): string 43*04fd306cSNickeau { 44*04fd306cSNickeau return "Featured Image"; 45*04fd306cSNickeau } 46*04fd306cSNickeau 47*04fd306cSNickeau public static function getName(): string 48*04fd306cSNickeau { 49*04fd306cSNickeau return self::PROPERTY_NAME; 50*04fd306cSNickeau } 51*04fd306cSNickeau 52*04fd306cSNickeau static public function getPersistenceType(): string 53*04fd306cSNickeau { 54*04fd306cSNickeau return Metadata::DERIVED_METADATA; 55*04fd306cSNickeau } 56*04fd306cSNickeau 57*04fd306cSNickeau 58*04fd306cSNickeau static public function isMutable(): bool 59*04fd306cSNickeau { 60*04fd306cSNickeau return false; 61*04fd306cSNickeau } 62*04fd306cSNickeau 63*04fd306cSNickeau public function getValue(): WikiPath 64*04fd306cSNickeau { 65*04fd306cSNickeau 66*04fd306cSNickeau $contextPage = $this->getResource(); 67*04fd306cSNickeau return $this->getFeaturedImageBlogForContext($contextPage); 68*04fd306cSNickeau 69*04fd306cSNickeau } 70*04fd306cSNickeau 71*04fd306cSNickeau /** 72*04fd306cSNickeau * The image may not be the first otherwise, it will make a duplicate 73*04fd306cSNickeau * @param ResourceCombo $contextPage 74*04fd306cSNickeau * @return WikiPath 75*04fd306cSNickeau * @throws ExceptionNotFound 76*04fd306cSNickeau */ 77*04fd306cSNickeau private function getFeaturedImageBlogForContext(ResourceCombo $contextPage): WikiPath 78*04fd306cSNickeau { 79*04fd306cSNickeau $featuredSvgImage = FeaturedSvgImage::createFromResourcePage($contextPage); 80*04fd306cSNickeau $featuredRasterImage = FeaturedRasterImage::createFromResourcePage($contextPage); 81*04fd306cSNickeau try { 82*04fd306cSNickeau return $featuredSvgImage->getValue(); 83*04fd306cSNickeau } catch (ExceptionNotFound $e) { 84*04fd306cSNickeau try { 85*04fd306cSNickeau return $featuredRasterImage->getValue(); 86*04fd306cSNickeau } catch (ExceptionNotFound $e) { 87*04fd306cSNickeau try { 88*04fd306cSNickeau return $featuredSvgImage->getDefaultValue(); 89*04fd306cSNickeau } catch (ExceptionNotFound $e) { 90*04fd306cSNickeau return $featuredRasterImage->getDefaultValue(); 91*04fd306cSNickeau } 92*04fd306cSNickeau } 93*04fd306cSNickeau } 94*04fd306cSNickeau } 95*04fd306cSNickeau 96*04fd306cSNickeau static public function getDrive(): string 97*04fd306cSNickeau { 98*04fd306cSNickeau return WikiPath::MEDIA_DRIVE; 99*04fd306cSNickeau } 100*04fd306cSNickeau 101*04fd306cSNickeau static public function isOnForm(): bool 102*04fd306cSNickeau { 103*04fd306cSNickeau return true; 104*04fd306cSNickeau } 105*04fd306cSNickeau 106*04fd306cSNickeau public static function getCanonical(): string 107*04fd306cSNickeau { 108*04fd306cSNickeau return self::PROPERTY_NAME; 109*04fd306cSNickeau } 110*04fd306cSNickeau 111*04fd306cSNickeau 112*04fd306cSNickeau} 113