1*c3437056SNickeau<?php 2*c3437056SNickeau 3*c3437056SNickeau 4*c3437056SNickeaunamespace ComboStrap; 5*c3437056SNickeau 6*c3437056SNickeau 7*c3437056SNickeauclass CacheExpirationFrequency extends MetadataText 8*c3437056SNickeau{ 9*c3437056SNickeau 10*c3437056SNickeau /** 11*c3437056SNickeau * The meta that has the cron expression 12*c3437056SNickeau */ 13*c3437056SNickeau public const PROPERTY_NAME = "cache_expiration_frequency"; 14*c3437056SNickeau public const CANONICAL = "page-cache-expiration-frequency"; 15*c3437056SNickeau 16*c3437056SNickeau public static function createForPage(ResourceCombo $page): CacheExpirationFrequency 17*c3437056SNickeau { 18*c3437056SNickeau return (new CacheExpirationFrequency()) 19*c3437056SNickeau ->setResource($page); 20*c3437056SNickeau } 21*c3437056SNickeau 22*c3437056SNickeau public function getTab(): string 23*c3437056SNickeau { 24*c3437056SNickeau return MetaManagerForm::TAB_CACHE_VALUE; 25*c3437056SNickeau } 26*c3437056SNickeau 27*c3437056SNickeau /** 28*c3437056SNickeau * @param string|null $value 29*c3437056SNickeau * @return Metadata 30*c3437056SNickeau * @throws ExceptionCombo 31*c3437056SNickeau */ 32*c3437056SNickeau public function setValue($value): Metadata 33*c3437056SNickeau { 34*c3437056SNickeau 35*c3437056SNickeau if ($value === null){ 36*c3437056SNickeau parent::setValue($value); 37*c3437056SNickeau return $this; 38*c3437056SNickeau } 39*c3437056SNickeau 40*c3437056SNickeau $value = trim($value); 41*c3437056SNickeau if ($value === "") { 42*c3437056SNickeau // html form send an empty string 43*c3437056SNickeau return $this; 44*c3437056SNickeau } 45*c3437056SNickeau 46*c3437056SNickeau try { 47*c3437056SNickeau $cacheExpirationCalculatedDate = Cron::getDate($value); 48*c3437056SNickeau $cacheExpirationDate = CacheExpirationDate::createForPage($this->getResource()); 49*c3437056SNickeau $cacheExpirationDate 50*c3437056SNickeau ->setValue($cacheExpirationCalculatedDate) 51*c3437056SNickeau ->persist(); 52*c3437056SNickeau parent::setValue($value); 53*c3437056SNickeau return $this; 54*c3437056SNickeau } catch (ExceptionCombo $e) { 55*c3437056SNickeau throw new ExceptionCombo("The cache frequency expression ($value) is not a valid cron expression. <a href=\"https://crontab.guru/\">Validate it on this website</a>", CacheExpirationFrequency::PROPERTY_NAME); 56*c3437056SNickeau } 57*c3437056SNickeau 58*c3437056SNickeau } 59*c3437056SNickeau 60*c3437056SNickeau 61*c3437056SNickeau public function getDescription(): string 62*c3437056SNickeau { 63*c3437056SNickeau return "A page expiration frequency expressed as a cron expression"; 64*c3437056SNickeau } 65*c3437056SNickeau 66*c3437056SNickeau public function getLabel(): string 67*c3437056SNickeau { 68*c3437056SNickeau return "Cache Expiration Frequency"; 69*c3437056SNickeau } 70*c3437056SNickeau 71*c3437056SNickeau public static function getName(): string 72*c3437056SNickeau { 73*c3437056SNickeau return self::PROPERTY_NAME; 74*c3437056SNickeau } 75*c3437056SNickeau 76*c3437056SNickeau public function getPersistenceType(): string 77*c3437056SNickeau { 78*c3437056SNickeau return MetadataDokuWikiStore::PERSISTENT_METADATA; 79*c3437056SNickeau } 80*c3437056SNickeau 81*c3437056SNickeau public function getMutable(): bool 82*c3437056SNickeau { 83*c3437056SNickeau return true; 84*c3437056SNickeau } 85*c3437056SNickeau 86*c3437056SNickeau public function getDefaultValue() 87*c3437056SNickeau { 88*c3437056SNickeau return null; 89*c3437056SNickeau } 90*c3437056SNickeau 91*c3437056SNickeau public function getCanonical(): string 92*c3437056SNickeau { 93*c3437056SNickeau return self::CANONICAL; 94*c3437056SNickeau } 95*c3437056SNickeau 96*c3437056SNickeau 97*c3437056SNickeau} 98