xref: /plugin/combo/ComboStrap/PageType.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText;
9*04fd306cSNickeau
10c3437056SNickeauclass PageType extends MetadataText
11c3437056SNickeau{
12c3437056SNickeau
13c3437056SNickeau
14c3437056SNickeau    /**
15c3437056SNickeau     * @link https://ogp.me/#types Facebook ogp
16c3437056SNickeau     * @link https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#http://purl.org/dc/elements/1.1/type Dublin Core
17c3437056SNickeau     */
18c3437056SNickeau    public const PROPERTY_NAME = "type";
19c3437056SNickeau    public const BLOG_TYPE = "blog";
20c3437056SNickeau    public const WEB_PAGE_TYPE = "webpage";
21c3437056SNickeau    public const ARTICLE_TYPE = "article";
22c3437056SNickeau    public const ORGANIZATION_TYPE = "organization";
23c3437056SNickeau    public const NEWS_TYPE = "news";
24c3437056SNickeau    public const OTHER_TYPE = "other";
25c3437056SNickeau    public const WEBSITE_TYPE = "website";
26c3437056SNickeau    public const HOME_TYPE = "home";
27c3437056SNickeau    public const EVENT_TYPE = "event";
28c3437056SNickeau    /**
29c3437056SNickeau     * Default page type configuration
30c3437056SNickeau     */
31c3437056SNickeau    public const CONF_DEFAULT_PAGE_TYPE = "defaultPageType";
32c3437056SNickeau    public const CONF_DEFAULT_PAGE_TYPE_DEFAULT = PageType::ARTICLE_TYPE;
33c3437056SNickeau
34c3437056SNickeau    public static function createForPage($page): PageType
35c3437056SNickeau    {
36c3437056SNickeau        return (new PageType())
37c3437056SNickeau            ->setResource($page);
38c3437056SNickeau    }
39c3437056SNickeau
40*04fd306cSNickeau    public function setWriteStore($store): PageType
41*04fd306cSNickeau    {
42*04fd306cSNickeau        // Just to return the good type
43*04fd306cSNickeau        return parent::setWriteStore($store);
44*04fd306cSNickeau    }
45*04fd306cSNickeau
46*04fd306cSNickeau    /**
47*04fd306cSNickeau     * @return string
48*04fd306cSNickeau     */
49*04fd306cSNickeau    public function getValueOrDefault(): string
50*04fd306cSNickeau    {
51*04fd306cSNickeau        try {
52*04fd306cSNickeau            return $this->getValue();
53*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
54*04fd306cSNickeau            return $this->getDefaultValue();
55*04fd306cSNickeau        }
56*04fd306cSNickeau    }
57*04fd306cSNickeau
58*04fd306cSNickeau
59*04fd306cSNickeau    public function setReadStore($store): PageType
60*04fd306cSNickeau    {
61*04fd306cSNickeau        // Just to return the good type
62*04fd306cSNickeau        return parent::setReadStore($store);
63*04fd306cSNickeau    }
64*04fd306cSNickeau
65*04fd306cSNickeau
66*04fd306cSNickeau    static public function getTab(): string
67c3437056SNickeau    {
68c3437056SNickeau        return MetaManagerForm::TAB_TYPE_VALUE;
69c3437056SNickeau    }
70c3437056SNickeau
71*04fd306cSNickeau    static public function getDescription(): string
72c3437056SNickeau    {
73c3437056SNickeau        return "The type of page";
74c3437056SNickeau    }
75c3437056SNickeau
76*04fd306cSNickeau    static public function getLabel(): string
77c3437056SNickeau    {
78c3437056SNickeau        return "Page Type";
79c3437056SNickeau    }
80c3437056SNickeau
81c3437056SNickeau    static public function getName(): string
82c3437056SNickeau    {
83c3437056SNickeau        return self::PROPERTY_NAME;
84c3437056SNickeau    }
85c3437056SNickeau
86*04fd306cSNickeau    static public function getPersistenceType(): string
87c3437056SNickeau    {
88c3437056SNickeau        return Metadata::PERSISTENT_METADATA;
89c3437056SNickeau    }
90c3437056SNickeau
91*04fd306cSNickeau    static public function isMutable(): bool
92c3437056SNickeau    {
93c3437056SNickeau        return true;
94c3437056SNickeau    }
95c3437056SNickeau
96*04fd306cSNickeau    /**
97*04fd306cSNickeau     * @return string
98*04fd306cSNickeau     */
99*04fd306cSNickeau    public function getDefaultValue(): string
100c3437056SNickeau    {
101c3437056SNickeau        $resource = $this->getResource();
102*04fd306cSNickeau        if (!($resource instanceof MarkupPath)) {
103*04fd306cSNickeau            return self::OTHER_TYPE;
104c3437056SNickeau        }
105c3437056SNickeau
106c3437056SNickeau        if ($resource->isRootHomePage()) {
107c3437056SNickeau            return PageType::WEBSITE_TYPE;
108*04fd306cSNickeau        } else if ($resource->isIndexPage()) {
109c3437056SNickeau            return PageType::HOME_TYPE;
110c3437056SNickeau        } else {
111*04fd306cSNickeau            $defaultPageTypeConf = SiteConfig::getConfValue(PageType::CONF_DEFAULT_PAGE_TYPE, PageType::CONF_DEFAULT_PAGE_TYPE_DEFAULT);
112c3437056SNickeau            if (!empty($defaultPageTypeConf)) {
113c3437056SNickeau                return $defaultPageTypeConf;
114c3437056SNickeau            } else {
115*04fd306cSNickeau                return self::ARTICLE_TYPE;
116c3437056SNickeau            }
117c3437056SNickeau        }
118c3437056SNickeau    }
119c3437056SNickeau
120c3437056SNickeau    /**
121c3437056SNickeau     * The canonical for page type
122c3437056SNickeau     */
123*04fd306cSNickeau    static public function getCanonical(): string
124c3437056SNickeau    {
125c3437056SNickeau        return "page:type";
126c3437056SNickeau    }
127c3437056SNickeau
128c3437056SNickeau
129c3437056SNickeau    public function getPossibleValues(): ?array
130c3437056SNickeau    {
131c3437056SNickeau        $types = [
132c3437056SNickeau            self::ORGANIZATION_TYPE,
133c3437056SNickeau            self::ARTICLE_TYPE,
134c3437056SNickeau            self::NEWS_TYPE,
135c3437056SNickeau            self::BLOG_TYPE,
136c3437056SNickeau            self::WEBSITE_TYPE,
137c3437056SNickeau            self::EVENT_TYPE,
138c3437056SNickeau            self::HOME_TYPE,
139c3437056SNickeau            self::WEB_PAGE_TYPE,
140c3437056SNickeau            self::OTHER_TYPE
141c3437056SNickeau        ];
142c3437056SNickeau        sort($types);
143c3437056SNickeau        return $types;
144c3437056SNickeau    }
145*04fd306cSNickeau
146*04fd306cSNickeau    static public function isOnForm(): bool
147*04fd306cSNickeau    {
148*04fd306cSNickeau        return true;
149*04fd306cSNickeau    }
150c3437056SNickeau}
151