| 1: | <?php
|
| 2: |
|
| 3: | |
| 4: | |
| 5: | |
| 6: | |
| 7: | |
| 8: | |
| 9: |
|
| 10: | class Smarty_Internal_Runtime_UpdateCache
|
| 11: | {
|
| 12: | |
| 13: | |
| 14: | |
| 15: | |
| 16: | |
| 17: | |
| 18: |
|
| 19: | public function cacheModifiedCheck(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content)
|
| 20: | {
|
| 21: | }
|
| 22: |
|
| 23: | |
| 24: | |
| 25: | |
| 26: | |
| 27: | |
| 28: | |
| 29: | |
| 30: | |
| 31: |
|
| 32: | public function updateCache(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $no_output_filter)
|
| 33: | {
|
| 34: | ob_start();
|
| 35: | if (!isset($_template->compiled)) {
|
| 36: | $_template->loadCompiled();
|
| 37: | }
|
| 38: | $_template->compiled->render($_template);
|
| 39: | if ($_template->smarty->debugging) {
|
| 40: | $_template->smarty->_debug->start_cache($_template);
|
| 41: | }
|
| 42: | $this->removeNoCacheHash($cached, $_template, $no_output_filter);
|
| 43: | $compile_check = (int)$_template->compile_check;
|
| 44: | $_template->compile_check = Smarty::COMPILECHECK_OFF;
|
| 45: | if ($_template->_isSubTpl()) {
|
| 46: | $_template->compiled->unifunc = $_template->parent->compiled->unifunc;
|
| 47: | }
|
| 48: | if (!$_template->cached->processed) {
|
| 49: | $_template->cached->process($_template, true);
|
| 50: | }
|
| 51: | $_template->compile_check = $compile_check;
|
| 52: | $cached->getRenderedTemplateCode($_template);
|
| 53: | if ($_template->smarty->debugging) {
|
| 54: | $_template->smarty->_debug->end_cache($_template);
|
| 55: | }
|
| 56: | }
|
| 57: |
|
| 58: | |
| 59: | |
| 60: | |
| 61: | |
| 62: | |
| 63: | |
| 64: | |
| 65: | |
| 66: |
|
| 67: | public function removeNoCacheHash(
|
| 68: | Smarty_Template_Cached $cached,
|
| 69: | Smarty_Internal_Template $_template,
|
| 70: | $no_output_filter
|
| 71: | ) {
|
| 72: | $php_pattern = '/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/';
|
| 73: | $content = ob_get_clean();
|
| 74: | $hash_array = $cached->hashes;
|
| 75: | $hash_array[ $_template->compiled->nocache_hash ] = true;
|
| 76: | $hash_array = array_keys($hash_array);
|
| 77: | $nocache_hash = '(' . implode('|', $hash_array) . ')';
|
| 78: | $_template->cached->has_nocache_code = false;
|
| 79: |
|
| 80: | $cache_split =
|
| 81: | preg_split(
|
| 82: | "!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
|
| 83: | $content
|
| 84: | );
|
| 85: |
|
| 86: | preg_match_all(
|
| 87: | "!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
|
| 88: | $content,
|
| 89: | $cache_parts
|
| 90: | );
|
| 91: | $content = '';
|
| 92: |
|
| 93: | foreach ($cache_split as $curr_idx => $curr_split) {
|
| 94: | if (preg_match($php_pattern, $curr_split)) {
|
| 95: |
|
| 96: | $php_split = preg_split(
|
| 97: | $php_pattern,
|
| 98: | $curr_split
|
| 99: | );
|
| 100: | preg_match_all(
|
| 101: | $php_pattern,
|
| 102: | $curr_split,
|
| 103: | $php_parts
|
| 104: | );
|
| 105: | foreach ($php_split as $idx_php => $curr_php) {
|
| 106: | $content .= $curr_php;
|
| 107: | if (isset($php_parts[ 0 ][ $idx_php ])) {
|
| 108: | $content .= "<?php echo '{$php_parts[ 1 ][ $idx_php ]}'; ?>\n";
|
| 109: | }
|
| 110: | }
|
| 111: | } else {
|
| 112: | $content .= $curr_split;
|
| 113: | }
|
| 114: | if (isset($cache_parts[ 0 ][ $curr_idx ])) {
|
| 115: | $_template->cached->has_nocache_code = true;
|
| 116: | $content .= $cache_parts[ 2 ][ $curr_idx ];
|
| 117: | }
|
| 118: | }
|
| 119: | if (!$no_output_filter && !$_template->cached->has_nocache_code
|
| 120: | && (isset($_template->smarty->autoload_filters[ 'output' ])
|
| 121: | || isset($_template->smarty->registered_filters[ 'output' ]))
|
| 122: | ) {
|
| 123: | $content = $_template->smarty->ext->_filterHandler->runFilter('output', $content, $_template);
|
| 124: | }
|
| 125: |
|
| 126: | $this->writeCachedContent($_template, $content);
|
| 127: | }
|
| 128: |
|
| 129: | |
| 130: | |
| 131: | |
| 132: | |
| 133: | |
| 134: | |
| 135: | |
| 136: |
|
| 137: | public function writeCachedContent(Smarty_Internal_Template $_template, $content)
|
| 138: | {
|
| 139: | if ($_template->source->handler->recompiled || !$_template->caching
|
| 140: | ) {
|
| 141: |
|
| 142: | return false;
|
| 143: | }
|
| 144: | if (!isset($_template->cached)) {
|
| 145: | $_template->loadCached();
|
| 146: | }
|
| 147: | $content = $_template->smarty->ext->_codeFrame->create($_template, $content, '', true);
|
| 148: | return $this->write($_template, $content);
|
| 149: | }
|
| 150: |
|
| 151: | |
| 152: | |
| 153: | |
| 154: | |
| 155: | |
| 156: | |
| 157: | |
| 158: |
|
| 159: | public function write(Smarty_Internal_Template $_template, $content)
|
| 160: | {
|
| 161: | if (!$_template->source->handler->recompiled) {
|
| 162: | $cached = $_template->cached;
|
| 163: | if ($cached->handler->writeCachedContent($_template, $content)) {
|
| 164: | $cached->content = null;
|
| 165: | $cached->timestamp = time();
|
| 166: | $cached->exists = true;
|
| 167: | $cached->valid = true;
|
| 168: | $cached->cache_lifetime = $_template->cache_lifetime;
|
| 169: | $cached->processed = false;
|
| 170: | if ($_template->smarty->cache_locking) {
|
| 171: | $cached->handler->releaseLock($_template->smarty, $cached);
|
| 172: | }
|
| 173: | return true;
|
| 174: | }
|
| 175: | $cached->content = null;
|
| 176: | $cached->timestamp = false;
|
| 177: | $cached->exists = false;
|
| 178: | $cached->valid = false;
|
| 179: | $cached->processed = false;
|
| 180: | }
|
| 181: | return false;
|
| 182: | }
|
| 183: | }
|
| 184: | |