xref: /template/strap/ComboStrap/ResourceName.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse action_plugin_combo_metaprocessing;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText;
9*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore;
10*04fd306cSNickeau
11c3437056SNickeauclass ResourceName extends MetadataText
12c3437056SNickeau{
13c3437056SNickeau
14c3437056SNickeau
15c3437056SNickeau    public const PROPERTY_NAME = "name";
16c3437056SNickeau
17*04fd306cSNickeau    public static function createForResource(ResourceCombo $resource): ResourceName
18c3437056SNickeau    {
19c3437056SNickeau        return (new ResourceName())
20*04fd306cSNickeau            ->setResource($resource);
21c3437056SNickeau    }
22c3437056SNickeau
23*04fd306cSNickeau    /**
24*04fd306cSNickeau     * Return a name from a path
25*04fd306cSNickeau     * @param Path $path
26*04fd306cSNickeau     * @return string
27*04fd306cSNickeau     */
28*04fd306cSNickeau    public static function getFromPath(Path $path): string
29*04fd306cSNickeau    {
30*04fd306cSNickeau        try {
31*04fd306cSNickeau            $name = $path->getLastNameWithoutExtension();
32*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
33*04fd306cSNickeau            try {
34*04fd306cSNickeau                $name = $path->getUrl()->getHost();
35*04fd306cSNickeau            } catch (ExceptionNotFound $e) {
36*04fd306cSNickeau                return "Unknown";
37*04fd306cSNickeau            }
38*04fd306cSNickeau        }
39*04fd306cSNickeau        $words = preg_split("/\s/", preg_replace("/[-_]/", " ", $name));
40*04fd306cSNickeau        $wordsUc = [];
41*04fd306cSNickeau        foreach ($words as $word) {
42*04fd306cSNickeau            $wordsUc[] = ucfirst($word);
43*04fd306cSNickeau        }
44*04fd306cSNickeau        return implode(" ", $wordsUc);
45*04fd306cSNickeau
46*04fd306cSNickeau    }
47*04fd306cSNickeau
48*04fd306cSNickeau    public static function getTab(): string
49c3437056SNickeau    {
50c3437056SNickeau        return MetaManagerForm::TAB_PAGE_VALUE;
51c3437056SNickeau    }
52c3437056SNickeau
53*04fd306cSNickeau    public static function getDescription(): string
54c3437056SNickeau    {
55*04fd306cSNickeau
56*04fd306cSNickeau        return "A name is the shortest description. It should be at maximum a couple of words long. It's used in navigational components or as a default in link.";
57*04fd306cSNickeau
58c3437056SNickeau    }
59c3437056SNickeau
60*04fd306cSNickeau    public static function getLabel(): string
61c3437056SNickeau    {
62*04fd306cSNickeau        return "The name of a page";
63c3437056SNickeau    }
64c3437056SNickeau
65c3437056SNickeau    static public function getName(): string
66c3437056SNickeau    {
67c3437056SNickeau        return self::PROPERTY_NAME;
68c3437056SNickeau    }
69c3437056SNickeau
70*04fd306cSNickeau    public static function getPersistenceType(): string
71c3437056SNickeau    {
72*04fd306cSNickeau        return MetadataDokuWikiStore::PERSISTENT_DOKUWIKI_KEY;
73c3437056SNickeau    }
74c3437056SNickeau
75*04fd306cSNickeau    public static function isMutable(): bool
76c3437056SNickeau    {
77c3437056SNickeau        return true;
78c3437056SNickeau    }
79c3437056SNickeau
80*04fd306cSNickeau    /**
81*04fd306cSNickeau     * @return string
82*04fd306cSNickeau     */
83c3437056SNickeau    public function getDefaultValue(): string
84c3437056SNickeau    {
85c3437056SNickeau
86c3437056SNickeau        $resourceCombo = $this->getResource();
87c3437056SNickeau
88c3437056SNickeau        /**
89c3437056SNickeau         * If this is a home page, the default
90c3437056SNickeau         * is the parent path name
91c3437056SNickeau         */
92*04fd306cSNickeau        $path = $resourceCombo->getPathObject();
93*04fd306cSNickeau        if ($resourceCombo instanceof MarkupPath) {
94*04fd306cSNickeau
95*04fd306cSNickeau
96*04fd306cSNickeau            if ($resourceCombo->isIndexPage() && !$resourceCombo->isRootHomePage()) {
97*04fd306cSNickeau
98*04fd306cSNickeau                try {
99*04fd306cSNickeau                    $path = $path->getParent();
100*04fd306cSNickeau                } catch (ExceptionNotFound $e) {
101*04fd306cSNickeau                    // no parent path
102*04fd306cSNickeau                    // should not happen because even the home page (:start) has
103*04fd306cSNickeau                    // a parent (ie :)
104*04fd306cSNickeau                    return Site::getIndexPageName();
105c3437056SNickeau                }
106c3437056SNickeau            }
107*04fd306cSNickeau        }
108*04fd306cSNickeau
109*04fd306cSNickeau        return self::getFromPath($path);
110*04fd306cSNickeau
111c3437056SNickeau
112c3437056SNickeau    }
113c3437056SNickeau
114*04fd306cSNickeau    public static function getCanonical(): string
115c3437056SNickeau    {
116*04fd306cSNickeau        return static::getName();
117c3437056SNickeau    }
118c3437056SNickeau
119*04fd306cSNickeau    /**
120*04fd306cSNickeau     * @return string
121*04fd306cSNickeau     */
122*04fd306cSNickeau    public function getValueOrDefault(): string
123*04fd306cSNickeau    {
124*04fd306cSNickeau        try {
125*04fd306cSNickeau            return $this->getValue();
126*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
127*04fd306cSNickeau            return $this->getDefaultValue();
128*04fd306cSNickeau        }
129*04fd306cSNickeau    }
130c3437056SNickeau
131*04fd306cSNickeau    public static function isOnForm(): bool
132*04fd306cSNickeau    {
133*04fd306cSNickeau        return true;
134*04fd306cSNickeau    }
135c3437056SNickeau}
136