1*c3437056SNickeau<?php 2*c3437056SNickeau 3*c3437056SNickeau 4*c3437056SNickeaunamespace ComboStrap; 5*c3437056SNickeau 6*c3437056SNickeau 7*c3437056SNickeauuse DateTime; 8*c3437056SNickeau 9*c3437056SNickeau/** 10*c3437056SNickeau * Class CacheExpirationFrequencyMeta 11*c3437056SNickeau * @package ComboStrap 12*c3437056SNickeau * Represents the cache expiration date metadata 13*c3437056SNickeau */ 14*c3437056SNickeauclass CacheExpirationDate extends MetadataDateTime 15*c3437056SNickeau{ 16*c3437056SNickeau 17*c3437056SNickeau 18*c3437056SNickeau /** 19*c3437056SNickeau * The meta key that has the expiration date 20*c3437056SNickeau */ 21*c3437056SNickeau public const PROPERTY_NAME = "date_cache_expiration"; 22*c3437056SNickeau 23*c3437056SNickeau 24*c3437056SNickeau public static function createForPage(ResourceCombo $page): CacheExpirationDate 25*c3437056SNickeau { 26*c3437056SNickeau return (new CacheExpirationDate()) 27*c3437056SNickeau ->setResource($page); 28*c3437056SNickeau } 29*c3437056SNickeau 30*c3437056SNickeau public function getDefaultValue(): ?DateTime 31*c3437056SNickeau { 32*c3437056SNickeau $resourceCombo = $this->getResource(); 33*c3437056SNickeau if (!($resourceCombo instanceof Page)) { 34*c3437056SNickeau return null; 35*c3437056SNickeau } 36*c3437056SNickeau $path = $resourceCombo->getHtmlDocument()->getCachePath(); 37*c3437056SNickeau if (!FileSystems::exists($path)) { 38*c3437056SNickeau return null; 39*c3437056SNickeau } 40*c3437056SNickeau 41*c3437056SNickeau $cacheIntervalInSecond = Site::getCacheTime(); 42*c3437056SNickeau if($cacheIntervalInSecond===-1){ 43*c3437056SNickeau return null; 44*c3437056SNickeau } 45*c3437056SNickeau 46*c3437056SNickeau /** 47*c3437056SNickeau * Not the modified time (it's modified by a process when the cache is read 48*c3437056SNickeau * for whatever reason) 49*c3437056SNickeau */ 50*c3437056SNickeau $expirationTime = FileSystems::getCreationTime($path); 51*c3437056SNickeau if ($cacheIntervalInSecond !== null) { 52*c3437056SNickeau $expirationTime->modify('+' . $cacheIntervalInSecond . ' seconds'); 53*c3437056SNickeau } 54*c3437056SNickeau 55*c3437056SNickeau return $expirationTime; 56*c3437056SNickeau 57*c3437056SNickeau } 58*c3437056SNickeau 59*c3437056SNickeau 60*c3437056SNickeau public function getValue(): ?DateTime 61*c3437056SNickeau { 62*c3437056SNickeau 63*c3437056SNickeau $value = parent::getValue(); 64*c3437056SNickeau if ($value === null) { 65*c3437056SNickeau $cronExpression = $this->getResource()->getCacheExpirationFrequency(); 66*c3437056SNickeau if ($cronExpression !== null) { 67*c3437056SNickeau try { 68*c3437056SNickeau $value = Cron::getDate($cronExpression); 69*c3437056SNickeau parent::setValue($value); 70*c3437056SNickeau } catch (ExceptionCombo $e) { 71*c3437056SNickeau // nothing, the cron expression is tested when set 72*c3437056SNickeau } 73*c3437056SNickeau } 74*c3437056SNickeau } 75*c3437056SNickeau return $value; 76*c3437056SNickeau 77*c3437056SNickeau } 78*c3437056SNickeau 79*c3437056SNickeau 80*c3437056SNickeau public static function getName(): string 81*c3437056SNickeau { 82*c3437056SNickeau return self::PROPERTY_NAME; 83*c3437056SNickeau } 84*c3437056SNickeau 85*c3437056SNickeau 86*c3437056SNickeau public function getPersistenceType(): string 87*c3437056SNickeau { 88*c3437056SNickeau return MetadataDokuWikiStore::CURRENT_METADATA; 89*c3437056SNickeau } 90*c3437056SNickeau 91*c3437056SNickeau 92*c3437056SNickeau public function getCanonical(): string 93*c3437056SNickeau { 94*c3437056SNickeau return CacheExpirationFrequency::PROPERTY_NAME; 95*c3437056SNickeau } 96*c3437056SNickeau 97*c3437056SNickeau public function getTab(): string 98*c3437056SNickeau { 99*c3437056SNickeau return MetaManagerForm::TAB_CACHE_VALUE; 100*c3437056SNickeau } 101*c3437056SNickeau 102*c3437056SNickeau public function getDescription(): string 103*c3437056SNickeau { 104*c3437056SNickeau return "The next cache expiration date (calculated from the cache frequency expression)"; 105*c3437056SNickeau } 106*c3437056SNickeau 107*c3437056SNickeau public function getLabel(): string 108*c3437056SNickeau { 109*c3437056SNickeau return "Cache Expiration Date"; 110*c3437056SNickeau } 111*c3437056SNickeau 112*c3437056SNickeau public function getMutable(): bool 113*c3437056SNickeau { 114*c3437056SNickeau return false; 115*c3437056SNickeau } 116*c3437056SNickeau} 117