xref: /plugin/combo/ComboStrap/CacheTag.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace ComboStrap;
4*04fd306cSNickeau
5*04fd306cSNickeau/**
6*04fd306cSNickeau * @deprecated - use the metadata/page properties instead
7*04fd306cSNickeau */
8*04fd306cSNickeauclass CacheTag
9*04fd306cSNickeau{
10*04fd306cSNickeau
11*04fd306cSNickeau    public const MARKUP = "cache";
12*04fd306cSNickeau    public const EXPIRATION_ATTRIBUTE = "expiration";
13*04fd306cSNickeau    public const PARSING_STATE_UNSUCCESSFUL = "unsuccessful";
14*04fd306cSNickeau    public const PARSING_STATUS = "status";
15*04fd306cSNickeau    public const PARSING_STATE_SUCCESSFUL = "successful";
16*04fd306cSNickeau
17*04fd306cSNickeau
18*04fd306cSNickeau    public static function handle(TagAttributes $attributes): array
19*04fd306cSNickeau    {
20*04fd306cSNickeau
21*04fd306cSNickeau        $cronExpression = $attributes->getValue(self::EXPIRATION_ATTRIBUTE);
22*04fd306cSNickeau        $returnedArray = array(
23*04fd306cSNickeau            PluginUtility::PAYLOAD => $cronExpression
24*04fd306cSNickeau        );
25*04fd306cSNickeau
26*04fd306cSNickeau        try {
27*04fd306cSNickeau            $requestPage = MarkupPath::createPageFromPathObject(
28*04fd306cSNickeau                ExecutionContext::getActualOrCreateFromEnv()->getExecutingWikiPath()
29*04fd306cSNickeau            );
30*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
31*04fd306cSNickeau            $message = "No markup executing. Cache expiration date could not be set";
32*04fd306cSNickeau            LogUtility::error($message, self::MARKUP);
33*04fd306cSNickeau            return array(
34*04fd306cSNickeau                PluginUtility::EXIT_CODE => self::PARSING_STATE_UNSUCCESSFUL,
35*04fd306cSNickeau                PluginUtility::EXIT_MESSAGE => $message
36*04fd306cSNickeau            );
37*04fd306cSNickeau        }
38*04fd306cSNickeau
39*04fd306cSNickeau        try {
40*04fd306cSNickeau            CacheExpirationFrequency::createForPage($requestPage)
41*04fd306cSNickeau                ->setValue($cronExpression)
42*04fd306cSNickeau                ->sendToWriteStore();
43*04fd306cSNickeau        } catch (ExceptionBadSyntax $e) {
44*04fd306cSNickeau            $returnedArray[PluginUtility::EXIT_CODE] = self::PARSING_STATE_UNSUCCESSFUL;
45*04fd306cSNickeau            $returnedArray[PluginUtility::EXIT_MESSAGE] = "The expression ($cronExpression) is not a valid expression";
46*04fd306cSNickeau            return $returnedArray;
47*04fd306cSNickeau        } catch (ExceptionBadArgument $e) {
48*04fd306cSNickeau            // It should not happen
49*04fd306cSNickeau            $message = "Internal Error: The cache expiration date could not be stored: {$e->getMessage()}";
50*04fd306cSNickeau            LogUtility::error($message, self::MARKUP, $e);
51*04fd306cSNickeau            $returnedArray[PluginUtility::EXIT_CODE] = self::PARSING_STATE_UNSUCCESSFUL;
52*04fd306cSNickeau            $returnedArray[PluginUtility::EXIT_MESSAGE] = $message;
53*04fd306cSNickeau            return $returnedArray;
54*04fd306cSNickeau        }
55*04fd306cSNickeau
56*04fd306cSNickeau        LogUtility::warning("The cache syntax component has been deprecated for the cache frequency metadata", CacheExpirationFrequency::PROPERTY_NAME);
57*04fd306cSNickeau
58*04fd306cSNickeau        $returnedArray[PluginUtility::EXIT_CODE] = self::PARSING_STATE_SUCCESSFUL;
59*04fd306cSNickeau        $returnedArray[PluginUtility::PAYLOAD] = $cronExpression;
60*04fd306cSNickeau        return $returnedArray;
61*04fd306cSNickeau
62*04fd306cSNickeau    }
63*04fd306cSNickeau
64*04fd306cSNickeau    public static function renderXhtml(array $data): string
65*04fd306cSNickeau    {
66*04fd306cSNickeau
67*04fd306cSNickeau        if ($data[PluginUtility::EXIT_CODE] !== CacheTag::PARSING_STATE_SUCCESSFUL) {
68*04fd306cSNickeau            $message = $data[PluginUtility::EXIT_MESSAGE];
69*04fd306cSNickeau            LogUtility::error($message, CacheExpirationFrequency::PROPERTY_NAME);
70*04fd306cSNickeau        }
71*04fd306cSNickeau        return "";
72*04fd306cSNickeau
73*04fd306cSNickeau    }
74*04fd306cSNickeau
75*04fd306cSNickeau    public static function metadata($data)
76*04fd306cSNickeau    {
77*04fd306cSNickeau
78*04fd306cSNickeau        if ($data[PluginUtility::EXIT_CODE] === CacheTag::PARSING_STATE_SUCCESSFUL) {
79*04fd306cSNickeau            $cronExpression = $data[PluginUtility::PAYLOAD];
80*04fd306cSNickeau            try {
81*04fd306cSNickeau                $requestPage = MarkupPath::createFromRequestedPage();
82*04fd306cSNickeau            } catch (ExceptionNotFound $e) {
83*04fd306cSNickeau                LogUtility::error("Unable to store the cache expiration date because no requested page", self::MARKUP, $e);
84*04fd306cSNickeau                return;
85*04fd306cSNickeau            }
86*04fd306cSNickeau            try {
87*04fd306cSNickeau                CacheExpirationFrequency::createForPage($requestPage)
88*04fd306cSNickeau                    ->setValue($cronExpression)
89*04fd306cSNickeau                    ->sendToWriteStore();
90*04fd306cSNickeau            } catch (ExceptionCompile $e) {
91*04fd306cSNickeau                // should not happen as we have test for its validity
92*04fd306cSNickeau            }
93*04fd306cSNickeau
94*04fd306cSNickeau        }
95*04fd306cSNickeau
96*04fd306cSNickeau    }
97*04fd306cSNickeau}
98