xref: /template/strap/ComboStrap/CacheExpirationFrequency.php (revision c3437056399326d621a01da73b649707fbb0ae69)
1*c3437056SNickeau<?php
2*c3437056SNickeau
3*c3437056SNickeau
4*c3437056SNickeaunamespace ComboStrap;
5*c3437056SNickeau
6*c3437056SNickeau
7*c3437056SNickeauclass CacheExpirationFrequency extends MetadataText
8*c3437056SNickeau{
9*c3437056SNickeau
10*c3437056SNickeau    /**
11*c3437056SNickeau     * The meta that has the cron expression
12*c3437056SNickeau     */
13*c3437056SNickeau    public const PROPERTY_NAME = "cache_expiration_frequency";
14*c3437056SNickeau    public const CANONICAL = "page-cache-expiration-frequency";
15*c3437056SNickeau
16*c3437056SNickeau    public static function createForPage(ResourceCombo $page): CacheExpirationFrequency
17*c3437056SNickeau    {
18*c3437056SNickeau        return (new CacheExpirationFrequency())
19*c3437056SNickeau            ->setResource($page);
20*c3437056SNickeau    }
21*c3437056SNickeau
22*c3437056SNickeau    public function getTab(): string
23*c3437056SNickeau    {
24*c3437056SNickeau        return MetaManagerForm::TAB_CACHE_VALUE;
25*c3437056SNickeau    }
26*c3437056SNickeau
27*c3437056SNickeau    /**
28*c3437056SNickeau     * @param string|null $value
29*c3437056SNickeau     * @return Metadata
30*c3437056SNickeau     * @throws ExceptionCombo
31*c3437056SNickeau     */
32*c3437056SNickeau    public function setValue($value): Metadata
33*c3437056SNickeau    {
34*c3437056SNickeau
35*c3437056SNickeau        if ($value === null){
36*c3437056SNickeau            parent::setValue($value);
37*c3437056SNickeau            return $this;
38*c3437056SNickeau        }
39*c3437056SNickeau
40*c3437056SNickeau        $value = trim($value);
41*c3437056SNickeau        if ($value === "") {
42*c3437056SNickeau            // html form send an empty string
43*c3437056SNickeau            return $this;
44*c3437056SNickeau        }
45*c3437056SNickeau
46*c3437056SNickeau        try {
47*c3437056SNickeau            $cacheExpirationCalculatedDate = Cron::getDate($value);
48*c3437056SNickeau            $cacheExpirationDate = CacheExpirationDate::createForPage($this->getResource());
49*c3437056SNickeau            $cacheExpirationDate
50*c3437056SNickeau                ->setValue($cacheExpirationCalculatedDate)
51*c3437056SNickeau                ->persist();
52*c3437056SNickeau            parent::setValue($value);
53*c3437056SNickeau            return $this;
54*c3437056SNickeau        } catch (ExceptionCombo $e) {
55*c3437056SNickeau            throw new ExceptionCombo("The cache frequency expression ($value) is not a valid cron expression. <a href=\"https://crontab.guru/\">Validate it on this website</a>", CacheExpirationFrequency::PROPERTY_NAME);
56*c3437056SNickeau        }
57*c3437056SNickeau
58*c3437056SNickeau    }
59*c3437056SNickeau
60*c3437056SNickeau
61*c3437056SNickeau    public function getDescription(): string
62*c3437056SNickeau    {
63*c3437056SNickeau        return "A page expiration frequency expressed as a cron expression";
64*c3437056SNickeau    }
65*c3437056SNickeau
66*c3437056SNickeau    public function getLabel(): string
67*c3437056SNickeau    {
68*c3437056SNickeau        return "Cache Expiration Frequency";
69*c3437056SNickeau    }
70*c3437056SNickeau
71*c3437056SNickeau    public static function getName(): string
72*c3437056SNickeau    {
73*c3437056SNickeau        return self::PROPERTY_NAME;
74*c3437056SNickeau    }
75*c3437056SNickeau
76*c3437056SNickeau    public function getPersistenceType(): string
77*c3437056SNickeau    {
78*c3437056SNickeau        return MetadataDokuWikiStore::PERSISTENT_METADATA;
79*c3437056SNickeau    }
80*c3437056SNickeau
81*c3437056SNickeau    public function getMutable(): bool
82*c3437056SNickeau    {
83*c3437056SNickeau        return true;
84*c3437056SNickeau    }
85*c3437056SNickeau
86*c3437056SNickeau    public function getDefaultValue()
87*c3437056SNickeau    {
88*c3437056SNickeau        return null;
89*c3437056SNickeau    }
90*c3437056SNickeau
91*c3437056SNickeau    public function getCanonical(): string
92*c3437056SNickeau    {
93*c3437056SNickeau        return self::CANONICAL;
94*c3437056SNickeau    }
95*c3437056SNickeau
96*c3437056SNickeau
97*c3437056SNickeau}
98