/** * create Cached Object container * * @param Smurty_Internal_Template $_template template object */ public function __construct(Smurty_Internal_Template $_template) { $this->compile_id = $_template->compile_id; $this->cache_id = $_template->cache_id; $this->source = $_template->source; $_template->cached = $this; $smurty = $_template->smurty; // // load resource handler // $this->handler = $handler = Smurty_CacheResource::load($smurty); // Note: prone to circular references // // check if cache is valid // if (!($_template->caching == hiweb_tpl::CACHING_LIFETIME_CURRENT || $_template->caching == hiweb_tpl::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) { $handler->populate($this, $_template); return; } while (true) { while (true) { $handler->populate($this, $_template); if ($this->timestamp === false || $smurty->force_compile || $smurty->force_cache) { $this->valid = false; } else { $this->valid = true; } if ($this->valid && $_template->caching == hiweb_tpl::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > $this->timestamp + $_template->cache_lifetime) { // lifetime expired $this->valid = false; } if ($this->valid || !$_template->smurty->cache_locking) { break; } if (!$this->handler->locked($_template->smurty, $this)) { $this->handler->acquireLock($_template->smurty, $this); break 2; } } if ($this->valid) { if (!$_template->smurty->cache_locking || $this->handler->locked($_template->smurty, $this) === null) { // load cache file for the following checks if ($smurty->debugging) { Smurty_Internal_Debug::start_cache($_template); } if ($handler->process($_template, $this) === false) { $this->valid = false; } else { $this->processed = true; } if ($smurty->debugging) { Smurty_Internal_Debug::end_cache($_template); } } else { continue; } } else { return; } if ($this->valid && $_template->caching === hiweb_tpl::CACHING_LIFETIME_SAVED && $_template->properties['cache_lifetime'] >= 0 && time() > $_template->cached->timestamp + $_template->properties['cache_lifetime']) { $this->valid = false; } if (!$this->valid && $_template->smurty->cache_locking) { $this->handler->acquireLock($_template->smurty, $this); return; } else { return; } } }
/** * Empty cache for a specific template * * @param string $template_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param integer $exp_time expiration time * @param string $type resource type * * @return integer number of cache files deleted */ public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) { // load cache resource and call clear $_cache_resource = Smurty_CacheResource::load($this, $type); Smurty_CacheResource::invalidLoadedCache($this); return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time); }