xref: /template/strap/ComboStrap/DokuwikiId.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText;
9c3437056SNickeauuse DateTime;
10c3437056SNickeau
11c3437056SNickeau/**
12c3437056SNickeau
13c3437056SNickeau * @package ComboStrap
14c3437056SNickeau * Represents the wiki id of a resource
15c3437056SNickeau */
16c3437056SNickeauclass DokuwikiId extends MetadataText
17c3437056SNickeau{
18c3437056SNickeau
19c3437056SNickeau
20c3437056SNickeau    public const DOKUWIKI_ID_ATTRIBUTE = "id";
21c3437056SNickeau
22c3437056SNickeau    public static function createForPage(ResourceCombo $page): DokuwikiId
23c3437056SNickeau    {
24c3437056SNickeau        return (new DokuwikiId())
25c3437056SNickeau            ->setResource($page);
26c3437056SNickeau    }
27c3437056SNickeau
28c3437056SNickeau    public function getDefaultValue(): ?DateTime
29c3437056SNickeau    {
30c3437056SNickeau        return null;
31c3437056SNickeau    }
32c3437056SNickeau
33*04fd306cSNickeau    public function getValue(): string
34c3437056SNickeau    {
35*04fd306cSNickeau        $path = $this->getResource()->getPathObject();
36*04fd306cSNickeau        if($path instanceof WikiPath){
37*04fd306cSNickeau            return $path->getWikiId();
38*04fd306cSNickeau        }
39*04fd306cSNickeau        if($path instanceof LocalPath){
40*04fd306cSNickeau            try {
41*04fd306cSNickeau                return $path->toWikiPath()->getWikiId();
42*04fd306cSNickeau            } catch (ExceptionBadArgument $e) {
43*04fd306cSNickeau                throw new ExceptionNotFound($e->getMessage());
44*04fd306cSNickeau            }
45*04fd306cSNickeau        }
46*04fd306cSNickeau        throw new ExceptionNotFound("Unknown path, the dokuwiki id cannot be determined");
47*04fd306cSNickeau
48c3437056SNickeau    }
49c3437056SNickeau
50c3437056SNickeau
51c3437056SNickeau    public static function getName(): string
52c3437056SNickeau    {
53c3437056SNickeau        return self::DOKUWIKI_ID_ATTRIBUTE;
54c3437056SNickeau    }
55c3437056SNickeau
56c3437056SNickeau
57*04fd306cSNickeau    public static function getPersistenceType(): string
58c3437056SNickeau    {
59c3437056SNickeau        return Metadata::DERIVED_METADATA;
60c3437056SNickeau    }
61c3437056SNickeau
62c3437056SNickeau
63*04fd306cSNickeau    public static function getTab(): ?string
64c3437056SNickeau    {
65c3437056SNickeau        return null;
66c3437056SNickeau    }
67c3437056SNickeau
68*04fd306cSNickeau    public static function getDescription(): string
69c3437056SNickeau    {
70c3437056SNickeau        return "The id of a resource represents the path of a resource from its root directory";
71c3437056SNickeau    }
72c3437056SNickeau
73*04fd306cSNickeau    public static function getLabel(): string
74c3437056SNickeau    {
75c3437056SNickeau        return "Wiki Id";
76c3437056SNickeau    }
77c3437056SNickeau
78*04fd306cSNickeau    public static function isMutable(): bool
79c3437056SNickeau    {
80c3437056SNickeau        return false;
81c3437056SNickeau    }
82*04fd306cSNickeau
83*04fd306cSNickeau
84c3437056SNickeau}
85