1c3437056SNickeau<?php 2c3437056SNickeau 3*04fd306cSNickeaunamespace ComboStrap; 4c3437056SNickeau 5*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 6*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataDateTime; 7*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore; 8*04fd306cSNickeauuse DateTime; 9c3437056SNickeau 10c3437056SNickeauclass ModificationDate extends MetadataDateTime 11c3437056SNickeau{ 12c3437056SNickeau 13c3437056SNickeau public const PROPERTY_NAME = 'date_modified'; 14c3437056SNickeau 15*04fd306cSNickeau public static function createForPage(MarkupPath $page) 16c3437056SNickeau { 17c3437056SNickeau return (new ModificationDate()) 18c3437056SNickeau ->setResource($page); 19c3437056SNickeau } 20c3437056SNickeau 21*04fd306cSNickeau 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 33*04fd306cSNickeau try { 34*04fd306cSNickeau $modificationTime = FileSystems::getModifiedTime($this->getResource()->getPathObject()); 35c3437056SNickeau $this->setValue($modificationTime); 36c3437056SNickeau return $this; 37*04fd306cSNickeau } 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 */ 43c3437056SNickeau $createdMeta = $store->getCurrentFromName('date')['modified']; 44c3437056SNickeau if (empty($createdMeta)) { 45*04fd306cSNickeau $createdMeta = $store->getFromName('date')['modified']; 46c3437056SNickeau if (empty($createdMeta)) { 47c3437056SNickeau return $this; 48c3437056SNickeau } 49c3437056SNickeau } 50c3437056SNickeau // the data in dokuwiki is saved as timestamp 51c3437056SNickeau $datetime = new DateTime(); 52c3437056SNickeau if (!is_int($createdMeta)) { 53c3437056SNickeau LogUtility::msg("The modification time in the dokuwiki meta is not an integer"); 54c3437056SNickeau return $this; 55c3437056SNickeau } 56c3437056SNickeau $datetime->setTimestamp($createdMeta); 57c3437056SNickeau $this->setValue($datetime); 58c3437056SNickeau return $this; 59*04fd306cSNickeau 60c3437056SNickeau } 61c3437056SNickeau 62c3437056SNickeau 63*04fd306cSNickeau } 64*04fd306cSNickeau 65*04fd306cSNickeau 66*04fd306cSNickeau static public function getDescription(): string 67c3437056SNickeau { 68c3437056SNickeau return "The last modification date of the page"; // resource 69c3437056SNickeau } 70c3437056SNickeau 71*04fd306cSNickeau static public function getLabel(): string 72c3437056SNickeau { 73c3437056SNickeau return "Modification Date"; 74c3437056SNickeau } 75c3437056SNickeau 76c3437056SNickeau static public function getName(): string 77c3437056SNickeau { 78c3437056SNickeau return self::PROPERTY_NAME; 79c3437056SNickeau } 80c3437056SNickeau 81*04fd306cSNickeau static public function getPersistenceType(): string 82c3437056SNickeau { 83c3437056SNickeau return Metadata::DERIVED_METADATA; 84c3437056SNickeau } 85c3437056SNickeau 86*04fd306cSNickeau static public function isMutable(): bool 87c3437056SNickeau { 88c3437056SNickeau return false; 89c3437056SNickeau } 90c3437056SNickeau 91*04fd306cSNickeau /** 92*04fd306cSNickeau * @throws ExceptionNotFound - if the file does not exists 93*04fd306cSNickeau */ 94*04fd306cSNickeau public function getDefaultValue(): DateTime 95c3437056SNickeau { 96c3437056SNickeau 97*04fd306cSNickeau try { 98*04fd306cSNickeau return FileSystems::getModifiedTime($this->getResource()->getPathObject()); 99*04fd306cSNickeau } catch (ExceptionNotFound $e) { 100*04fd306cSNickeau return CreationDate::createForPage($this->getResource())->getValue(); 101c3437056SNickeau } 102c3437056SNickeau 103c3437056SNickeau } 104c3437056SNickeau 105*04fd306cSNickeau static public function getCanonical(): string 106c3437056SNickeau { 107c3437056SNickeau return Metadata::CANONICAL; 108c3437056SNickeau } 109c3437056SNickeau 110c3437056SNickeau 111*04fd306cSNickeau static public function isOnForm(): bool 112*04fd306cSNickeau { 113*04fd306cSNickeau return true; 114*04fd306cSNickeau } 115c3437056SNickeau} 116