1*c3437056SNickeau<?php 2*c3437056SNickeau 3*c3437056SNickeau 4*c3437056SNickeauuse ComboStrap\ExceptionCombo; 5*c3437056SNickeauuse ComboStrap\FileSystems; 6*c3437056SNickeauuse ComboStrap\MetaManagerForm; 7*c3437056SNickeauuse ComboStrap\LogUtility; 8*c3437056SNickeauuse ComboStrap\Metadata; 9*c3437056SNickeauuse ComboStrap\MetadataDateTime; 10*c3437056SNickeauuse ComboStrap\MetadataDokuWikiStore; 11*c3437056SNickeauuse ComboStrap\Page; 12*c3437056SNickeauuse ComboStrap\PageCreationDate; 13*c3437056SNickeau 14*c3437056SNickeauclass ModificationDate extends MetadataDateTime 15*c3437056SNickeau{ 16*c3437056SNickeau 17*c3437056SNickeau public const PROPERTY_NAME = 'date_modified'; 18*c3437056SNickeau 19*c3437056SNickeau public static function createForPage(Page $page) 20*c3437056SNickeau { 21*c3437056SNickeau return (new ModificationDate()) 22*c3437056SNickeau ->setResource($page); 23*c3437056SNickeau } 24*c3437056SNickeau 25*c3437056SNickeau public function getTab(): string 26*c3437056SNickeau { 27*c3437056SNickeau return MetaManagerForm::TAB_PAGE_VALUE; 28*c3437056SNickeau } 29*c3437056SNickeau 30*c3437056SNickeau public function buildFromReadStore(): MetadataDateTime 31*c3437056SNickeau { 32*c3437056SNickeau $store = $this->getReadStore(); 33*c3437056SNickeau if (!($store instanceof MetadataDokuWikiStore)) { 34*c3437056SNickeau return parent::buildFromReadStore(); 35*c3437056SNickeau } 36*c3437056SNickeau 37*c3437056SNickeau $modificationTime = FileSystems::getModifiedTime($this->getResource()->getPath()); 38*c3437056SNickeau if ($modificationTime !== null) { 39*c3437056SNickeau $this->setValue($modificationTime); 40*c3437056SNickeau return $this; 41*c3437056SNickeau } 42*c3437056SNickeau 43*c3437056SNickeau /** 44*c3437056SNickeau * Dokuwiki 45*c3437056SNickeau * Why do they store the date of the file while it's in the file system ? 46*c3437056SNickeau */ 47*c3437056SNickeau $createdMeta = $store->getCurrentFromName('date')['modified']; 48*c3437056SNickeau if (empty($createdMeta)) { 49*c3437056SNickeau $createdMeta = $store->getFromPersistentName('date')['modified']; 50*c3437056SNickeau if (empty($createdMeta)) { 51*c3437056SNickeau return $this; 52*c3437056SNickeau } 53*c3437056SNickeau } 54*c3437056SNickeau // the data in dokuwiki is saved as timestamp 55*c3437056SNickeau $datetime = new DateTime(); 56*c3437056SNickeau if(!is_int($createdMeta)){ 57*c3437056SNickeau LogUtility::msg("The modification time in the dokuwiki meta is not an integer"); 58*c3437056SNickeau return $this; 59*c3437056SNickeau } 60*c3437056SNickeau $datetime->setTimestamp($createdMeta); 61*c3437056SNickeau $this->setValue($datetime); 62*c3437056SNickeau return $this; 63*c3437056SNickeau } 64*c3437056SNickeau 65*c3437056SNickeau 66*c3437056SNickeau public function getDescription(): string 67*c3437056SNickeau { 68*c3437056SNickeau return "The last modification date of the page"; // resource 69*c3437056SNickeau } 70*c3437056SNickeau 71*c3437056SNickeau public function getLabel(): string 72*c3437056SNickeau { 73*c3437056SNickeau return "Modification Date"; 74*c3437056SNickeau } 75*c3437056SNickeau 76*c3437056SNickeau static public function getName(): string 77*c3437056SNickeau { 78*c3437056SNickeau return self::PROPERTY_NAME; 79*c3437056SNickeau } 80*c3437056SNickeau 81*c3437056SNickeau public function getPersistenceType(): string 82*c3437056SNickeau { 83*c3437056SNickeau return Metadata::DERIVED_METADATA; 84*c3437056SNickeau } 85*c3437056SNickeau 86*c3437056SNickeau public function getMutable(): bool 87*c3437056SNickeau { 88*c3437056SNickeau return false; 89*c3437056SNickeau } 90*c3437056SNickeau 91*c3437056SNickeau public function getDefaultValue(): ?DateTime 92*c3437056SNickeau { 93*c3437056SNickeau 94*c3437056SNickeau $modificationTime = FileSystems::getModifiedTime($this->getResource()->getPath()); 95*c3437056SNickeau if ($modificationTime !== null) { 96*c3437056SNickeau return $modificationTime; 97*c3437056SNickeau } 98*c3437056SNickeau return PageCreationDate::createForPage($this->getResource())->getValue(); 99*c3437056SNickeau 100*c3437056SNickeau } 101*c3437056SNickeau 102*c3437056SNickeau public function getCanonical(): string 103*c3437056SNickeau { 104*c3437056SNickeau return Metadata::CANONICAL; 105*c3437056SNickeau } 106*c3437056SNickeau 107*c3437056SNickeau 108*c3437056SNickeau} 109