xref: /template/strap/ComboStrap/Meta/Field/FeaturedImage.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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