xref: /plugin/combo/ComboStrap/ModificationDate.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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