xref: /plugin/combo/ComboStrap/PageKeywords.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataMultiple;
9*04fd306cSNickeau
10c3437056SNickeauclass PageKeywords extends MetadataMultiple
11c3437056SNickeau{
12c3437056SNickeau
13c3437056SNickeau    public const PROPERTY_NAME = "keywords";
14c3437056SNickeau
15c3437056SNickeau
16*04fd306cSNickeau    public static function createForPage(MarkupPath $page)
17c3437056SNickeau    {
18c3437056SNickeau        return (new PageKeywords())
19c3437056SNickeau            ->setResource($page);
20c3437056SNickeau    }
21c3437056SNickeau
22*04fd306cSNickeau    static public function getTab(): string
23c3437056SNickeau    {
24c3437056SNickeau        return MetaManagerForm::TAB_PAGE_VALUE;
25c3437056SNickeau    }
26c3437056SNickeau
27c3437056SNickeau
28*04fd306cSNickeau    static public function getDataType(): string
29c3437056SNickeau    {
30c3437056SNickeau        // in a form, we send a list of words
31c3437056SNickeau        return DataType::TEXT_TYPE_VALUE;
32c3437056SNickeau    }
33c3437056SNickeau
34c3437056SNickeau
35*04fd306cSNickeau    static public function getDescription(): string
36c3437056SNickeau    {
37c3437056SNickeau        return "The keywords added to your page (separated by a comma)";
38c3437056SNickeau    }
39c3437056SNickeau
40*04fd306cSNickeau    static public function getLabel(): string
41c3437056SNickeau    {
42c3437056SNickeau        return "Keywords";
43c3437056SNickeau    }
44c3437056SNickeau
45c3437056SNickeau    static public function getName(): string
46c3437056SNickeau    {
47c3437056SNickeau        return self::PROPERTY_NAME;
48c3437056SNickeau    }
49c3437056SNickeau
50c3437056SNickeau
51c3437056SNickeau    /**
52c3437056SNickeau     * The default of dokuwiki is the recursive parts of all {@link ResourceName page name}
53c3437056SNickeau     * in the hierarchy.
54c3437056SNickeau     * @return string[]|null
55c3437056SNickeau     */
56c3437056SNickeau    public function getDefaultValue(): ?array
57c3437056SNickeau    {
58c3437056SNickeau
59c3437056SNickeau        $resource = $this->getResource();
60*04fd306cSNickeau        if (!($resource instanceof MarkupPath)) {
61c3437056SNickeau            return null;
62c3437056SNickeau        }
63c3437056SNickeau        $keyWords = explode(" ", $resource->getNameOrDefault());
64*04fd306cSNickeau        $parentPage = $resource;
65*04fd306cSNickeau        while (true) {
66*04fd306cSNickeau            try {
67*04fd306cSNickeau                $parentPage = $parentPage->getParent();
68*04fd306cSNickeau            } catch (ExceptionNotFound $e) {
69*04fd306cSNickeau                break;
70*04fd306cSNickeau            }
71c3437056SNickeau            if (!$parentPage->isRootHomePage()) {
72c3437056SNickeau                $parentKeyWords = explode(" ", $parentPage->getNameOrDefault());
73c3437056SNickeau                $keyWords = array_merge($keyWords, $parentKeyWords);
74c3437056SNickeau            }
75c3437056SNickeau        }
76c3437056SNickeau        $keyWords = array_map(function ($element) {
77c3437056SNickeau            return strtolower($element);
78c3437056SNickeau        }, $keyWords);
79c3437056SNickeau        return array_unique($keyWords);
80c3437056SNickeau    }
81c3437056SNickeau
82*04fd306cSNickeau    static public function getPersistenceType(): string
83c3437056SNickeau    {
84c3437056SNickeau        return Metadata::PERSISTENT_METADATA;
85c3437056SNickeau    }
86c3437056SNickeau
87*04fd306cSNickeau    static public function isMutable(): bool
88c3437056SNickeau    {
89c3437056SNickeau        return true;
90c3437056SNickeau    }
91c3437056SNickeau
92c3437056SNickeau
93*04fd306cSNickeau    public function setFromStoreValueWithoutException($value): Metadata
94c3437056SNickeau    {
95c3437056SNickeau        try {
96c3437056SNickeau            $this->array = $this->toArrayOrNull($value);
97*04fd306cSNickeau        } catch (ExceptionCompile $e) {
98c3437056SNickeau            LogUtility::msg($e->getMessage(), LogUtility::LVL_MSG_ERROR, $e->getMessage());
99c3437056SNickeau        }
100c3437056SNickeau        return $this;
101c3437056SNickeau    }
102c3437056SNickeau
103c3437056SNickeau
104*04fd306cSNickeau    static public function getCanonical(): string
105c3437056SNickeau    {
106c3437056SNickeau        return self::PROPERTY_NAME;
107c3437056SNickeau    }
108c3437056SNickeau
109c3437056SNickeau
110*04fd306cSNickeau    static public function isOnForm(): bool
111*04fd306cSNickeau    {
112*04fd306cSNickeau        return true;
113*04fd306cSNickeau    }
114c3437056SNickeau}
115