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