xref: /plugin/combo/ComboStrap/CacheReportHtmlDataBlockArray.php (revision 4cadd4f8c541149bdda95f080e38a6d4e3a640ca)
1*4cadd4f8SNickeau<?php
2*4cadd4f8SNickeau
3*4cadd4f8SNickeau
4*4cadd4f8SNickeaunamespace ComboStrap;
5*4cadd4f8SNickeau
6*4cadd4f8SNickeau
7*4cadd4f8SNickeauclass CacheReportHtmlDataBlockArray
8*4cadd4f8SNickeau{
9*4cadd4f8SNickeau
10*4cadd4f8SNickeau    const RESULT_STATUS = 'result';
11*4cadd4f8SNickeau    const DATE_MODIFIED = 'mtime';
12*4cadd4f8SNickeau    const CACHE_FILE = "file";
13*4cadd4f8SNickeau
14*4cadd4f8SNickeau    /**
15*4cadd4f8SNickeau     * Used when the cache data report
16*4cadd4f8SNickeau     * are injected in the page in a json format
17*4cadd4f8SNickeau     */
18*4cadd4f8SNickeau    public const APPLICATION_COMBO_CACHE_JSON = "application/combo+cache+json";
19*4cadd4f8SNickeau    const DEPENDENCY_ATT = "dependency";
20*4cadd4f8SNickeau
21*4cadd4f8SNickeau
22*4cadd4f8SNickeau    /**
23*4cadd4f8SNickeau     * @return array - a array that will be transformed as json HTML data block
24*4cadd4f8SNickeau     * to be included in a HTML page in order to insert cache results in the html page
25*4cadd4f8SNickeau     */
26*4cadd4f8SNickeau    public static function getFromRuntime(): array
27*4cadd4f8SNickeau    {
28*4cadd4f8SNickeau        $cacheManager = CacheManager::getOrCreate();
29*4cadd4f8SNickeau        $cacheReporters = $cacheManager->getCacheResults();
30*4cadd4f8SNickeau        if ($cacheReporters === null) {
31*4cadd4f8SNickeau            return [];
32*4cadd4f8SNickeau        }
33*4cadd4f8SNickeau        $htmlDataBlock = [];
34*4cadd4f8SNickeau        foreach ($cacheReporters as $cacheReporter) {
35*4cadd4f8SNickeau
36*4cadd4f8SNickeau            foreach ($cacheReporter->getResults() as $result) {
37*4cadd4f8SNickeau
38*4cadd4f8SNickeau                $modifiedDate = "";
39*4cadd4f8SNickeau                if ($result->getPath() !== null) {
40*4cadd4f8SNickeau                    $modifiedTime = FileSystems::getModifiedTime($result->getPath());
41*4cadd4f8SNickeau                    if ($modifiedTime !== null) {
42*4cadd4f8SNickeau                        // the file exists
43*4cadd4f8SNickeau                        $modifiedDate = $modifiedTime->format(Iso8601Date::getFormat());
44*4cadd4f8SNickeau                    }
45*4cadd4f8SNickeau                }
46*4cadd4f8SNickeau                $mode = $result->getMode();
47*4cadd4f8SNickeau                $slotId = $result->getSlotId();
48*4cadd4f8SNickeau
49*4cadd4f8SNickeau                $cacheFile = null;
50*4cadd4f8SNickeau                try {
51*4cadd4f8SNickeau                    $dokuPath = $result->getPath()->toDokuPath();
52*4cadd4f8SNickeau                    $cacheFile = $dokuPath->getDokuwikiId();
53*4cadd4f8SNickeau                } catch (ExceptionCombo $e) {
54*4cadd4f8SNickeau                    LogUtility::msg("The path ({$result->getPath()}) could not be transformed as wiki path. Error:{$e->getMessage()}");
55*4cadd4f8SNickeau                }
56*4cadd4f8SNickeau                $data = [
57*4cadd4f8SNickeau                    self::RESULT_STATUS => $result->getResult(),
58*4cadd4f8SNickeau                    self::DATE_MODIFIED => $modifiedDate,
59*4cadd4f8SNickeau                    self::CACHE_FILE => $cacheFile
60*4cadd4f8SNickeau                ];
61*4cadd4f8SNickeau
62*4cadd4f8SNickeau                if ($mode === HtmlDocument::mode) {
63*4cadd4f8SNickeau                    $dependencies = $cacheManager
64*4cadd4f8SNickeau                        ->getCacheDependenciesForSlot($slotId)
65*4cadd4f8SNickeau                        ->getDependencies();
66*4cadd4f8SNickeau                    if ($dependencies !== null) {
67*4cadd4f8SNickeau                        $data[self::DEPENDENCY_ATT] = $dependencies;
68*4cadd4f8SNickeau                    }
69*4cadd4f8SNickeau                }
70*4cadd4f8SNickeau
71*4cadd4f8SNickeau                $htmlDataBlock[$slotId][$mode] = $data;
72*4cadd4f8SNickeau
73*4cadd4f8SNickeau            }
74*4cadd4f8SNickeau
75*4cadd4f8SNickeau        }
76*4cadd4f8SNickeau        return $htmlDataBlock;
77*4cadd4f8SNickeau    }
78*4cadd4f8SNickeau
79*4cadd4f8SNickeau
80*4cadd4f8SNickeau    /**
81*4cadd4f8SNickeau     * An utility function to extract the cache data block from test responses
82*4cadd4f8SNickeau     * @param \TestResponse $response
83*4cadd4f8SNickeau     * @return mixed
84*4cadd4f8SNickeau     * @throws ExceptionCombo
85*4cadd4f8SNickeau     */
86*4cadd4f8SNickeau    public static function extractFromResponse(\TestResponse $response)
87*4cadd4f8SNickeau    {
88*4cadd4f8SNickeau        $metaCacheMain = $response->queryHTML('script[type="' . CacheReportHtmlDataBlockArray::APPLICATION_COMBO_CACHE_JSON . '"]');
89*4cadd4f8SNickeau        if ($metaCacheMain->count() != 1) {
90*4cadd4f8SNickeau            throw new ExceptionCombo("The data cache was not found");
91*4cadd4f8SNickeau        }
92*4cadd4f8SNickeau        $cacheJsonTextValue = $metaCacheMain->elements[0]->childNodes->item(0)->textContent;
93*4cadd4f8SNickeau        return json_decode(XmlUtility::extractTextWithoutCdata($cacheJsonTextValue), true);
94*4cadd4f8SNickeau    }
95*4cadd4f8SNickeau}
96