1c3437056SNickeau<?php 2c3437056SNickeau 304fd306cSNickeaunamespace ComboStrap; 4c3437056SNickeau 504fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 604fd306cSNickeauuse ComboStrap\Meta\Api\MetadataDateTime; 704fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 804fd306cSNickeauuse DateTime; 9c3437056SNickeau 10c3437056SNickeauclass ModificationDate extends MetadataDateTime 11c3437056SNickeau{ 12c3437056SNickeau 13c3437056SNickeau public const PROPERTY_NAME = 'date_modified'; 14c3437056SNickeau 1504fd306cSNickeau public static function createForPage(MarkupPath $page) 16c3437056SNickeau { 17c3437056SNickeau return (new ModificationDate()) 18c3437056SNickeau ->setResource($page); 19c3437056SNickeau } 20c3437056SNickeau 2104fd306cSNickeau static public function getTab(): string 22c3437056SNickeau { 23c3437056SNickeau return MetaManagerForm::TAB_PAGE_VALUE; 24c3437056SNickeau } 25c3437056SNickeau 26c3437056SNickeau public function buildFromReadStore(): MetadataDateTime 27c3437056SNickeau { 28c3437056SNickeau $store = $this->getReadStore(); 29c3437056SNickeau if (!($store instanceof MetadataDokuWikiStore)) { 30c3437056SNickeau return parent::buildFromReadStore(); 31c3437056SNickeau } 32c3437056SNickeau 3304fd306cSNickeau try { 3404fd306cSNickeau $modificationTime = FileSystems::getModifiedTime($this->getResource()->getPathObject()); 35c3437056SNickeau $this->setValue($modificationTime); 36c3437056SNickeau return $this; 3704fd306cSNickeau } catch (ExceptionNotFound $e) { 38c3437056SNickeau 39c3437056SNickeau /** 40c3437056SNickeau * Dokuwiki 41c3437056SNickeau * Why do they store the date of the file while it's in the file system ? 42c3437056SNickeau */ 43*70bbd7f1Sgerardnico $currentDateMeta = $store->getCurrentFromName('date'); 44*70bbd7f1Sgerardnico $createdMeta = null; 45*70bbd7f1Sgerardnico if ($currentDateMeta !== null) { 46*70bbd7f1Sgerardnico $createdMeta = $currentDateMeta['modified'] ?? null; 47*70bbd7f1Sgerardnico } 48c3437056SNickeau if (empty($createdMeta)) { 49*70bbd7f1Sgerardnico $createdMeta = $currentDateMeta['modified'] ?? null; 50c3437056SNickeau if (empty($createdMeta)) { 51c3437056SNickeau return $this; 52c3437056SNickeau } 53c3437056SNickeau } 54c3437056SNickeau // the data in dokuwiki is saved as timestamp 55c3437056SNickeau $datetime = new DateTime(); 56c3437056SNickeau if (!is_int($createdMeta)) { 57c3437056SNickeau LogUtility::msg("The modification time in the dokuwiki meta is not an integer"); 58c3437056SNickeau return $this; 59c3437056SNickeau } 60c3437056SNickeau $datetime->setTimestamp($createdMeta); 61c3437056SNickeau $this->setValue($datetime); 62c3437056SNickeau return $this; 6304fd306cSNickeau 64c3437056SNickeau } 65c3437056SNickeau 66c3437056SNickeau 6704fd306cSNickeau } 6804fd306cSNickeau 6904fd306cSNickeau 7004fd306cSNickeau static public function getDescription(): string 71c3437056SNickeau { 72c3437056SNickeau return "The last modification date of the page"; // resource 73c3437056SNickeau } 74c3437056SNickeau 7504fd306cSNickeau static public function getLabel(): string 76c3437056SNickeau { 77c3437056SNickeau return "Modification Date"; 78c3437056SNickeau } 79c3437056SNickeau 80c3437056SNickeau static public function getName(): string 81c3437056SNickeau { 82c3437056SNickeau return self::PROPERTY_NAME; 83c3437056SNickeau } 84c3437056SNickeau 8504fd306cSNickeau static public function getPersistenceType(): string 86c3437056SNickeau { 87c3437056SNickeau return Metadata::DERIVED_METADATA; 88c3437056SNickeau } 89c3437056SNickeau 9004fd306cSNickeau static public function isMutable(): bool 91c3437056SNickeau { 92c3437056SNickeau return false; 93c3437056SNickeau } 94c3437056SNickeau 9504fd306cSNickeau /** 9604fd306cSNickeau * @throws ExceptionNotFound - if the file does not exists 9704fd306cSNickeau */ 9804fd306cSNickeau public function getDefaultValue(): DateTime 99c3437056SNickeau { 100c3437056SNickeau 10104fd306cSNickeau try { 10204fd306cSNickeau return FileSystems::getModifiedTime($this->getResource()->getPathObject()); 10304fd306cSNickeau } catch (ExceptionNotFound $e) { 10404fd306cSNickeau return CreationDate::createForPage($this->getResource())->getValue(); 105c3437056SNickeau } 106c3437056SNickeau 107c3437056SNickeau } 108c3437056SNickeau 10904fd306cSNickeau static public function getCanonical(): string 110c3437056SNickeau { 111c3437056SNickeau return Metadata::CANONICAL; 112c3437056SNickeau } 113c3437056SNickeau 114c3437056SNickeau 11504fd306cSNickeau static public function isOnForm(): bool 11604fd306cSNickeau { 11704fd306cSNickeau return true; 11804fd306cSNickeau } 119c3437056SNickeau} 120