1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataMultiple; 9*04fd306cSNickeau 10c3437056SNickeauclass PageKeywords extends MetadataMultiple 11c3437056SNickeau{ 12c3437056SNickeau 13c3437056SNickeau public const PROPERTY_NAME = "keywords"; 14c3437056SNickeau 15c3437056SNickeau 16*04fd306cSNickeau public static function createForPage(MarkupPath $page) 17c3437056SNickeau { 18c3437056SNickeau return (new PageKeywords()) 19c3437056SNickeau ->setResource($page); 20c3437056SNickeau } 21c3437056SNickeau 22*04fd306cSNickeau static public function getTab(): string 23c3437056SNickeau { 24c3437056SNickeau return MetaManagerForm::TAB_PAGE_VALUE; 25c3437056SNickeau } 26c3437056SNickeau 27c3437056SNickeau 28*04fd306cSNickeau static public function getDataType(): string 29c3437056SNickeau { 30c3437056SNickeau // in a form, we send a list of words 31c3437056SNickeau return DataType::TEXT_TYPE_VALUE; 32c3437056SNickeau } 33c3437056SNickeau 34c3437056SNickeau 35*04fd306cSNickeau static public function getDescription(): string 36c3437056SNickeau { 37c3437056SNickeau return "The keywords added to your page (separated by a comma)"; 38c3437056SNickeau } 39c3437056SNickeau 40*04fd306cSNickeau static public function getLabel(): string 41c3437056SNickeau { 42c3437056SNickeau return "Keywords"; 43c3437056SNickeau } 44c3437056SNickeau 45c3437056SNickeau static public function getName(): string 46c3437056SNickeau { 47c3437056SNickeau return self::PROPERTY_NAME; 48c3437056SNickeau } 49c3437056SNickeau 50c3437056SNickeau 51c3437056SNickeau /** 52c3437056SNickeau * The default of dokuwiki is the recursive parts of all {@link ResourceName page name} 53c3437056SNickeau * in the hierarchy. 54c3437056SNickeau * @return string[]|null 55c3437056SNickeau */ 56c3437056SNickeau public function getDefaultValue(): ?array 57c3437056SNickeau { 58c3437056SNickeau 59c3437056SNickeau $resource = $this->getResource(); 60*04fd306cSNickeau if (!($resource instanceof MarkupPath)) { 61c3437056SNickeau return null; 62c3437056SNickeau } 63c3437056SNickeau $keyWords = explode(" ", $resource->getNameOrDefault()); 64*04fd306cSNickeau $parentPage = $resource; 65*04fd306cSNickeau while (true) { 66*04fd306cSNickeau try { 67*04fd306cSNickeau $parentPage = $parentPage->getParent(); 68*04fd306cSNickeau } catch (ExceptionNotFound $e) { 69*04fd306cSNickeau break; 70*04fd306cSNickeau } 71c3437056SNickeau if (!$parentPage->isRootHomePage()) { 72c3437056SNickeau $parentKeyWords = explode(" ", $parentPage->getNameOrDefault()); 73c3437056SNickeau $keyWords = array_merge($keyWords, $parentKeyWords); 74c3437056SNickeau } 75c3437056SNickeau } 76c3437056SNickeau $keyWords = array_map(function ($element) { 77c3437056SNickeau return strtolower($element); 78c3437056SNickeau }, $keyWords); 79c3437056SNickeau return array_unique($keyWords); 80c3437056SNickeau } 81c3437056SNickeau 82*04fd306cSNickeau static public function getPersistenceType(): string 83c3437056SNickeau { 84c3437056SNickeau return Metadata::PERSISTENT_METADATA; 85c3437056SNickeau } 86c3437056SNickeau 87*04fd306cSNickeau static public function isMutable(): bool 88c3437056SNickeau { 89c3437056SNickeau return true; 90c3437056SNickeau } 91c3437056SNickeau 92c3437056SNickeau 93*04fd306cSNickeau public function setFromStoreValueWithoutException($value): Metadata 94c3437056SNickeau { 95c3437056SNickeau try { 96c3437056SNickeau $this->array = $this->toArrayOrNull($value); 97*04fd306cSNickeau } catch (ExceptionCompile $e) { 98c3437056SNickeau LogUtility::msg($e->getMessage(), LogUtility::LVL_MSG_ERROR, $e->getMessage()); 99c3437056SNickeau } 100c3437056SNickeau return $this; 101c3437056SNickeau } 102c3437056SNickeau 103c3437056SNickeau 104*04fd306cSNickeau static public function getCanonical(): string 105c3437056SNickeau { 106c3437056SNickeau return self::PROPERTY_NAME; 107c3437056SNickeau } 108c3437056SNickeau 109c3437056SNickeau 110*04fd306cSNickeau static public function isOnForm(): bool 111*04fd306cSNickeau { 112*04fd306cSNickeau return true; 113*04fd306cSNickeau } 114c3437056SNickeau} 115