1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 704fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText; 804fd306cSNickeauuse ComboStrap\Meta\Field\PageH1; 904fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 1004fd306cSNickeau 11c3437056SNickeauclass PageTitle extends MetadataText 12c3437056SNickeau{ 13c3437056SNickeau 14c3437056SNickeau public const PROPERTY_NAME = 'title'; 15c3437056SNickeau public const TITLE = 'title'; 16c3437056SNickeau 1704fd306cSNickeau public static function createForMarkup($page): PageTitle 18c3437056SNickeau { 19c3437056SNickeau return (new PageTitle()) 20c3437056SNickeau ->setResource($page); 21c3437056SNickeau } 22c3437056SNickeau 2304fd306cSNickeau public static function getTab(): string 24c3437056SNickeau { 25c3437056SNickeau return MetaManagerForm::TAB_PAGE_VALUE; 26c3437056SNickeau } 27c3437056SNickeau 2804fd306cSNickeau 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 3304fd306cSNickeau 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 4304fd306cSNickeau public static function getPersistenceType(): string 44c3437056SNickeau { 4504fd306cSNickeau return MetadataDokuWikiStore::PERSISTENT_DOKUWIKI_KEY; 46c3437056SNickeau } 47c3437056SNickeau 4804fd306cSNickeau 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 */ 5804fd306cSNickeau public function getDefaultValue(): string 59c3437056SNickeau { 60c3437056SNickeau 61c3437056SNickeau $resource = $this->getResource(); 6204fd306cSNickeau if (!($resource instanceof MarkupPath)) { 6304fd306cSNickeau LogUtility::internalError("Resource that are not page have no title"); 6404fd306cSNickeau return ResourceName::getFromPath($resource->getPathObject()); 6504fd306cSNickeau } 66c3437056SNickeau if ($resource->isRootHomePage() && !empty(Site::getTagLine())) { 67c3437056SNickeau return Site::getTagLine(); 68c3437056SNickeau } 6904fd306cSNickeau return PageH1::createForPage($this->getResource()) 7004fd306cSNickeau ->getValueOrDefault(); 71c3437056SNickeau 72c3437056SNickeau } 73c3437056SNickeau 74*23743a95Sgerardnico public function buildFromReadStore() 75*23743a95Sgerardnico { 76*23743a95Sgerardnico $metadataStore = $this->getReadStore(); 77*23743a95Sgerardnico /** 78*23743a95Sgerardnico * We got a conflict Dokuwiki stores a `title` meta in the current 79*23743a95Sgerardnico * See first line of {@link \Doku_Renderer_metadata::header()} 80*23743a95Sgerardnico */ 81*23743a95Sgerardnico $isWikiDisabled = ExecutionContext::getActualOrCreateFromEnv() 82*23743a95Sgerardnico ->getConfig() 83*23743a95Sgerardnico ->isHeadingWikiComponentDisabled(); 84*23743a95Sgerardnico if ($isWikiDisabled && $metadataStore instanceof MetadataDokuWikiStore) { 85*23743a95Sgerardnico $this->wasBuild = true; 86*23743a95Sgerardnico $dataCurrentAndPersistent = $metadataStore->getDataCurrentAndPersistent(); 87*23743a95Sgerardnico $value = $dataCurrentAndPersistent[MetadataDokuWikiStore::PERSISTENT_DOKUWIKI_KEY][$this->getName()]; 88*23743a95Sgerardnico $this->setFromStoreValueWithoutException($value); 89*23743a95Sgerardnico return $this; 90*23743a95Sgerardnico } 91*23743a95Sgerardnico return parent::buildFromReadStore(); 92*23743a95Sgerardnico } 93*23743a95Sgerardnico 94*23743a95Sgerardnico 95*23743a95Sgerardnico 9604fd306cSNickeau /** 9704fd306cSNickeau * @return string 9804fd306cSNickeau */ 9904fd306cSNickeau public function getValueOrDefault(): string 10004fd306cSNickeau { 10104fd306cSNickeau try { 10204fd306cSNickeau return $this->getValue(); 10304fd306cSNickeau } catch (ExceptionNotFound $e) { 10404fd306cSNickeau return $this->getDefaultValue(); 10504fd306cSNickeau } 10604fd306cSNickeau } 10704fd306cSNickeau 10804fd306cSNickeau 10904fd306cSNickeau public static function getCanonical(): string 110c3437056SNickeau { 111c3437056SNickeau return self::TITLE; 112c3437056SNickeau } 113c3437056SNickeau 114c3437056SNickeau 11504fd306cSNickeau public static function isOnForm(): bool 11604fd306cSNickeau { 11704fd306cSNickeau return true; 11804fd306cSNickeau } 11904fd306cSNickeau 120c3437056SNickeau} 121