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