1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau 4*04fd306cSNickeaunamespace ComboStrap; 5*04fd306cSNickeau 6*04fd306cSNickeau 7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataDateTime; 9*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 10*04fd306cSNickeauuse DateTime; 11*04fd306cSNickeau 12*04fd306cSNickeau/** 13*04fd306cSNickeau * Class CacheExpirationFrequencyMeta 14*04fd306cSNickeau * @package ComboStrap 15*04fd306cSNickeau * Represents the creation date of a resource 16*04fd306cSNickeau */ 17*04fd306cSNickeauclass CreationDate extends MetadataDateTime 18*04fd306cSNickeau{ 19*04fd306cSNickeau 20*04fd306cSNickeau 21*04fd306cSNickeau public const PROPERTY_NAME = 'date_created'; 22*04fd306cSNickeau const DATE_DOKUWIKI_PROPERTY_NAME = 'date'; 23*04fd306cSNickeau const DOKUWIKI_SUB_KEY = 'created'; 24*04fd306cSNickeau 25*04fd306cSNickeau 26*04fd306cSNickeau public static function createForPage(ResourceCombo $page): CreationDate 27*04fd306cSNickeau { 28*04fd306cSNickeau return (new CreationDate()) 29*04fd306cSNickeau ->setResource($page); 30*04fd306cSNickeau } 31*04fd306cSNickeau 32*04fd306cSNickeau public static function create(): CreationDate 33*04fd306cSNickeau { 34*04fd306cSNickeau return new CreationDate(); 35*04fd306cSNickeau } 36*04fd306cSNickeau 37*04fd306cSNickeau public function getDefaultValue(): DateTime 38*04fd306cSNickeau { 39*04fd306cSNickeau $path = $this->getResource()->getPathObject(); 40*04fd306cSNickeau return FileSystems::getCreationTime($path); 41*04fd306cSNickeau } 42*04fd306cSNickeau 43*04fd306cSNickeau /** 44*04fd306cSNickeau */ 45*04fd306cSNickeau public function buildFromReadStore(): MetadataDateTime 46*04fd306cSNickeau { 47*04fd306cSNickeau 48*04fd306cSNickeau $store = $this->getReadStore(); 49*04fd306cSNickeau 50*04fd306cSNickeau if (!($store instanceof MetadataDokuWikiStore)) { 51*04fd306cSNickeau return parent::buildFromReadStore(); 52*04fd306cSNickeau } 53*04fd306cSNickeau 54*04fd306cSNickeau $fromName = $store->getFromName(self::DATE_DOKUWIKI_PROPERTY_NAME); 55*04fd306cSNickeau $createdMeta = $fromName[self::DOKUWIKI_SUB_KEY]; 56*04fd306cSNickeau if (empty($createdMeta)) { 57*04fd306cSNickeau return $this; 58*04fd306cSNickeau } 59*04fd306cSNickeau // the data in dokuwiki is saved as timestamp 60*04fd306cSNickeau $datetime = new DateTime(); 61*04fd306cSNickeau $datetime->setTimestamp($createdMeta); 62*04fd306cSNickeau $this->setValue($datetime); 63*04fd306cSNickeau return $this; 64*04fd306cSNickeau } 65*04fd306cSNickeau 66*04fd306cSNickeau public function toStoreValue() 67*04fd306cSNickeau { 68*04fd306cSNickeau $store = $this->getWriteStore(); 69*04fd306cSNickeau if (!($store instanceof MetadataDokuWikiStore)) { 70*04fd306cSNickeau return parent::toStoreValue(); 71*04fd306cSNickeau } 72*04fd306cSNickeau $value = $this->getValue(); 73*04fd306cSNickeau 74*04fd306cSNickeau return array( 75*04fd306cSNickeau self::DATE_DOKUWIKI_PROPERTY_NAME => [self::DOKUWIKI_SUB_KEY => $value->getTimestamp()] 76*04fd306cSNickeau ); 77*04fd306cSNickeau } 78*04fd306cSNickeau 79*04fd306cSNickeau 80*04fd306cSNickeau static public function getName(): string 81*04fd306cSNickeau { 82*04fd306cSNickeau return CreationDate::PROPERTY_NAME; 83*04fd306cSNickeau } 84*04fd306cSNickeau 85*04fd306cSNickeau 86*04fd306cSNickeau public static function getPersistenceType(): string 87*04fd306cSNickeau { 88*04fd306cSNickeau /** 89*04fd306cSNickeau * On windows, the creation time is not preserved when you copy 90*04fd306cSNickeau * a file 91*04fd306cSNickeau * 92*04fd306cSNickeau * If you copy a file from C:\fat16 to D:\NTFS, 93*04fd306cSNickeau * it keeps the same modified date and time but changes the created date 94*04fd306cSNickeau * and time to the current date and time. 95*04fd306cSNickeau * If you move a file from C:\fat16 to D:\NTFS, 96*04fd306cSNickeau * it keeps the same modified date and time 97*04fd306cSNickeau * and keeps the same created date and time 98*04fd306cSNickeau */ 99*04fd306cSNickeau return Metadata::PERSISTENT_METADATA; 100*04fd306cSNickeau } 101*04fd306cSNickeau 102*04fd306cSNickeau 103*04fd306cSNickeau public static function getTab(): string 104*04fd306cSNickeau { 105*04fd306cSNickeau return MetaManagerForm::TAB_PAGE_VALUE; 106*04fd306cSNickeau } 107*04fd306cSNickeau 108*04fd306cSNickeau static public function getDescription(): string 109*04fd306cSNickeau { 110*04fd306cSNickeau return "The creation date of the page"; 111*04fd306cSNickeau } 112*04fd306cSNickeau 113*04fd306cSNickeau static public function getLabel(): string 114*04fd306cSNickeau { 115*04fd306cSNickeau return "Creation Date"; 116*04fd306cSNickeau } 117*04fd306cSNickeau 118*04fd306cSNickeau static public function isMutable(): bool 119*04fd306cSNickeau { 120*04fd306cSNickeau /** 121*04fd306cSNickeau * Not sure, It should not be really mutable by the user 122*04fd306cSNickeau * but the date should be found in the frontmatter for instance 123*04fd306cSNickeau */ 124*04fd306cSNickeau return false; 125*04fd306cSNickeau } 126*04fd306cSNickeau 127*04fd306cSNickeau public static function getCanonical(): string 128*04fd306cSNickeau { 129*04fd306cSNickeau return Metadata::CANONICAL; 130*04fd306cSNickeau } 131*04fd306cSNickeau 132*04fd306cSNickeau public static function isOnForm(): bool 133*04fd306cSNickeau { 134*04fd306cSNickeau return true; 135*04fd306cSNickeau } 136*04fd306cSNickeau} 137