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