14cadd4f8SNickeau<?php 24cadd4f8SNickeau 34cadd4f8SNickeau 44cadd4f8SNickeaunamespace ComboStrap; 54cadd4f8SNickeau 64cadd4f8SNickeau 7*04fd306cSNickeauuse ComboStrap\Xml\XmlDocument; 8*04fd306cSNickeau 94cadd4f8SNickeauclass CacheReportHtmlDataBlockArray 104cadd4f8SNickeau{ 114cadd4f8SNickeau 124cadd4f8SNickeau const RESULT_STATUS = 'result'; 134cadd4f8SNickeau const DATE_MODIFIED = 'mtime'; 144cadd4f8SNickeau const CACHE_FILE = "file"; 154cadd4f8SNickeau 164cadd4f8SNickeau /** 174cadd4f8SNickeau * Used when the cache data report 184cadd4f8SNickeau * are injected in the page in a json format 194cadd4f8SNickeau */ 204cadd4f8SNickeau public const APPLICATION_COMBO_CACHE_JSON = "application/combo+cache+json"; 214cadd4f8SNickeau const DEPENDENCY_ATT = "dependency"; 224cadd4f8SNickeau 234cadd4f8SNickeau 244cadd4f8SNickeau /** 254cadd4f8SNickeau * @return array - a array that will be transformed as json HTML data block 264cadd4f8SNickeau * to be included in a HTML page in order to insert cache results in the html page 274cadd4f8SNickeau */ 28*04fd306cSNickeau public static function getFromContext(): array 294cadd4f8SNickeau { 30*04fd306cSNickeau $cacheManager = ExecutionContext::getActualOrCreateFromEnv() 31*04fd306cSNickeau ->getCacheManager(); 324cadd4f8SNickeau $cacheReporters = $cacheManager->getCacheResults(); 334cadd4f8SNickeau $htmlDataBlock = []; 344cadd4f8SNickeau foreach ($cacheReporters as $cacheReporter) { 354cadd4f8SNickeau 36*04fd306cSNickeau $cacheResults = $cacheReporter->getResults(); 37*04fd306cSNickeau foreach ($cacheResults as $result) { 384cadd4f8SNickeau 394cadd4f8SNickeau $modifiedDate = ""; 404cadd4f8SNickeau if ($result->getPath() !== null) { 41*04fd306cSNickeau try { 424cadd4f8SNickeau $modifiedTime = FileSystems::getModifiedTime($result->getPath()); 434cadd4f8SNickeau $modifiedDate = $modifiedTime->format(Iso8601Date::getFormat()); 44*04fd306cSNickeau } catch (ExceptionNotFound $e) { 45*04fd306cSNickeau // the file exists 464cadd4f8SNickeau } 474cadd4f8SNickeau } 484cadd4f8SNickeau $mode = $result->getMode(); 49*04fd306cSNickeau $sourcePath = $result->getMarkupPath()->getPathObject(); 50*04fd306cSNickeau /** 51*04fd306cSNickeau * If this is not a wiki path, we try to transform it as wiki path 52*04fd306cSNickeau * to get a shorter path (ie id) in the report 53*04fd306cSNickeau */ 54*04fd306cSNickeau if (!($sourcePath instanceof WikiPath)) { 554cadd4f8SNickeau try { 56*04fd306cSNickeau $sourcePath = WikiPath::createFromPathObject($sourcePath); 57*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 58*04fd306cSNickeau // could not be transformed as wiki path (missing a drive) 594cadd4f8SNickeau } 60*04fd306cSNickeau } 61*04fd306cSNickeau $cacheFile = $result->getPath(); 62*04fd306cSNickeau try { 63*04fd306cSNickeau $cacheFile = $cacheFile->toWikiPath(); 64*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 65*04fd306cSNickeau LogUtility::error("Cache reporter: The cache file could not be transformed as a wiki path. Error: " . $e->getMessage()); 66*04fd306cSNickeau } 67*04fd306cSNickeau 68*04fd306cSNickeau 694cadd4f8SNickeau $data = [ 704cadd4f8SNickeau self::RESULT_STATUS => $result->getResult(), 714cadd4f8SNickeau self::DATE_MODIFIED => $modifiedDate, 72*04fd306cSNickeau self::CACHE_FILE => $cacheFile->toAbsoluteId() 734cadd4f8SNickeau ]; 744cadd4f8SNickeau 75*04fd306cSNickeau if ($mode === FetcherMarkup::XHTML_MODE) { 76*04fd306cSNickeau try { 77*04fd306cSNickeau $dependencies = FetcherMarkup::createXhtmlMarkupFetcherFromPath($sourcePath, $sourcePath) 78*04fd306cSNickeau ->getOutputCacheDependencies() 794cadd4f8SNickeau ->getDependencies(); 80*04fd306cSNickeau } catch (ExceptionNotExists $e) { 81*04fd306cSNickeau continue; 82*04fd306cSNickeau } 834cadd4f8SNickeau $data[self::DEPENDENCY_ATT] = $dependencies; 844cadd4f8SNickeau } 854cadd4f8SNickeau 86*04fd306cSNickeau $htmlDataBlock[$sourcePath->toAbsoluteId()][$mode] = $data; 874cadd4f8SNickeau 884cadd4f8SNickeau } 894cadd4f8SNickeau 904cadd4f8SNickeau } 914cadd4f8SNickeau return $htmlDataBlock; 924cadd4f8SNickeau } 934cadd4f8SNickeau 944cadd4f8SNickeau 954cadd4f8SNickeau /** 964cadd4f8SNickeau * An utility function to extract the cache data block from test responses 97*04fd306cSNickeau * @param XmlDocument $xmlDom 984cadd4f8SNickeau * @return mixed 99*04fd306cSNickeau * @throws ExceptionCompile 1004cadd4f8SNickeau */ 101*04fd306cSNickeau public static function extractFromHtmlDom(XmlDocument $xmlDom) 1024cadd4f8SNickeau { 103*04fd306cSNickeau $metaCacheMain = $xmlDom->querySelector('script[type="' . CacheReportHtmlDataBlockArray::APPLICATION_COMBO_CACHE_JSON . '"]'); 104*04fd306cSNickeau $cacheJsonTextValue = $metaCacheMain->getNodeValueWithoutCdata(); 105*04fd306cSNickeau return json_decode($cacheJsonTextValue, true); 1064cadd4f8SNickeau } 1074cadd4f8SNickeau} 108