104fd306cSNickeau<?php 204fd306cSNickeau 304fd306cSNickeau 404fd306cSNickeaunamespace ComboStrap; 504fd306cSNickeau 604fd306cSNickeau 704fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 804fd306cSNickeauuse ComboStrap\Meta\Api\MetadataDateTime; 904fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 1004fd306cSNickeauuse DateTime; 1104fd306cSNickeau 1204fd306cSNickeau/** 1304fd306cSNickeau * Class CacheExpirationFrequencyMeta 1404fd306cSNickeau * @package ComboStrap 1504fd306cSNickeau * Represents the creation date of a resource 1604fd306cSNickeau */ 1704fd306cSNickeauclass CreationDate extends MetadataDateTime 1804fd306cSNickeau{ 1904fd306cSNickeau 2004fd306cSNickeau 2104fd306cSNickeau public const PROPERTY_NAME = 'date_created'; 2204fd306cSNickeau const DATE_DOKUWIKI_PROPERTY_NAME = 'date'; 2304fd306cSNickeau const DOKUWIKI_SUB_KEY = 'created'; 2404fd306cSNickeau 2504fd306cSNickeau 2604fd306cSNickeau public static function createForPage(ResourceCombo $page): CreationDate 2704fd306cSNickeau { 2804fd306cSNickeau return (new CreationDate()) 2904fd306cSNickeau ->setResource($page); 3004fd306cSNickeau } 3104fd306cSNickeau 3204fd306cSNickeau public static function create(): CreationDate 3304fd306cSNickeau { 3404fd306cSNickeau return new CreationDate(); 3504fd306cSNickeau } 3604fd306cSNickeau 3704fd306cSNickeau public function getDefaultValue(): DateTime 3804fd306cSNickeau { 3904fd306cSNickeau $path = $this->getResource()->getPathObject(); 4004fd306cSNickeau return FileSystems::getCreationTime($path); 4104fd306cSNickeau } 4204fd306cSNickeau 4304fd306cSNickeau /** 4404fd306cSNickeau */ 4504fd306cSNickeau public function buildFromReadStore(): MetadataDateTime 4604fd306cSNickeau { 4704fd306cSNickeau 4804fd306cSNickeau $store = $this->getReadStore(); 4904fd306cSNickeau 5004fd306cSNickeau if (!($store instanceof MetadataDokuWikiStore)) { 5104fd306cSNickeau return parent::buildFromReadStore(); 5204fd306cSNickeau } 5304fd306cSNickeau 5404fd306cSNickeau $fromName = $store->getFromName(self::DATE_DOKUWIKI_PROPERTY_NAME); 55*70bbd7f1Sgerardnico if ($fromName === null) { 56*70bbd7f1Sgerardnico return $this; 57*70bbd7f1Sgerardnico } 58*70bbd7f1Sgerardnico $createdMeta = $fromName[self::DOKUWIKI_SUB_KEY] ?? null; 5904fd306cSNickeau if (empty($createdMeta)) { 6004fd306cSNickeau return $this; 6104fd306cSNickeau } 6204fd306cSNickeau // the data in dokuwiki is saved as timestamp 6304fd306cSNickeau $datetime = new DateTime(); 6404fd306cSNickeau $datetime->setTimestamp($createdMeta); 6504fd306cSNickeau $this->setValue($datetime); 6604fd306cSNickeau return $this; 6704fd306cSNickeau } 6804fd306cSNickeau 6904fd306cSNickeau public function toStoreValue() 7004fd306cSNickeau { 7104fd306cSNickeau $store = $this->getWriteStore(); 7204fd306cSNickeau if (!($store instanceof MetadataDokuWikiStore)) { 7304fd306cSNickeau return parent::toStoreValue(); 7404fd306cSNickeau } 7504fd306cSNickeau $value = $this->getValue(); 7604fd306cSNickeau 7704fd306cSNickeau return array( 7804fd306cSNickeau self::DATE_DOKUWIKI_PROPERTY_NAME => [self::DOKUWIKI_SUB_KEY => $value->getTimestamp()] 7904fd306cSNickeau ); 8004fd306cSNickeau } 8104fd306cSNickeau 8204fd306cSNickeau 8304fd306cSNickeau static public function getName(): string 8404fd306cSNickeau { 8504fd306cSNickeau return CreationDate::PROPERTY_NAME; 8604fd306cSNickeau } 8704fd306cSNickeau 8804fd306cSNickeau 8904fd306cSNickeau public static function getPersistenceType(): string 9004fd306cSNickeau { 9104fd306cSNickeau /** 9204fd306cSNickeau * On windows, the creation time is not preserved when you copy 9304fd306cSNickeau * a file 9404fd306cSNickeau * 9504fd306cSNickeau * If you copy a file from C:\fat16 to D:\NTFS, 9604fd306cSNickeau * it keeps the same modified date and time but changes the created date 9704fd306cSNickeau * and time to the current date and time. 9804fd306cSNickeau * If you move a file from C:\fat16 to D:\NTFS, 9904fd306cSNickeau * it keeps the same modified date and time 10004fd306cSNickeau * and keeps the same created date and time 10104fd306cSNickeau */ 10204fd306cSNickeau return Metadata::PERSISTENT_METADATA; 10304fd306cSNickeau } 10404fd306cSNickeau 10504fd306cSNickeau 10604fd306cSNickeau public static function getTab(): string 10704fd306cSNickeau { 10804fd306cSNickeau return MetaManagerForm::TAB_PAGE_VALUE; 10904fd306cSNickeau } 11004fd306cSNickeau 11104fd306cSNickeau static public function getDescription(): string 11204fd306cSNickeau { 11304fd306cSNickeau return "The creation date of the page"; 11404fd306cSNickeau } 11504fd306cSNickeau 11604fd306cSNickeau static public function getLabel(): string 11704fd306cSNickeau { 11804fd306cSNickeau return "Creation Date"; 11904fd306cSNickeau } 12004fd306cSNickeau 12104fd306cSNickeau static public function isMutable(): bool 12204fd306cSNickeau { 12304fd306cSNickeau /** 12404fd306cSNickeau * Not sure, It should not be really mutable by the user 12504fd306cSNickeau * but the date should be found in the frontmatter for instance 12604fd306cSNickeau */ 12704fd306cSNickeau return false; 12804fd306cSNickeau } 12904fd306cSNickeau 13004fd306cSNickeau public static function getCanonical(): string 13104fd306cSNickeau { 13204fd306cSNickeau return Metadata::CANONICAL; 13304fd306cSNickeau } 13404fd306cSNickeau 13504fd306cSNickeau public static function isOnForm(): bool 13604fd306cSNickeau { 13704fd306cSNickeau return true; 13804fd306cSNickeau } 13904fd306cSNickeau} 140