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