1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 7*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText; 8*04fd306cSNickeauuse ComboStrap\Meta\Field\PageH1; 9*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 10*04fd306cSNickeau 11c3437056SNickeauclass PageTitle extends MetadataText 12c3437056SNickeau{ 13c3437056SNickeau 14c3437056SNickeau public const PROPERTY_NAME = 'title'; 15c3437056SNickeau public const TITLE = 'title'; 16c3437056SNickeau 17*04fd306cSNickeau public static function createForMarkup($page): PageTitle 18c3437056SNickeau { 19c3437056SNickeau return (new PageTitle()) 20c3437056SNickeau ->setResource($page); 21c3437056SNickeau } 22c3437056SNickeau 23*04fd306cSNickeau public static function getTab(): string 24c3437056SNickeau { 25c3437056SNickeau return MetaManagerForm::TAB_PAGE_VALUE; 26c3437056SNickeau } 27c3437056SNickeau 28*04fd306cSNickeau public static function getDescription(): string 29c3437056SNickeau { 30c3437056SNickeau return "The page title is a description advertised to external application such as search engine and browser."; 31c3437056SNickeau } 32c3437056SNickeau 33*04fd306cSNickeau public static function getLabel(): string 34c3437056SNickeau { 35c3437056SNickeau return "Title"; 36c3437056SNickeau } 37c3437056SNickeau 38c3437056SNickeau static public function getName(): string 39c3437056SNickeau { 40c3437056SNickeau return self::PROPERTY_NAME; 41c3437056SNickeau } 42c3437056SNickeau 43*04fd306cSNickeau public static function getPersistenceType(): string 44c3437056SNickeau { 45*04fd306cSNickeau return MetadataDokuWikiStore::PERSISTENT_DOKUWIKI_KEY; 46c3437056SNickeau } 47c3437056SNickeau 48*04fd306cSNickeau public static function isMutable(): bool 49c3437056SNickeau { 50c3437056SNickeau return true; 51c3437056SNickeau } 52c3437056SNickeau 53c3437056SNickeau /** 54c3437056SNickeau * `title` is created by DokuWiki 55c3437056SNickeau * in current but not persistent 56c3437056SNickeau * and hold the heading 1, see {@link p_get_first_heading} 57c3437056SNickeau */ 58*04fd306cSNickeau public function getDefaultValue(): string 59c3437056SNickeau { 60c3437056SNickeau 61c3437056SNickeau $resource = $this->getResource(); 62*04fd306cSNickeau if (!($resource instanceof MarkupPath)) { 63*04fd306cSNickeau LogUtility::internalError("Resource that are not page have no title"); 64*04fd306cSNickeau return ResourceName::getFromPath($resource->getPathObject()); 65*04fd306cSNickeau } 66c3437056SNickeau if ($resource->isRootHomePage() && !empty(Site::getTagLine())) { 67c3437056SNickeau return Site::getTagLine(); 68c3437056SNickeau } 69*04fd306cSNickeau return PageH1::createForPage($this->getResource()) 70*04fd306cSNickeau ->getValueOrDefault(); 71c3437056SNickeau 72c3437056SNickeau } 73c3437056SNickeau 74*04fd306cSNickeau /** 75*04fd306cSNickeau * @return string 76*04fd306cSNickeau */ 77*04fd306cSNickeau public function getValueOrDefault(): string 78*04fd306cSNickeau { 79*04fd306cSNickeau try { 80*04fd306cSNickeau return $this->getValue(); 81*04fd306cSNickeau } catch (ExceptionNotFound $e) { 82*04fd306cSNickeau return $this->getDefaultValue(); 83*04fd306cSNickeau } 84*04fd306cSNickeau } 85*04fd306cSNickeau 86*04fd306cSNickeau 87*04fd306cSNickeau public static function getCanonical(): string 88c3437056SNickeau { 89c3437056SNickeau return self::TITLE; 90c3437056SNickeau } 91c3437056SNickeau 92c3437056SNickeau 93*04fd306cSNickeau public static function isOnForm(): bool 94*04fd306cSNickeau { 95*04fd306cSNickeau return true; 96*04fd306cSNickeau } 97*04fd306cSNickeau 98c3437056SNickeau} 99