1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeau 4*37748cd8SNickeaunamespace ComboStrap; 5*37748cd8SNickeau 6*37748cd8SNickeau 7*37748cd8SNickeauuse dokuwiki\Cache\CacheParser; 8*37748cd8SNickeau 9*37748cd8SNickeauclass CacheManager 10*37748cd8SNickeau{ 11*37748cd8SNickeau 12*37748cd8SNickeau /** 13*37748cd8SNickeau * The meta key that has the expiration date 14*37748cd8SNickeau */ 15*37748cd8SNickeau const DATE_CACHE_EXPIRATION_META_KEY = "date_cache_expiration"; 16*37748cd8SNickeau const RESULT_STATUS = 'result'; 17*37748cd8SNickeau const DATE_MODIFIED = 'ftime'; 18*37748cd8SNickeau 19*37748cd8SNickeau /** 20*37748cd8SNickeau * Just an utility variable to tracks the slot processed 21*37748cd8SNickeau * @var array the processed slot 22*37748cd8SNickeau */ 23*37748cd8SNickeau private $cacheDataBySlots = array(); 24*37748cd8SNickeau 25*37748cd8SNickeau 26*37748cd8SNickeau /** 27*37748cd8SNickeau * @return CacheManager 28*37748cd8SNickeau */ 29*37748cd8SNickeau public static function get() 30*37748cd8SNickeau { 31*37748cd8SNickeau global $comboCacheManagerScript; 32*37748cd8SNickeau if (empty($comboCacheManagerScript)) { 33*37748cd8SNickeau self::init(); 34*37748cd8SNickeau } 35*37748cd8SNickeau return $comboCacheManagerScript; 36*37748cd8SNickeau } 37*37748cd8SNickeau 38*37748cd8SNickeau public static function init() 39*37748cd8SNickeau { 40*37748cd8SNickeau global $comboCacheManagerScript; 41*37748cd8SNickeau $comboCacheManagerScript = new CacheManager(); 42*37748cd8SNickeau 43*37748cd8SNickeau } 44*37748cd8SNickeau 45*37748cd8SNickeau /** 46*37748cd8SNickeau * In test, we may run more than once 47*37748cd8SNickeau * This function delete the cache manager 48*37748cd8SNickeau * and is called when Dokuwiki close (ie {@link \action_plugin_combo_cache::close()}) 49*37748cd8SNickeau */ 50*37748cd8SNickeau public static function close() 51*37748cd8SNickeau { 52*37748cd8SNickeau 53*37748cd8SNickeau global $comboCacheManagerScript; 54*37748cd8SNickeau unset($comboCacheManagerScript); 55*37748cd8SNickeau 56*37748cd8SNickeau } 57*37748cd8SNickeau 58*37748cd8SNickeau /** 59*37748cd8SNickeau * Keep track of the parsed bar (ie page in page) 60*37748cd8SNickeau * @param $pageId 61*37748cd8SNickeau * @param $result 62*37748cd8SNickeau * @param CacheParser $cacheParser 63*37748cd8SNickeau */ 64*37748cd8SNickeau public function addSlot($pageId, $result, $cacheParser) 65*37748cd8SNickeau { 66*37748cd8SNickeau if (!isset($this->cacheDataBySlots[$pageId])) { 67*37748cd8SNickeau $this->cacheDataBySlots[$pageId] = []; 68*37748cd8SNickeau } 69*37748cd8SNickeau /** 70*37748cd8SNickeau * Metadata and other rendering may occurs 71*37748cd8SNickeau * recursively in one request 72*37748cd8SNickeau * 73*37748cd8SNickeau * We record only the first one because the second call one will use the first 74*37748cd8SNickeau * one 75*37748cd8SNickeau */ 76*37748cd8SNickeau if (!isset($this->cacheDataBySlots[$pageId][$cacheParser->mode])) { 77*37748cd8SNickeau $date = null; 78*37748cd8SNickeau if(file_exists($cacheParser->cache)){ 79*37748cd8SNickeau $date = Iso8601Date::createFromTimestamp(filemtime($cacheParser->cache))->getDateTime(); 80*37748cd8SNickeau } 81*37748cd8SNickeau $this->cacheDataBySlots[$pageId][$cacheParser->mode] = [ 82*37748cd8SNickeau self::RESULT_STATUS => $result, 83*37748cd8SNickeau self::DATE_MODIFIED => $date 84*37748cd8SNickeau ]; 85*37748cd8SNickeau } 86*37748cd8SNickeau 87*37748cd8SNickeau } 88*37748cd8SNickeau 89*37748cd8SNickeau public function getXhtmlRenderCacheSlotResults() 90*37748cd8SNickeau { 91*37748cd8SNickeau $xhtmlRenderResult = []; 92*37748cd8SNickeau foreach ($this->cacheDataBySlots as $pageId => $modes) { 93*37748cd8SNickeau foreach($modes as $mode => $values) { 94*37748cd8SNickeau if ($mode === "xhtml") { 95*37748cd8SNickeau $xhtmlRenderResult[$pageId] = $this->cacheDataBySlots[$pageId][$mode][self::RESULT_STATUS]; 96*37748cd8SNickeau } 97*37748cd8SNickeau } 98*37748cd8SNickeau } 99*37748cd8SNickeau return $xhtmlRenderResult; 100*37748cd8SNickeau } 101*37748cd8SNickeau 102*37748cd8SNickeau public function getCacheSlotResults() 103*37748cd8SNickeau { 104*37748cd8SNickeau 105*37748cd8SNickeau return $this->cacheDataBySlots; 106*37748cd8SNickeau } 107*37748cd8SNickeau 108*37748cd8SNickeau public function isCacheLogPresent($pageId, $mode) 109*37748cd8SNickeau { 110*37748cd8SNickeau return isset($this->cacheDataBySlots[$pageId][$mode]); 111*37748cd8SNickeau } 112*37748cd8SNickeau 113*37748cd8SNickeau 114*37748cd8SNickeau} 115