1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 7*04fd306cSNickeauuse action_plugin_combo_metaprocessing; 8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText; 9*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 10*04fd306cSNickeau 11c3437056SNickeauclass ResourceName extends MetadataText 12c3437056SNickeau{ 13c3437056SNickeau 14c3437056SNickeau 15c3437056SNickeau public const PROPERTY_NAME = "name"; 16c3437056SNickeau 17*04fd306cSNickeau public static function createForResource(ResourceCombo $resource): ResourceName 18c3437056SNickeau { 19c3437056SNickeau return (new ResourceName()) 20*04fd306cSNickeau ->setResource($resource); 21c3437056SNickeau } 22c3437056SNickeau 23*04fd306cSNickeau /** 24*04fd306cSNickeau * Return a name from a path 25*04fd306cSNickeau * @param Path $path 26*04fd306cSNickeau * @return string 27*04fd306cSNickeau */ 28*04fd306cSNickeau public static function getFromPath(Path $path): string 29*04fd306cSNickeau { 30*04fd306cSNickeau try { 31*04fd306cSNickeau $name = $path->getLastNameWithoutExtension(); 32*04fd306cSNickeau } catch (ExceptionNotFound $e) { 33*04fd306cSNickeau try { 34*04fd306cSNickeau $name = $path->getUrl()->getHost(); 35*04fd306cSNickeau } catch (ExceptionNotFound $e) { 36*04fd306cSNickeau return "Unknown"; 37*04fd306cSNickeau } 38*04fd306cSNickeau } 39*04fd306cSNickeau $words = preg_split("/\s/", preg_replace("/[-_]/", " ", $name)); 40*04fd306cSNickeau $wordsUc = []; 41*04fd306cSNickeau foreach ($words as $word) { 42*04fd306cSNickeau $wordsUc[] = ucfirst($word); 43*04fd306cSNickeau } 44*04fd306cSNickeau return implode(" ", $wordsUc); 45*04fd306cSNickeau 46*04fd306cSNickeau } 47*04fd306cSNickeau 48*04fd306cSNickeau public static function getTab(): string 49c3437056SNickeau { 50c3437056SNickeau return MetaManagerForm::TAB_PAGE_VALUE; 51c3437056SNickeau } 52c3437056SNickeau 53*04fd306cSNickeau public static function getDescription(): string 54c3437056SNickeau { 55*04fd306cSNickeau 56*04fd306cSNickeau return "A name is the shortest description. It should be at maximum a couple of words long. It's used in navigational components or as a default in link."; 57*04fd306cSNickeau 58c3437056SNickeau } 59c3437056SNickeau 60*04fd306cSNickeau public static function getLabel(): string 61c3437056SNickeau { 62*04fd306cSNickeau return "The name of a page"; 63c3437056SNickeau } 64c3437056SNickeau 65c3437056SNickeau static public function getName(): string 66c3437056SNickeau { 67c3437056SNickeau return self::PROPERTY_NAME; 68c3437056SNickeau } 69c3437056SNickeau 70*04fd306cSNickeau public static function getPersistenceType(): string 71c3437056SNickeau { 72*04fd306cSNickeau return MetadataDokuWikiStore::PERSISTENT_DOKUWIKI_KEY; 73c3437056SNickeau } 74c3437056SNickeau 75*04fd306cSNickeau public static function isMutable(): bool 76c3437056SNickeau { 77c3437056SNickeau return true; 78c3437056SNickeau } 79c3437056SNickeau 80*04fd306cSNickeau /** 81*04fd306cSNickeau * @return string 82*04fd306cSNickeau */ 83c3437056SNickeau public function getDefaultValue(): string 84c3437056SNickeau { 85c3437056SNickeau 86c3437056SNickeau $resourceCombo = $this->getResource(); 87c3437056SNickeau 88c3437056SNickeau /** 89c3437056SNickeau * If this is a home page, the default 90c3437056SNickeau * is the parent path name 91c3437056SNickeau */ 92*04fd306cSNickeau $path = $resourceCombo->getPathObject(); 93*04fd306cSNickeau if ($resourceCombo instanceof MarkupPath) { 94*04fd306cSNickeau 95*04fd306cSNickeau 96*04fd306cSNickeau if ($resourceCombo->isIndexPage() && !$resourceCombo->isRootHomePage()) { 97*04fd306cSNickeau 98*04fd306cSNickeau try { 99*04fd306cSNickeau $path = $path->getParent(); 100*04fd306cSNickeau } catch (ExceptionNotFound $e) { 101*04fd306cSNickeau // no parent path 102*04fd306cSNickeau // should not happen because even the home page (:start) has 103*04fd306cSNickeau // a parent (ie :) 104*04fd306cSNickeau return Site::getIndexPageName(); 105c3437056SNickeau } 106c3437056SNickeau } 107*04fd306cSNickeau } 108*04fd306cSNickeau 109*04fd306cSNickeau return self::getFromPath($path); 110*04fd306cSNickeau 111c3437056SNickeau 112c3437056SNickeau } 113c3437056SNickeau 114*04fd306cSNickeau public static function getCanonical(): string 115c3437056SNickeau { 116*04fd306cSNickeau return static::getName(); 117c3437056SNickeau } 118c3437056SNickeau 119*04fd306cSNickeau /** 120*04fd306cSNickeau * @return string 121*04fd306cSNickeau */ 122*04fd306cSNickeau public function getValueOrDefault(): string 123*04fd306cSNickeau { 124*04fd306cSNickeau try { 125*04fd306cSNickeau return $this->getValue(); 126*04fd306cSNickeau } catch (ExceptionNotFound $e) { 127*04fd306cSNickeau return $this->getDefaultValue(); 128*04fd306cSNickeau } 129*04fd306cSNickeau } 130c3437056SNickeau 131*04fd306cSNickeau public static function isOnForm(): bool 132*04fd306cSNickeau { 133*04fd306cSNickeau return true; 134*04fd306cSNickeau } 135c3437056SNickeau} 136