xref: /plugin/combo/ComboStrap/PageTitle.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText;
8*04fd306cSNickeauuse ComboStrap\Meta\Field\PageH1;
9*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore;
10*04fd306cSNickeau
11c3437056SNickeauclass PageTitle extends MetadataText
12c3437056SNickeau{
13c3437056SNickeau
14c3437056SNickeau    public const PROPERTY_NAME = 'title';
15c3437056SNickeau    public const TITLE = 'title';
16c3437056SNickeau
17*04fd306cSNickeau    public static function createForMarkup($page): PageTitle
18c3437056SNickeau    {
19c3437056SNickeau        return (new PageTitle())
20c3437056SNickeau            ->setResource($page);
21c3437056SNickeau    }
22c3437056SNickeau
23*04fd306cSNickeau    public static function getTab(): string
24c3437056SNickeau    {
25c3437056SNickeau        return MetaManagerForm::TAB_PAGE_VALUE;
26c3437056SNickeau    }
27c3437056SNickeau
28*04fd306cSNickeau    public static function getDescription(): string
29c3437056SNickeau    {
30c3437056SNickeau        return "The page title is a description advertised to external application such as search engine and browser.";
31c3437056SNickeau    }
32c3437056SNickeau
33*04fd306cSNickeau    public static function getLabel(): string
34c3437056SNickeau    {
35c3437056SNickeau        return "Title";
36c3437056SNickeau    }
37c3437056SNickeau
38c3437056SNickeau    static public function getName(): string
39c3437056SNickeau    {
40c3437056SNickeau        return self::PROPERTY_NAME;
41c3437056SNickeau    }
42c3437056SNickeau
43*04fd306cSNickeau    public static function getPersistenceType(): string
44c3437056SNickeau    {
45*04fd306cSNickeau        return MetadataDokuWikiStore::PERSISTENT_DOKUWIKI_KEY;
46c3437056SNickeau    }
47c3437056SNickeau
48*04fd306cSNickeau    public static function isMutable(): bool
49c3437056SNickeau    {
50c3437056SNickeau        return true;
51c3437056SNickeau    }
52c3437056SNickeau
53c3437056SNickeau    /**
54c3437056SNickeau     * `title` is created by DokuWiki
55c3437056SNickeau     * in current but not persistent
56c3437056SNickeau     * and hold the heading 1, see {@link p_get_first_heading}
57c3437056SNickeau     */
58*04fd306cSNickeau    public function getDefaultValue(): string
59c3437056SNickeau    {
60c3437056SNickeau
61c3437056SNickeau        $resource = $this->getResource();
62*04fd306cSNickeau        if (!($resource instanceof MarkupPath)) {
63*04fd306cSNickeau            LogUtility::internalError("Resource that are not page have no title");
64*04fd306cSNickeau            return ResourceName::getFromPath($resource->getPathObject());
65*04fd306cSNickeau        }
66c3437056SNickeau        if ($resource->isRootHomePage() && !empty(Site::getTagLine())) {
67c3437056SNickeau            return Site::getTagLine();
68c3437056SNickeau        }
69*04fd306cSNickeau        return PageH1::createForPage($this->getResource())
70*04fd306cSNickeau            ->getValueOrDefault();
71c3437056SNickeau
72c3437056SNickeau    }
73c3437056SNickeau
74*04fd306cSNickeau    /**
75*04fd306cSNickeau     * @return string
76*04fd306cSNickeau     */
77*04fd306cSNickeau    public function getValueOrDefault(): string
78*04fd306cSNickeau    {
79*04fd306cSNickeau        try {
80*04fd306cSNickeau            return $this->getValue();
81*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
82*04fd306cSNickeau            return $this->getDefaultValue();
83*04fd306cSNickeau        }
84*04fd306cSNickeau    }
85*04fd306cSNickeau
86*04fd306cSNickeau
87*04fd306cSNickeau    public static function getCanonical(): string
88c3437056SNickeau    {
89c3437056SNickeau        return self::TITLE;
90c3437056SNickeau    }
91c3437056SNickeau
92c3437056SNickeau
93*04fd306cSNickeau    public static function isOnForm(): bool
94*04fd306cSNickeau    {
95*04fd306cSNickeau        return true;
96*04fd306cSNickeau    }
97*04fd306cSNickeau
98c3437056SNickeau}
99