xref: /plugin/combo/ComboStrap/CreationDate.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeaunamespace ComboStrap;
5*04fd306cSNickeau
6*04fd306cSNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataDateTime;
9*04fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore;
10*04fd306cSNickeauuse DateTime;
11*04fd306cSNickeau
12*04fd306cSNickeau/**
13*04fd306cSNickeau * Class CacheExpirationFrequencyMeta
14*04fd306cSNickeau * @package ComboStrap
15*04fd306cSNickeau * Represents the creation date of a resource
16*04fd306cSNickeau */
17*04fd306cSNickeauclass CreationDate extends MetadataDateTime
18*04fd306cSNickeau{
19*04fd306cSNickeau
20*04fd306cSNickeau
21*04fd306cSNickeau    public const PROPERTY_NAME = 'date_created';
22*04fd306cSNickeau    const DATE_DOKUWIKI_PROPERTY_NAME = 'date';
23*04fd306cSNickeau    const DOKUWIKI_SUB_KEY = 'created';
24*04fd306cSNickeau
25*04fd306cSNickeau
26*04fd306cSNickeau    public static function createForPage(ResourceCombo $page): CreationDate
27*04fd306cSNickeau    {
28*04fd306cSNickeau        return (new CreationDate())
29*04fd306cSNickeau            ->setResource($page);
30*04fd306cSNickeau    }
31*04fd306cSNickeau
32*04fd306cSNickeau    public static function create(): CreationDate
33*04fd306cSNickeau    {
34*04fd306cSNickeau        return new CreationDate();
35*04fd306cSNickeau    }
36*04fd306cSNickeau
37*04fd306cSNickeau    public function getDefaultValue(): DateTime
38*04fd306cSNickeau    {
39*04fd306cSNickeau        $path = $this->getResource()->getPathObject();
40*04fd306cSNickeau        return FileSystems::getCreationTime($path);
41*04fd306cSNickeau    }
42*04fd306cSNickeau
43*04fd306cSNickeau    /**
44*04fd306cSNickeau     */
45*04fd306cSNickeau    public function buildFromReadStore(): MetadataDateTime
46*04fd306cSNickeau    {
47*04fd306cSNickeau
48*04fd306cSNickeau        $store = $this->getReadStore();
49*04fd306cSNickeau
50*04fd306cSNickeau        if (!($store instanceof MetadataDokuWikiStore)) {
51*04fd306cSNickeau            return parent::buildFromReadStore();
52*04fd306cSNickeau        }
53*04fd306cSNickeau
54*04fd306cSNickeau        $fromName = $store->getFromName(self::DATE_DOKUWIKI_PROPERTY_NAME);
55*04fd306cSNickeau        $createdMeta = $fromName[self::DOKUWIKI_SUB_KEY];
56*04fd306cSNickeau        if (empty($createdMeta)) {
57*04fd306cSNickeau            return $this;
58*04fd306cSNickeau        }
59*04fd306cSNickeau        // the data in dokuwiki is saved as timestamp
60*04fd306cSNickeau        $datetime = new DateTime();
61*04fd306cSNickeau        $datetime->setTimestamp($createdMeta);
62*04fd306cSNickeau        $this->setValue($datetime);
63*04fd306cSNickeau        return $this;
64*04fd306cSNickeau    }
65*04fd306cSNickeau
66*04fd306cSNickeau    public function toStoreValue()
67*04fd306cSNickeau    {
68*04fd306cSNickeau        $store = $this->getWriteStore();
69*04fd306cSNickeau        if (!($store instanceof MetadataDokuWikiStore)) {
70*04fd306cSNickeau            return parent::toStoreValue();
71*04fd306cSNickeau        }
72*04fd306cSNickeau        $value = $this->getValue();
73*04fd306cSNickeau
74*04fd306cSNickeau        return array(
75*04fd306cSNickeau            self::DATE_DOKUWIKI_PROPERTY_NAME => [self::DOKUWIKI_SUB_KEY => $value->getTimestamp()]
76*04fd306cSNickeau        );
77*04fd306cSNickeau    }
78*04fd306cSNickeau
79*04fd306cSNickeau
80*04fd306cSNickeau    static public function getName(): string
81*04fd306cSNickeau    {
82*04fd306cSNickeau        return CreationDate::PROPERTY_NAME;
83*04fd306cSNickeau    }
84*04fd306cSNickeau
85*04fd306cSNickeau
86*04fd306cSNickeau    public static function getPersistenceType(): string
87*04fd306cSNickeau    {
88*04fd306cSNickeau        /**
89*04fd306cSNickeau         * On windows, the creation time is not preserved when you copy
90*04fd306cSNickeau         * a file
91*04fd306cSNickeau         *
92*04fd306cSNickeau         * If you copy a file from C:\fat16 to D:\NTFS,
93*04fd306cSNickeau         * it keeps the same modified date and time but changes the created date
94*04fd306cSNickeau         * and time to the current date and time.
95*04fd306cSNickeau         * If you move a file from C:\fat16 to D:\NTFS,
96*04fd306cSNickeau         * it keeps the same modified date and time
97*04fd306cSNickeau         * and keeps the same created date and time
98*04fd306cSNickeau         */
99*04fd306cSNickeau        return Metadata::PERSISTENT_METADATA;
100*04fd306cSNickeau    }
101*04fd306cSNickeau
102*04fd306cSNickeau
103*04fd306cSNickeau    public static function getTab(): string
104*04fd306cSNickeau    {
105*04fd306cSNickeau        return MetaManagerForm::TAB_PAGE_VALUE;
106*04fd306cSNickeau    }
107*04fd306cSNickeau
108*04fd306cSNickeau    static public function getDescription(): string
109*04fd306cSNickeau    {
110*04fd306cSNickeau        return "The creation date of the page";
111*04fd306cSNickeau    }
112*04fd306cSNickeau
113*04fd306cSNickeau    static public function getLabel(): string
114*04fd306cSNickeau    {
115*04fd306cSNickeau        return "Creation Date";
116*04fd306cSNickeau    }
117*04fd306cSNickeau
118*04fd306cSNickeau    static public function isMutable(): bool
119*04fd306cSNickeau    {
120*04fd306cSNickeau        /**
121*04fd306cSNickeau         * Not sure, It should not be really mutable by the user
122*04fd306cSNickeau         * but the date should be found in the frontmatter for instance
123*04fd306cSNickeau         */
124*04fd306cSNickeau        return false;
125*04fd306cSNickeau    }
126*04fd306cSNickeau
127*04fd306cSNickeau    public static function getCanonical(): string
128*04fd306cSNickeau    {
129*04fd306cSNickeau        return Metadata::CANONICAL;
130*04fd306cSNickeau    }
131*04fd306cSNickeau
132*04fd306cSNickeau    public static function isOnForm(): bool
133*04fd306cSNickeau    {
134*04fd306cSNickeau        return true;
135*04fd306cSNickeau    }
136*04fd306cSNickeau}
137