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