xref: /plugin/combo/ComboStrap/Meta/Field/PageH1.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeaunamespace ComboStrap\Meta\Field;
5*04fd306cSNickeau
6*04fd306cSNickeau
7*04fd306cSNickeauuse ComboStrap\ExceptionNotFound;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
9*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore;
10*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText;
11*04fd306cSNickeauuse ComboStrap\MetaManagerForm;
12*04fd306cSNickeauuse ComboStrap\PageTitle;
13*04fd306cSNickeauuse ComboStrap\ResourceName;
14*04fd306cSNickeau
15*04fd306cSNickeauclass PageH1 extends MetadataText
16*04fd306cSNickeau{
17*04fd306cSNickeau
18*04fd306cSNickeau
19*04fd306cSNickeau    public const H1_PARSED = "h1_parsed";
20*04fd306cSNickeau    public const PROPERTY_NAME = "h1";
21*04fd306cSNickeau
22*04fd306cSNickeau    public static function createForPage($page): PageH1
23*04fd306cSNickeau    {
24*04fd306cSNickeau        return (new PageH1())
25*04fd306cSNickeau            ->setResource($page);
26*04fd306cSNickeau    }
27*04fd306cSNickeau
28*04fd306cSNickeau    public static function getTab(): string
29*04fd306cSNickeau    {
30*04fd306cSNickeau        return MetaManagerForm::TAB_PAGE_VALUE;
31*04fd306cSNickeau    }
32*04fd306cSNickeau
33*04fd306cSNickeau    public static function getDescription(): string
34*04fd306cSNickeau    {
35*04fd306cSNickeau        return "The heading 1 (or H1) is the first heading of your page. It may be used in template to make a difference with the title.";
36*04fd306cSNickeau    }
37*04fd306cSNickeau
38*04fd306cSNickeau    public static function getLabel(): string
39*04fd306cSNickeau    {
40*04fd306cSNickeau        return "H1 (Heading 1)";
41*04fd306cSNickeau    }
42*04fd306cSNickeau
43*04fd306cSNickeau    static public function getName(): string
44*04fd306cSNickeau    {
45*04fd306cSNickeau        return self::PROPERTY_NAME;
46*04fd306cSNickeau    }
47*04fd306cSNickeau
48*04fd306cSNickeau    public static function getPersistenceType(): string
49*04fd306cSNickeau    {
50*04fd306cSNickeau        return Metadata::PERSISTENT_METADATA;
51*04fd306cSNickeau    }
52*04fd306cSNickeau
53*04fd306cSNickeau
54*04fd306cSNickeau    public static function isMutable(): bool
55*04fd306cSNickeau    {
56*04fd306cSNickeau        return true;
57*04fd306cSNickeau    }
58*04fd306cSNickeau
59*04fd306cSNickeau    /**
60*04fd306cSNickeau     * @return string
61*04fd306cSNickeau     */
62*04fd306cSNickeau    public function getDefaultValue(): string
63*04fd306cSNickeau    {
64*04fd306cSNickeau        $store = $this->getReadStore();
65*04fd306cSNickeau        if ($store instanceof MetadataDokuWikiStore) {
66*04fd306cSNickeau            $h1Parsed = $store->getFromName(self::H1_PARSED);
67*04fd306cSNickeau            if (!empty($h1Parsed)) {
68*04fd306cSNickeau                return $h1Parsed;
69*04fd306cSNickeau            }
70*04fd306cSNickeau            // dokuwiki
71*04fd306cSNickeau            $h1 = $store->getCurrentFromName("title");
72*04fd306cSNickeau            if (!empty($h1)) {
73*04fd306cSNickeau                return $h1;
74*04fd306cSNickeau            }
75*04fd306cSNickeau        }
76*04fd306cSNickeau        try {
77*04fd306cSNickeau            return PageTitle::createForMarkup($this->getResource())
78*04fd306cSNickeau                ->getValue();
79*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
80*04fd306cSNickeau            // ok
81*04fd306cSNickeau        }
82*04fd306cSNickeau
83*04fd306cSNickeau        return ResourceName::createForResource($this->getResource())
84*04fd306cSNickeau            ->getValueOrDefault();
85*04fd306cSNickeau
86*04fd306cSNickeau    }
87*04fd306cSNickeau
88*04fd306cSNickeau    /**
89*04fd306cSNickeau     * @return string
90*04fd306cSNickeau     */
91*04fd306cSNickeau    public function getValueOrDefault(): string
92*04fd306cSNickeau    {
93*04fd306cSNickeau        try {
94*04fd306cSNickeau            return $this->getValue();
95*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
96*04fd306cSNickeau            return $this->getDefaultValue();
97*04fd306cSNickeau        }
98*04fd306cSNickeau    }
99*04fd306cSNickeau
100*04fd306cSNickeau
101*04fd306cSNickeau    public static function getCanonical(): string
102*04fd306cSNickeau    {
103*04fd306cSNickeau        return static::getName();
104*04fd306cSNickeau    }
105*04fd306cSNickeau
106*04fd306cSNickeau    public function setDefaultValue(string $defaultValue): PageH1
107*04fd306cSNickeau    {
108*04fd306cSNickeau        $store = $this->getWriteStore();
109*04fd306cSNickeau        if ($store instanceof MetadataDokuWikiStore) {
110*04fd306cSNickeau            $store->setFromPersistentName(self::H1_PARSED, $defaultValue);
111*04fd306cSNickeau        }
112*04fd306cSNickeau        return $this;
113*04fd306cSNickeau
114*04fd306cSNickeau    }
115*04fd306cSNickeau
116*04fd306cSNickeau
117*04fd306cSNickeau    public static function isOnForm(): bool
118*04fd306cSNickeau    {
119*04fd306cSNickeau        return true;
120*04fd306cSNickeau    }
121*04fd306cSNickeau}
122