xref: /plugin/combo/ComboStrap/References.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataTabular;
9*04fd306cSNickeau
10c3437056SNickeauclass References extends MetadataTabular
11c3437056SNickeau{
12c3437056SNickeau
13c3437056SNickeau
14*04fd306cSNickeau    const PROPERTY_NAME = "references";
15*04fd306cSNickeau
16*04fd306cSNickeau    public static function createFromResource(MarkupPath $page)
17c3437056SNickeau    {
18c3437056SNickeau        return (new References())
19c3437056SNickeau            ->setResource($page);
20c3437056SNickeau    }
21c3437056SNickeau
22*04fd306cSNickeau    static public function getDescription(): string
23c3437056SNickeau    {
24c3437056SNickeau        return "The link of the page that references another resources";
25c3437056SNickeau    }
26c3437056SNickeau
27*04fd306cSNickeau    static public function getLabel(): string
28c3437056SNickeau    {
29c3437056SNickeau        return "References";
30c3437056SNickeau    }
31c3437056SNickeau
32c3437056SNickeau    public static function getName(): string
33c3437056SNickeau    {
34*04fd306cSNickeau        return self::PROPERTY_NAME;
35c3437056SNickeau    }
36c3437056SNickeau
37*04fd306cSNickeau    static public function getPersistenceType(): string
38c3437056SNickeau    {
39c3437056SNickeau        return Metadata::DERIVED_METADATA;
40c3437056SNickeau    }
41c3437056SNickeau
42*04fd306cSNickeau    static public function isMutable(): bool
43c3437056SNickeau    {
44c3437056SNickeau        return false;
45c3437056SNickeau    }
46c3437056SNickeau
47*04fd306cSNickeau    public function getDefaultValue(): array
48c3437056SNickeau    {
49*04fd306cSNickeau        return [];
50c3437056SNickeau    }
51c3437056SNickeau
52c3437056SNickeau    public function getUidClass(): ?string
53c3437056SNickeau    {
54c3437056SNickeau        return Reference::class;
55c3437056SNickeau    }
56c3437056SNickeau
57*04fd306cSNickeau    static public function getChildrenClass(): array
58c3437056SNickeau    {
59c3437056SNickeau        return [Reference::class];
60c3437056SNickeau    }
61c3437056SNickeau
62c3437056SNickeau    public function buildFromReadStore(): References
63c3437056SNickeau    {
64c3437056SNickeau        $metadataStore = $this->getReadStore();
65c3437056SNickeau        if ($metadataStore === null) {
66c3437056SNickeau            LogUtility::msg("The metadata store is unknown. You need to define a resource or a store to build from it");
67c3437056SNickeau            return $this;
68c3437056SNickeau        }
69*04fd306cSNickeau        if ($metadataStore->isDokuWikiStore()) {
70c3437056SNickeau
71*04fd306cSNickeau            $relation = $metadataStore->getFromName("relation");
72*04fd306cSNickeau            if (is_array($relation)) {
73c3437056SNickeau
74c3437056SNickeau                $this->wasBuild = true;
75c3437056SNickeau                $referencesArray = $relation["references"];
76c3437056SNickeau                if ($referencesArray !== null) {
77*04fd306cSNickeau                    $referencesArray = array_keys($referencesArray);
78c3437056SNickeau                }
79*04fd306cSNickeau                $this->setFromStoreValueWithoutException($referencesArray);
80*04fd306cSNickeau
81c3437056SNickeau                return $this;
82c3437056SNickeau
83c3437056SNickeau            }
84c3437056SNickeau
85c3437056SNickeau        }
86c3437056SNickeau
87c3437056SNickeau        return parent::buildFromReadStore();
88c3437056SNickeau    }
89c3437056SNickeau
90c3437056SNickeau
91c3437056SNickeau}
92