/** * Check if cache is valid, lock cache if required * * @param \Smarty_Internal_Template $_template * * @return bool flag true if cache is valid */ public function isCached(Smarty_Internal_Template $_template) { if ($this->valid !== null) { return $this->valid; } while (true) { while (true) { if ($this->exists === false || $_template->smarty->force_compile || $_template->smarty->force_cache) { $this->valid = false; } else { $this->valid = true; } if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > $this->timestamp + $_template->cache_lifetime) { // lifetime expired $this->valid = false; } if ($this->valid && $_template->smarty->compile_check == 1 && $_template->source->getTimeStamp() > $this->timestamp) { $this->valid = false; } if ($this->valid || !$_template->smarty->cache_locking) { break; } if (!$this->handler->locked($_template->smarty, $this)) { $this->handler->acquireLock($_template->smarty, $this); break 2; } $this->handler->populate($this, $_template); } if ($this->valid) { if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) { // load cache file for the following checks if ($_template->smarty->debugging) { $_template->smarty->_debug->start_cache($_template); } if ($this->handler->process($_template, $this) === false) { $this->valid = false; } else { $this->processed = true; } if ($_template->smarty->debugging) { $_template->smarty->_debug->end_cache($_template); } } else { $this->is_locked = true; continue; } } else { return $this->valid; } if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->cached->cache_lifetime >= 0 && time() > $_template->cached->timestamp + $_template->cached->cache_lifetime) { $this->valid = false; } if ($_template->smarty->cache_locking) { if (!$this->valid) { $this->handler->acquireLock($_template->smarty, $this); } elseif ($this->is_locked) { $this->handler->releaseLock($_template->smarty, $this); } } return $this->valid; } return $this->valid; }
/** * create Cached Object container * * @param Smarty_Internal_Template $_template template object */ public function __construct(Smarty_Internal_Template $_template) { $this->compile_id = $_template->compile_id; $this->cache_id = $_template->cache_id; $this->source = $_template->source; $_template->cached = $this; $smarty = $_template->smarty; // // load resource handler // $this->handler = $handler = Smarty_CacheResource::load($smarty); // Note: prone to circular references // // check if cache is valid // if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) { $handler->populate($this, $_template); return; } while (true) { while (true) { $handler->populate($this, $_template); if ($this->timestamp === false || $smarty->force_compile || $smarty->force_cache) { $this->valid = false; } else { $this->valid = true; } if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > $this->timestamp + $_template->cache_lifetime) { // lifetime expired $this->valid = false; } if ($this->valid || !$_template->smarty->cache_locking) { break; } if (!$this->handler->locked($_template->smarty, $this)) { $this->handler->acquireLock($_template->smarty, $this); break 2; } } if ($this->valid) { if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) { // load cache file for the following checks if ($smarty->debugging) { Smarty_Internal_Debug::start_cache($_template); } if ($handler->process($_template, $this) === false) { $this->valid = false; } else { $this->processed = true; } if ($smarty->debugging) { Smarty_Internal_Debug::end_cache($_template); } } else { continue; } } else { return; } if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->properties['cache_lifetime'] >= 0 && time() > $_template->cached->timestamp + $_template->properties['cache_lifetime']) { $this->valid = false; } if (!$this->valid && $_template->smarty->cache_locking) { $this->handler->acquireLock($_template->smarty, $this); return; } else { return; } } }
/** * Check if cache is valid, lock cache if required * @param \Smarty_Internal_Template $_template * @return bool flag true if cache is valid */ public function isCached(Smarty_Internal_Template $_template) { if ($this->valid !== NULL) { return $this->valid; } while (TRUE) { while (TRUE) { if ($this->exists === FALSE || $_template->smarty->force_compile || $_template->smarty->force_cache) { $this->valid = FALSE; } else { $this->valid = TRUE; } if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > $this->timestamp + $_template->cache_lifetime) { // lifetime expired $this->valid = FALSE; } if ($this->valid && $_template->source->timestamp > $this->timestamp) { $this->valid = FALSE; } if ($this->valid || !$_template->smarty->cache_locking) { break; } if (!$this->handler->locked($_template->smarty, $this)) { $this->handler->acquireLock($_template->smarty, $this); break 2; } $this->handler->populate($this, $_template); } if ($this->valid) { if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === NULL) { // load cache file for the following checks if ($_template->smarty->debugging) { Smarty_Internal_Debug::start_cache($_template); } if ($this->handler->process($_template, $this) === FALSE) { $this->valid = FALSE; } else { $this->processed = TRUE; } if ($_template->smarty->debugging) { Smarty_Internal_Debug::end_cache($_template); } } else { $this->is_locked = TRUE; continue; } } else { return $this->valid; } if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->properties['cache_lifetime'] >= 0 && time() > $_template->cached->timestamp + $_template->properties['cache_lifetime']) { $this->valid = FALSE; } if ($_template->smarty->cache_locking) { if (!$this->valid) { $this->handler->acquireLock($_template->smarty, $this); } elseif ($this->is_locked) { $this->handler->releaseLock($_template->smarty, $this); } } return $this->valid; } return $this->valid; }