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