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