xref: /plugin/combo/ComboStrap/CacheExpirationDate.php (revision c3437056399326d621a01da73b649707fbb0ae69)
1*c3437056SNickeau<?php
2*c3437056SNickeau
3*c3437056SNickeau
4*c3437056SNickeaunamespace ComboStrap;
5*c3437056SNickeau
6*c3437056SNickeau
7*c3437056SNickeauuse DateTime;
8*c3437056SNickeau
9*c3437056SNickeau/**
10*c3437056SNickeau * Class CacheExpirationFrequencyMeta
11*c3437056SNickeau * @package ComboStrap
12*c3437056SNickeau * Represents the cache expiration date metadata
13*c3437056SNickeau */
14*c3437056SNickeauclass CacheExpirationDate extends MetadataDateTime
15*c3437056SNickeau{
16*c3437056SNickeau
17*c3437056SNickeau
18*c3437056SNickeau    /**
19*c3437056SNickeau     * The meta key that has the expiration date
20*c3437056SNickeau     */
21*c3437056SNickeau    public const PROPERTY_NAME = "date_cache_expiration";
22*c3437056SNickeau
23*c3437056SNickeau
24*c3437056SNickeau    public static function createForPage(ResourceCombo $page): CacheExpirationDate
25*c3437056SNickeau    {
26*c3437056SNickeau        return (new CacheExpirationDate())
27*c3437056SNickeau            ->setResource($page);
28*c3437056SNickeau    }
29*c3437056SNickeau
30*c3437056SNickeau    public function getDefaultValue(): ?DateTime
31*c3437056SNickeau    {
32*c3437056SNickeau        $resourceCombo = $this->getResource();
33*c3437056SNickeau        if (!($resourceCombo instanceof Page)) {
34*c3437056SNickeau            return null;
35*c3437056SNickeau        }
36*c3437056SNickeau        $path = $resourceCombo->getHtmlDocument()->getCachePath();
37*c3437056SNickeau        if (!FileSystems::exists($path)) {
38*c3437056SNickeau            return null;
39*c3437056SNickeau        }
40*c3437056SNickeau
41*c3437056SNickeau        $cacheIntervalInSecond = Site::getCacheTime();
42*c3437056SNickeau        if($cacheIntervalInSecond===-1){
43*c3437056SNickeau            return null;
44*c3437056SNickeau        }
45*c3437056SNickeau
46*c3437056SNickeau        /**
47*c3437056SNickeau         * Not the modified time (it's modified by a process when the cache is read
48*c3437056SNickeau         * for whatever reason)
49*c3437056SNickeau         */
50*c3437056SNickeau        $expirationTime = FileSystems::getCreationTime($path);
51*c3437056SNickeau        if ($cacheIntervalInSecond !== null) {
52*c3437056SNickeau            $expirationTime->modify('+' . $cacheIntervalInSecond . ' seconds');
53*c3437056SNickeau        }
54*c3437056SNickeau
55*c3437056SNickeau        return $expirationTime;
56*c3437056SNickeau
57*c3437056SNickeau    }
58*c3437056SNickeau
59*c3437056SNickeau
60*c3437056SNickeau    public function getValue(): ?DateTime
61*c3437056SNickeau    {
62*c3437056SNickeau
63*c3437056SNickeau        $value = parent::getValue();
64*c3437056SNickeau        if ($value === null) {
65*c3437056SNickeau            $cronExpression = $this->getResource()->getCacheExpirationFrequency();
66*c3437056SNickeau            if ($cronExpression !== null) {
67*c3437056SNickeau                try {
68*c3437056SNickeau                    $value = Cron::getDate($cronExpression);
69*c3437056SNickeau                    parent::setValue($value);
70*c3437056SNickeau                } catch (ExceptionCombo $e) {
71*c3437056SNickeau                    // nothing, the cron expression is tested when set
72*c3437056SNickeau                }
73*c3437056SNickeau            }
74*c3437056SNickeau        }
75*c3437056SNickeau        return $value;
76*c3437056SNickeau
77*c3437056SNickeau    }
78*c3437056SNickeau
79*c3437056SNickeau
80*c3437056SNickeau    public static function getName(): string
81*c3437056SNickeau    {
82*c3437056SNickeau        return self::PROPERTY_NAME;
83*c3437056SNickeau    }
84*c3437056SNickeau
85*c3437056SNickeau
86*c3437056SNickeau    public function getPersistenceType(): string
87*c3437056SNickeau    {
88*c3437056SNickeau        return MetadataDokuWikiStore::CURRENT_METADATA;
89*c3437056SNickeau    }
90*c3437056SNickeau
91*c3437056SNickeau
92*c3437056SNickeau    public function getCanonical(): string
93*c3437056SNickeau    {
94*c3437056SNickeau        return CacheExpirationFrequency::PROPERTY_NAME;
95*c3437056SNickeau    }
96*c3437056SNickeau
97*c3437056SNickeau    public function getTab(): string
98*c3437056SNickeau    {
99*c3437056SNickeau        return MetaManagerForm::TAB_CACHE_VALUE;
100*c3437056SNickeau    }
101*c3437056SNickeau
102*c3437056SNickeau    public function getDescription(): string
103*c3437056SNickeau    {
104*c3437056SNickeau        return "The next cache expiration date (calculated from the cache frequency expression)";
105*c3437056SNickeau    }
106*c3437056SNickeau
107*c3437056SNickeau    public function getLabel(): string
108*c3437056SNickeau    {
109*c3437056SNickeau        return "Cache Expiration Date";
110*c3437056SNickeau    }
111*c3437056SNickeau
112*c3437056SNickeau    public function getMutable(): bool
113*c3437056SNickeau    {
114*c3437056SNickeau        return false;
115*c3437056SNickeau    }
116*c3437056SNickeau}
117