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