xref: /template/strap/ComboStrap/PagePublicationDate.php (revision c3437056399326d621a01da73b649707fbb0ae69)
1*c3437056SNickeau<?php
2*c3437056SNickeau/**
3*c3437056SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved.
4*c3437056SNickeau *
5*c3437056SNickeau * This source code is licensed under the GPL license found in the
6*c3437056SNickeau * COPYING  file in the root directory of this source tree.
7*c3437056SNickeau *
8*c3437056SNickeau * @license  GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
9*c3437056SNickeau * @author   ComboStrap <support@combostrap.com>
10*c3437056SNickeau *
11*c3437056SNickeau */
12*c3437056SNickeau
13*c3437056SNickeaunamespace ComboStrap;
14*c3437056SNickeau
15*c3437056SNickeau
16*c3437056SNickeau/**
17*c3437056SNickeau *
18*c3437056SNickeau * Publication Date
19*c3437056SNickeau * @package ComboStrap
20*c3437056SNickeau *
21*c3437056SNickeau */
22*c3437056SNickeauclass PagePublicationDate extends MetadataDateTime
23*c3437056SNickeau{
24*c3437056SNickeau
25*c3437056SNickeau    /**
26*c3437056SNickeau     * The key that contains the published date
27*c3437056SNickeau     */
28*c3437056SNickeau    const PROPERTY_NAME = "date_published";
29*c3437056SNickeau    const OLD_META_KEY = "published";
30*c3437056SNickeau
31*c3437056SNickeau    /**
32*c3437056SNickeau     * Late publication protection
33*c3437056SNickeau     */
34*c3437056SNickeau    const LATE_PUBLICATION_PROTECTION_ACRONYM = "lpp";
35*c3437056SNickeau    const CONF_LATE_PUBLICATION_PROTECTION_MODE = "latePublicationProtectionMode";
36*c3437056SNickeau    const CONF_LATE_PUBLICATION_PROTECTION_ENABLE = "latePublicationProtectionEnable";
37*c3437056SNickeau    const LATE_PUBLICATION_CLASS_NAME = "late-publication";
38*c3437056SNickeau
39*c3437056SNickeau
40*c3437056SNickeau    public static function getLatePublicationProtectionMode()
41*c3437056SNickeau    {
42*c3437056SNickeau
43*c3437056SNickeau        if (PluginUtility::getConfValue(PagePublicationDate::CONF_LATE_PUBLICATION_PROTECTION_ENABLE, true)) {
44*c3437056SNickeau            return PluginUtility::getConfValue(PagePublicationDate::CONF_LATE_PUBLICATION_PROTECTION_MODE);
45*c3437056SNickeau        } else {
46*c3437056SNickeau            return false;
47*c3437056SNickeau        }
48*c3437056SNickeau
49*c3437056SNickeau    }
50*c3437056SNickeau
51*c3437056SNickeau    public static function isLatePublicationProtectionEnabled()
52*c3437056SNickeau    {
53*c3437056SNickeau        return PluginUtility::getConfValue(PagePublicationDate::CONF_LATE_PUBLICATION_PROTECTION_ENABLE, true);
54*c3437056SNickeau    }
55*c3437056SNickeau
56*c3437056SNickeau    public static function createFromPage(Page $page)
57*c3437056SNickeau    {
58*c3437056SNickeau        return (new PagePublicationDate())
59*c3437056SNickeau            ->setResource($page);
60*c3437056SNickeau    }
61*c3437056SNickeau
62*c3437056SNickeau
63*c3437056SNickeau    public function getTab(): string
64*c3437056SNickeau    {
65*c3437056SNickeau        return MetaManagerForm::TAB_TYPE_VALUE;
66*c3437056SNickeau    }
67*c3437056SNickeau
68*c3437056SNickeau    public function getDescription(): string
69*c3437056SNickeau    {
70*c3437056SNickeau        return "The publication date";
71*c3437056SNickeau    }
72*c3437056SNickeau
73*c3437056SNickeau    public function getLabel(): string
74*c3437056SNickeau    {
75*c3437056SNickeau        return "Publication Date";
76*c3437056SNickeau    }
77*c3437056SNickeau
78*c3437056SNickeau    static public function getName(): string
79*c3437056SNickeau    {
80*c3437056SNickeau        return self::PROPERTY_NAME;
81*c3437056SNickeau    }
82*c3437056SNickeau
83*c3437056SNickeau
84*c3437056SNickeau    public function buildFromStoreValue($value): Metadata
85*c3437056SNickeau    {
86*c3437056SNickeau        $store = $this->getReadStore();
87*c3437056SNickeau        if (!($store instanceof MetadataDokuWikiStore)) {
88*c3437056SNickeau            return parent::buildFromStoreValue($value);
89*c3437056SNickeau        }
90*c3437056SNickeau
91*c3437056SNickeau        if ($value === null) {
92*c3437056SNickeau            /**
93*c3437056SNickeau             * Old metadata key
94*c3437056SNickeau             */
95*c3437056SNickeau            $value = $store->getFromPersistentName(PagePublicationDate::OLD_META_KEY);
96*c3437056SNickeau        }
97*c3437056SNickeau
98*c3437056SNickeau        try {
99*c3437056SNickeau            $this->dateTimeValue = $this->fromPersistentDateTimeUtility($value);
100*c3437056SNickeau        } catch (ExceptionCombo $e) {
101*c3437056SNickeau            LogUtility::msg($e->getMessage(), LogUtility::LVL_MSG_ERROR, $e->getCanonical());
102*c3437056SNickeau        }
103*c3437056SNickeau
104*c3437056SNickeau        return $this;
105*c3437056SNickeau    }
106*c3437056SNickeau
107*c3437056SNickeau
108*c3437056SNickeau    public function getPersistenceType(): string
109*c3437056SNickeau    {
110*c3437056SNickeau        return Metadata::PERSISTENT_METADATA;
111*c3437056SNickeau    }
112*c3437056SNickeau
113*c3437056SNickeau    public function getMutable(): bool
114*c3437056SNickeau    {
115*c3437056SNickeau        return true;
116*c3437056SNickeau    }
117*c3437056SNickeau
118*c3437056SNickeau    public function getDefaultValue(): ?\DateTime
119*c3437056SNickeau    {
120*c3437056SNickeau        return PageCreationDate::create()
121*c3437056SNickeau            ->setResource($this->getResource())
122*c3437056SNickeau            ->getValueOrDefault();
123*c3437056SNickeau    }
124*c3437056SNickeau
125*c3437056SNickeau    static public function getOldPersistentNames(): array
126*c3437056SNickeau    {
127*c3437056SNickeau        return [PagePublicationDate::OLD_META_KEY];
128*c3437056SNickeau    }
129*c3437056SNickeau
130*c3437056SNickeau    public function getCanonical(): string
131*c3437056SNickeau    {
132*c3437056SNickeau        return "published";
133*c3437056SNickeau    }
134*c3437056SNickeau
135*c3437056SNickeau
136*c3437056SNickeau}
137