xref: /plugin/combo/ComboStrap/CacheResults.php (revision 4cadd4f8c541149bdda95f080e38a6d4e3a640ca)
1*4cadd4f8SNickeau<?php
2*4cadd4f8SNickeau
3*4cadd4f8SNickeau
4*4cadd4f8SNickeaunamespace ComboStrap;
5*4cadd4f8SNickeau
6*4cadd4f8SNickeauuse dokuwiki\Cache\CacheParser;
7*4cadd4f8SNickeau
8*4cadd4f8SNickeau/**
9*4cadd4f8SNickeau * Class CacheResults
10*4cadd4f8SNickeau * @package ComboStrap
11*4cadd4f8SNickeau */
12*4cadd4f8SNickeauclass CacheResults
13*4cadd4f8SNickeau{
14*4cadd4f8SNickeau
15*4cadd4f8SNickeau    private $cacheResults;
16*4cadd4f8SNickeau    /**
17*4cadd4f8SNickeau     * @var string
18*4cadd4f8SNickeau     */
19*4cadd4f8SNickeau    private $wikiId;
20*4cadd4f8SNickeau
21*4cadd4f8SNickeau    /**
22*4cadd4f8SNickeau     * CacheReporter constructor.
23*4cadd4f8SNickeau     * @param string $wikiId
24*4cadd4f8SNickeau     */
25*4cadd4f8SNickeau    public function __construct(string $wikiId)
26*4cadd4f8SNickeau    {
27*4cadd4f8SNickeau        $this->wikiId = $wikiId;
28*4cadd4f8SNickeau    }
29*4cadd4f8SNickeau
30*4cadd4f8SNickeau    public function setData(\Doku_Event $event)
31*4cadd4f8SNickeau    {
32*4cadd4f8SNickeau
33*4cadd4f8SNickeau        $cacheParser = $event->data;
34*4cadd4f8SNickeau        /**
35*4cadd4f8SNickeau         * Metadata and other rendering may occurs
36*4cadd4f8SNickeau         * recursively in one request
37*4cadd4f8SNickeau         *
38*4cadd4f8SNickeau         * We record only the first one because the second call one will use the first
39*4cadd4f8SNickeau         * one and overwrite the result
40*4cadd4f8SNickeau         */
41*4cadd4f8SNickeau        if (!isset($this->cacheResults[$cacheParser->mode])) {
42*4cadd4f8SNickeau            $this->cacheResults[$cacheParser->mode] = (new CacheResult($cacheParser))
43*4cadd4f8SNickeau                ->setResult($event->result);
44*4cadd4f8SNickeau            /**
45*4cadd4f8SNickeau             * Add snippet and output dependencies
46*4cadd4f8SNickeau             */
47*4cadd4f8SNickeau            if ($cacheParser->mode === HtmlDocument::mode) {
48*4cadd4f8SNickeau                $page = $cacheParser->page;
49*4cadd4f8SNickeau                $htmlDocument = Page::createPageFromId($page)
50*4cadd4f8SNickeau                    ->getHtmlDocument();
51*4cadd4f8SNickeau
52*4cadd4f8SNickeau                /**
53*4cadd4f8SNickeau                 * @var CacheParser[] $cacheStores
54*4cadd4f8SNickeau                 */
55*4cadd4f8SNickeau                $cacheStores = [$htmlDocument->getSnippetCacheStore(), $htmlDocument->getDependenciesCacheStore()];
56*4cadd4f8SNickeau                foreach ($cacheStores as $cacheStore) {
57*4cadd4f8SNickeau                    if(file_exists($cacheStore->cache)) {
58*4cadd4f8SNickeau                        $this->cacheResults[$cacheStore->mode] = (new CacheResult($cacheStore))
59*4cadd4f8SNickeau                            ->setResult($event->result);
60*4cadd4f8SNickeau                    }
61*4cadd4f8SNickeau                }
62*4cadd4f8SNickeau            }
63*4cadd4f8SNickeau        }
64*4cadd4f8SNickeau    }
65*4cadd4f8SNickeau
66*4cadd4f8SNickeau    /**
67*4cadd4f8SNickeau     * @return CacheResult[]
68*4cadd4f8SNickeau     */
69*4cadd4f8SNickeau    public function getResults(): array
70*4cadd4f8SNickeau    {
71*4cadd4f8SNickeau        return $this->cacheResults;
72*4cadd4f8SNickeau    }
73*4cadd4f8SNickeau
74*4cadd4f8SNickeau    public function hasResultForMode($mode): bool
75*4cadd4f8SNickeau    {
76*4cadd4f8SNickeau        return isset($this->cacheResults[$mode]);
77*4cadd4f8SNickeau    }
78*4cadd4f8SNickeau
79*4cadd4f8SNickeau    /**
80*4cadd4f8SNickeau     * @param string $mode
81*4cadd4f8SNickeau     * @return null|CacheResult
82*4cadd4f8SNickeau     */
83*4cadd4f8SNickeau    public function getResultForMode(string $mode): ?CacheResult
84*4cadd4f8SNickeau    {
85*4cadd4f8SNickeau        return $this->cacheResults[$mode];
86*4cadd4f8SNickeau    }
87*4cadd4f8SNickeau
88*4cadd4f8SNickeau}
89