xref: /plugin/combo/ComboStrap/CreationDate.php (revision 70bbd7f1f72440223cc13f3495efdcb2b0a11514)
104fd306cSNickeau<?php
204fd306cSNickeau
304fd306cSNickeau
404fd306cSNickeaunamespace ComboStrap;
504fd306cSNickeau
604fd306cSNickeau
704fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
804fd306cSNickeauuse ComboStrap\Meta\Api\MetadataDateTime;
904fd306cSNickeauuse ComboStrap\Meta\Store\MetadataDokuWikiStore;
1004fd306cSNickeauuse DateTime;
1104fd306cSNickeau
1204fd306cSNickeau/**
1304fd306cSNickeau * Class CacheExpirationFrequencyMeta
1404fd306cSNickeau * @package ComboStrap
1504fd306cSNickeau * Represents the creation date of a resource
1604fd306cSNickeau */
1704fd306cSNickeauclass CreationDate extends MetadataDateTime
1804fd306cSNickeau{
1904fd306cSNickeau
2004fd306cSNickeau
2104fd306cSNickeau    public const PROPERTY_NAME = 'date_created';
2204fd306cSNickeau    const DATE_DOKUWIKI_PROPERTY_NAME = 'date';
2304fd306cSNickeau    const DOKUWIKI_SUB_KEY = 'created';
2404fd306cSNickeau
2504fd306cSNickeau
2604fd306cSNickeau    public static function createForPage(ResourceCombo $page): CreationDate
2704fd306cSNickeau    {
2804fd306cSNickeau        return (new CreationDate())
2904fd306cSNickeau            ->setResource($page);
3004fd306cSNickeau    }
3104fd306cSNickeau
3204fd306cSNickeau    public static function create(): CreationDate
3304fd306cSNickeau    {
3404fd306cSNickeau        return new CreationDate();
3504fd306cSNickeau    }
3604fd306cSNickeau
3704fd306cSNickeau    public function getDefaultValue(): DateTime
3804fd306cSNickeau    {
3904fd306cSNickeau        $path = $this->getResource()->getPathObject();
4004fd306cSNickeau        return FileSystems::getCreationTime($path);
4104fd306cSNickeau    }
4204fd306cSNickeau
4304fd306cSNickeau    /**
4404fd306cSNickeau     */
4504fd306cSNickeau    public function buildFromReadStore(): MetadataDateTime
4604fd306cSNickeau    {
4704fd306cSNickeau
4804fd306cSNickeau        $store = $this->getReadStore();
4904fd306cSNickeau
5004fd306cSNickeau        if (!($store instanceof MetadataDokuWikiStore)) {
5104fd306cSNickeau            return parent::buildFromReadStore();
5204fd306cSNickeau        }
5304fd306cSNickeau
5404fd306cSNickeau        $fromName = $store->getFromName(self::DATE_DOKUWIKI_PROPERTY_NAME);
55*70bbd7f1Sgerardnico        if ($fromName === null) {
56*70bbd7f1Sgerardnico            return $this;
57*70bbd7f1Sgerardnico        }
58*70bbd7f1Sgerardnico        $createdMeta = $fromName[self::DOKUWIKI_SUB_KEY] ?? null;
5904fd306cSNickeau        if (empty($createdMeta)) {
6004fd306cSNickeau            return $this;
6104fd306cSNickeau        }
6204fd306cSNickeau        // the data in dokuwiki is saved as timestamp
6304fd306cSNickeau        $datetime = new DateTime();
6404fd306cSNickeau        $datetime->setTimestamp($createdMeta);
6504fd306cSNickeau        $this->setValue($datetime);
6604fd306cSNickeau        return $this;
6704fd306cSNickeau    }
6804fd306cSNickeau
6904fd306cSNickeau    public function toStoreValue()
7004fd306cSNickeau    {
7104fd306cSNickeau        $store = $this->getWriteStore();
7204fd306cSNickeau        if (!($store instanceof MetadataDokuWikiStore)) {
7304fd306cSNickeau            return parent::toStoreValue();
7404fd306cSNickeau        }
7504fd306cSNickeau        $value = $this->getValue();
7604fd306cSNickeau
7704fd306cSNickeau        return array(
7804fd306cSNickeau            self::DATE_DOKUWIKI_PROPERTY_NAME => [self::DOKUWIKI_SUB_KEY => $value->getTimestamp()]
7904fd306cSNickeau        );
8004fd306cSNickeau    }
8104fd306cSNickeau
8204fd306cSNickeau
8304fd306cSNickeau    static public function getName(): string
8404fd306cSNickeau    {
8504fd306cSNickeau        return CreationDate::PROPERTY_NAME;
8604fd306cSNickeau    }
8704fd306cSNickeau
8804fd306cSNickeau
8904fd306cSNickeau    public static function getPersistenceType(): string
9004fd306cSNickeau    {
9104fd306cSNickeau        /**
9204fd306cSNickeau         * On windows, the creation time is not preserved when you copy
9304fd306cSNickeau         * a file
9404fd306cSNickeau         *
9504fd306cSNickeau         * If you copy a file from C:\fat16 to D:\NTFS,
9604fd306cSNickeau         * it keeps the same modified date and time but changes the created date
9704fd306cSNickeau         * and time to the current date and time.
9804fd306cSNickeau         * If you move a file from C:\fat16 to D:\NTFS,
9904fd306cSNickeau         * it keeps the same modified date and time
10004fd306cSNickeau         * and keeps the same created date and time
10104fd306cSNickeau         */
10204fd306cSNickeau        return Metadata::PERSISTENT_METADATA;
10304fd306cSNickeau    }
10404fd306cSNickeau
10504fd306cSNickeau
10604fd306cSNickeau    public static function getTab(): string
10704fd306cSNickeau    {
10804fd306cSNickeau        return MetaManagerForm::TAB_PAGE_VALUE;
10904fd306cSNickeau    }
11004fd306cSNickeau
11104fd306cSNickeau    static public function getDescription(): string
11204fd306cSNickeau    {
11304fd306cSNickeau        return "The creation date of the page";
11404fd306cSNickeau    }
11504fd306cSNickeau
11604fd306cSNickeau    static public function getLabel(): string
11704fd306cSNickeau    {
11804fd306cSNickeau        return "Creation Date";
11904fd306cSNickeau    }
12004fd306cSNickeau
12104fd306cSNickeau    static public function isMutable(): bool
12204fd306cSNickeau    {
12304fd306cSNickeau        /**
12404fd306cSNickeau         * Not sure, It should not be really mutable by the user
12504fd306cSNickeau         * but the date should be found in the frontmatter for instance
12604fd306cSNickeau         */
12704fd306cSNickeau        return false;
12804fd306cSNickeau    }
12904fd306cSNickeau
13004fd306cSNickeau    public static function getCanonical(): string
13104fd306cSNickeau    {
13204fd306cSNickeau        return Metadata::CANONICAL;
13304fd306cSNickeau    }
13404fd306cSNickeau
13504fd306cSNickeau    public static function isOnForm(): bool
13604fd306cSNickeau    {
13704fd306cSNickeau        return true;
13804fd306cSNickeau    }
13904fd306cSNickeau}
140