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 7423743a95Sgerardnico public function buildFromReadStore() 7523743a95Sgerardnico { 7623743a95Sgerardnico $metadataStore = $this->getReadStore(); 7723743a95Sgerardnico /** 7823743a95Sgerardnico * We got a conflict Dokuwiki stores a `title` meta in the current 7923743a95Sgerardnico * See first line of {@link \Doku_Renderer_metadata::header()} 8023743a95Sgerardnico */ 8123743a95Sgerardnico $isWikiDisabled = ExecutionContext::getActualOrCreateFromEnv() 8223743a95Sgerardnico ->getConfig() 8323743a95Sgerardnico ->isHeadingWikiComponentDisabled(); 8423743a95Sgerardnico if ($isWikiDisabled && $metadataStore instanceof MetadataDokuWikiStore) { 8523743a95Sgerardnico $this->wasBuild = true; 8623743a95Sgerardnico $dataCurrentAndPersistent = $metadataStore->getDataCurrentAndPersistent(); 87*657b6da4Sgerardnico $value = $dataCurrentAndPersistent[MetadataDokuWikiStore::PERSISTENT_DOKUWIKI_KEY][$this->getName()] ?? null; 8823743a95Sgerardnico $this->setFromStoreValueWithoutException($value); 8923743a95Sgerardnico return $this; 9023743a95Sgerardnico } 9123743a95Sgerardnico return parent::buildFromReadStore(); 9223743a95Sgerardnico } 9323743a95Sgerardnico 9423743a95Sgerardnico 9523743a95Sgerardnico 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