xref: /plugin/combo/ComboStrap/FeaturedIcon.php (revision b3ab836de3fc1a6647533ed7814c87505fc7255d)
104fd306cSNickeau<?php
204fd306cSNickeau
304fd306cSNickeaunamespace ComboStrap;
404fd306cSNickeau
504fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
604fd306cSNickeauuse ComboStrap\Meta\Api\MetadataImage;
704fd306cSNickeau
804fd306cSNickeau/**
904fd306cSNickeau * A derived meta that captures the first raster image
1004fd306cSNickeau * via {@link \syntax_plugin_combo_media::registerFirstImage()}
1104fd306cSNickeau */
1204fd306cSNickeauclass FeaturedIcon extends MetadataImage
1304fd306cSNickeau{
1404fd306cSNickeau
1504fd306cSNickeau    public const PROPERTY_NAME = "featured-icon";
1604fd306cSNickeau    public const FIRST_ICON_PARSED = "first-icon-image-parsed";
1704fd306cSNickeau
1804fd306cSNickeau    public static function createForPage(ResourceCombo $resource): FeaturedIcon
1904fd306cSNickeau    {
2004fd306cSNickeau        return (new FeaturedIcon())
2104fd306cSNickeau            ->setResource($resource);
2204fd306cSNickeau    }
2304fd306cSNickeau
2404fd306cSNickeau    static public function getDescription(): string
2504fd306cSNickeau    {
2604fd306cSNickeau        return "An illustrative icon for the page";
2704fd306cSNickeau    }
2804fd306cSNickeau
2904fd306cSNickeau    static public function getLabel(): string
3004fd306cSNickeau    {
3104fd306cSNickeau        return "Featured Icon";
3204fd306cSNickeau    }
3304fd306cSNickeau
3404fd306cSNickeau    public static function getName(): string
3504fd306cSNickeau    {
3604fd306cSNickeau        return self::PROPERTY_NAME;
3704fd306cSNickeau    }
3804fd306cSNickeau
3904fd306cSNickeau
4004fd306cSNickeau    static public function isMutable(): bool
4104fd306cSNickeau    {
4204fd306cSNickeau        return true;
4304fd306cSNickeau    }
4404fd306cSNickeau
4504fd306cSNickeau
4604fd306cSNickeau    static public function getPersistenceType(): string
4704fd306cSNickeau    {
4804fd306cSNickeau        return Metadata::PERSISTENT_METADATA;
4904fd306cSNickeau    }
5004fd306cSNickeau
51*b3ab836dSgerardnico    public function getDefaultValue(): WikiPath
5204fd306cSNickeau    {
53*b3ab836dSgerardnico
54*b3ab836dSgerardnico        /**
55*b3ab836dSgerardnico         * @var MarkupPath $page
56*b3ab836dSgerardnico         */
57*b3ab836dSgerardnico        $page = $this->getResource();
58*b3ab836dSgerardnico        if($page->isRootHomePage()){
59*b3ab836dSgerardnico            try {
60*b3ab836dSgerardnico                return Site::getLogoAsSvgImage();
61*b3ab836dSgerardnico            } catch (ExceptionNotFound $e) {
62*b3ab836dSgerardnico                // not found
63*b3ab836dSgerardnico            }
64*b3ab836dSgerardnico        }
65*b3ab836dSgerardnico
6604fd306cSNickeau        /**
6704fd306cSNickeau         *
6804fd306cSNickeau         * Image set by {@link \syntax_plugin_combo_media::registerFirstImage()}
6904fd306cSNickeau         */
7004fd306cSNickeau        $iconImageParsed = $this->getReadStore()->getFromName(FeaturedIcon::FIRST_ICON_PARSED);
7104fd306cSNickeau
7204fd306cSNickeau        if ($iconImageParsed !== null) {
7304fd306cSNickeau            return WikiPath::createMediaPathFromId($iconImageParsed);
7404fd306cSNickeau        }
7504fd306cSNickeau
7604fd306cSNickeau        throw new ExceptionNotFound();
7704fd306cSNickeau    }
7804fd306cSNickeau
7904fd306cSNickeau    static public function getDrive(): string
8004fd306cSNickeau    {
8104fd306cSNickeau        return WikiPath::MEDIA_DRIVE;
8204fd306cSNickeau    }
8304fd306cSNickeau
8404fd306cSNickeau    static public function isOnForm(): bool
8504fd306cSNickeau    {
8604fd306cSNickeau        return true;
8704fd306cSNickeau    }
8804fd306cSNickeau}
89