xref: /plugin/combo/ComboStrap/CacheResults.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
14cadd4f8SNickeau<?php
24cadd4f8SNickeau
34cadd4f8SNickeau
44cadd4f8SNickeaunamespace ComboStrap;
54cadd4f8SNickeau
64cadd4f8SNickeauuse dokuwiki\Cache\CacheParser;
74cadd4f8SNickeau
84cadd4f8SNickeau/**
94cadd4f8SNickeau * Class CacheResults
104cadd4f8SNickeau * @package ComboStrap
114cadd4f8SNickeau */
124cadd4f8SNickeauclass CacheResults
134cadd4f8SNickeau{
144cadd4f8SNickeau
15*04fd306cSNickeau    const CANONICAL = "cache-results";
16*04fd306cSNickeau
174cadd4f8SNickeau    private $cacheResults;
184cadd4f8SNickeau    /**
194cadd4f8SNickeau     * @var string
204cadd4f8SNickeau     */
21*04fd306cSNickeau    private string $wikiId;
224cadd4f8SNickeau
234cadd4f8SNickeau    /**
244cadd4f8SNickeau     * CacheReporter constructor.
254cadd4f8SNickeau     * @param string $wikiId
264cadd4f8SNickeau     */
274cadd4f8SNickeau    public function __construct(string $wikiId)
284cadd4f8SNickeau    {
294cadd4f8SNickeau        $this->wikiId = $wikiId;
304cadd4f8SNickeau    }
314cadd4f8SNickeau
324cadd4f8SNickeau    public function setData(\Doku_Event $event)
334cadd4f8SNickeau    {
344cadd4f8SNickeau
35*04fd306cSNickeau
364cadd4f8SNickeau        $cacheParser = $event->data;
374cadd4f8SNickeau        /**
384cadd4f8SNickeau         * Metadata and other rendering may occurs
394cadd4f8SNickeau         * recursively in one request
404cadd4f8SNickeau         *
414cadd4f8SNickeau         * We record only the first one because the second call one will use the first
424cadd4f8SNickeau         * one and overwrite the result
434cadd4f8SNickeau         */
444cadd4f8SNickeau        if (!isset($this->cacheResults[$cacheParser->mode])) {
454cadd4f8SNickeau            $this->cacheResults[$cacheParser->mode] = (new CacheResult($cacheParser))
464cadd4f8SNickeau                ->setResult($event->result);
474cadd4f8SNickeau            /**
484cadd4f8SNickeau             * Add snippet and output dependencies
494cadd4f8SNickeau             */
50*04fd306cSNickeau            if ($cacheParser->mode === FetcherMarkup::XHTML_MODE) {
51*04fd306cSNickeau
524cadd4f8SNickeau                $page = $cacheParser->page;
53*04fd306cSNickeau                try {
54*04fd306cSNickeau                    $markupFetcher = MarkupPath::createMarkupFromId($page)->createHtmlFetcherWithRequestedPathAsContextPath();
55*04fd306cSNickeau                } catch (ExceptionNotExists $e) {
56*04fd306cSNickeau                    // should not happen
57*04fd306cSNickeau                    LogUtility::internalError("The executing path should exist as it's executed",self::CANONICAL, $e);
58*04fd306cSNickeau                    return;
59*04fd306cSNickeau                }
604cadd4f8SNickeau
614cadd4f8SNickeau                /**
624cadd4f8SNickeau                 * @var CacheParser[] $cacheStores
634cadd4f8SNickeau                 */
64*04fd306cSNickeau                $cacheStores = [$markupFetcher->getSnippetCacheStore(), $markupFetcher->getDependenciesCacheStore()];
654cadd4f8SNickeau                foreach ($cacheStores as $cacheStore) {
664cadd4f8SNickeau                    if (file_exists($cacheStore->cache)) {
674cadd4f8SNickeau                        $this->cacheResults[$cacheStore->mode] = (new CacheResult($cacheStore))
684cadd4f8SNickeau                            ->setResult($event->result);
694cadd4f8SNickeau                    }
704cadd4f8SNickeau                }
71*04fd306cSNickeau
724cadd4f8SNickeau            }
734cadd4f8SNickeau        }
744cadd4f8SNickeau    }
754cadd4f8SNickeau
764cadd4f8SNickeau    /**
774cadd4f8SNickeau     * @return CacheResult[]
784cadd4f8SNickeau     */
794cadd4f8SNickeau    public function getResults(): array
804cadd4f8SNickeau    {
814cadd4f8SNickeau        return $this->cacheResults;
824cadd4f8SNickeau    }
834cadd4f8SNickeau
844cadd4f8SNickeau    public function hasResultForMode($mode): bool
854cadd4f8SNickeau    {
864cadd4f8SNickeau        return isset($this->cacheResults[$mode]);
874cadd4f8SNickeau    }
884cadd4f8SNickeau
894cadd4f8SNickeau    /**
904cadd4f8SNickeau     * @param string $mode
914cadd4f8SNickeau     * @return null|CacheResult
924cadd4f8SNickeau     */
934cadd4f8SNickeau    public function getResultForMode(string $mode): ?CacheResult
944cadd4f8SNickeau    {
954cadd4f8SNickeau        return $this->cacheResults[$mode];
964cadd4f8SNickeau    }
974cadd4f8SNickeau
98*04fd306cSNickeau    /**
99*04fd306cSNickeau     * @return string
100*04fd306cSNickeau     */
101*04fd306cSNickeau    public function getWikiId(): string
102*04fd306cSNickeau    {
103*04fd306cSNickeau        return $this->wikiId;
104*04fd306cSNickeau    }
105*04fd306cSNickeau
1064cadd4f8SNickeau}
107