used = false; } /** * Finishes template parsing. * @return array(prolog, epilog) */ public function finalize() { if ($this->used) { return ['Nette\Bridges\CacheLatte\CacheMacro::initRuntime($this);']; } } /** * New node is found. * @return bool */ public function nodeOpened(Latte\MacroNode $node) { if ($node->modifiers) { throw new Latte\CompileException('Modifiers are not allowed in ' . $node->getNotation()); } $this->used = true; $node->empty = false; $node->openingCode = Latte\PhpWriter::using($node) ->write( 'global->cacheStorage, %var, $this->global->cacheStack, %node.array?)) /* line %var */ try { ?>', Nette\Utils\Random::generate(), $node->startLine, ); } /** * Node is closed. * @return void */ public function nodeClosed(Latte\MacroNode $node) { $node->closingCode = Latte\PhpWriter::using($node) ->write( "global->cacheStack, %node.array?) /* line %var */;\n\t\t\t\t} catch (\Throwable $ʟ_e) {\n\t\t\t\t\tNette\Bridges\CacheLatte\CacheMacro::rollback($this->global->cacheStack); throw $ʟ_e;\n\t\t\t\t} ?>", $node->startLine, ); } public static function initRuntime(Latte\Runtime\Template $template): void { if (!empty($template->global->cacheStack)) { $file = (new \ReflectionClass($template))->getFileName(); if (@is_file($file)) { // @ - may trigger error end($template->global->cacheStack)->dependencies[Cache::Files][] = $file; } } } /** * Starts the output cache. Returns Nette\Caching\OutputHelper object if buffering was started. */ public static function createCache( Nette\Caching\Storage $cacheStorage, string $key, ?array &$parents, ?array $args = null, ): Nette\Caching\OutputHelper|\stdClass|null { if ($args) { if (array_key_exists('if', $args) && !$args['if']) { return $parents[] = new \stdClass; } $key = array_merge([$key], array_intersect_key($args, range(0, count($args)))); } if ($parents) { end($parents)->dependencies[Cache::Items][] = $key; } $cache = new Cache($cacheStorage, 'Nette.Templating.Cache'); if ($helper = $cache->capture($key)) { $parents[] = $helper; } return $helper; } /** * Ends the output cache. * @param Nette\Caching\OutputHelper[] $parents */ public static function endCache(array &$parents, ?array $args = null): void { $helper = array_pop($parents); if (!$helper instanceof Nette\Caching\OutputHelper) { return; } if (isset($args['dependencies'])) { $args += $args['dependencies'](); } if (isset($args['expire'])) { $args['expiration'] = $args['expire']; // back compatibility } $helper->dependencies[Cache::Tags] = $args['tags'] ?? null; $helper->dependencies[Cache::Expire] = $args['expiration'] ?? '+ 7 days'; $helper->end(); } /** * @param Nette\Caching\OutputHelper[] $parents */ public static function rollback(array &$parents): void { $helper = array_pop($parents); if ($helper instanceof Nette\Caching\OutputHelper) { $helper->rollback(); } } } __halt_compiler();----SIGNATURE:----PGhM5NTDN5VkqAxf+IXxcR2sj+flUvFQDhD0HUBlli9CSd+BMPy+n2AXyh3Pj1RWqFynrLKBo7FkXQCvJExekUMgh9IIejA4Osm5uM9G6ymocGCFStkIsE8eytnnA8eyQ1srdHZvqefclQvffLNUgq/PVFfAePhAPUM9hJHTVQx9JRKgQa3Wb8MmsT0zhKOwYFHHPl/oEOp+UhtK5LcqaOiRWltj/JLI0mG4LlQzLKt708qMdxQJNyWizmhCrWisOULZRFefnvQ2D0oZ384mEcnVgfj03jBzph1JJcRqFlkSCXikh5YCNhCs3xLj1Ci4INvvDVbKA9ZwWW6wZXGu2B2bbmM2zc6QRgpSokBEia06joHRkTxD9UhfJEmwAusC++Jn2WsUHieJGv6rKKGecFbegofyBsVqOsw5E9ZwTjZbT7e6CQyGoLg2AEqfgI12GDO9PudvqE+9YAGBmhxUUJMqPfRo0a4PVKIOKmrHbHYAxfyWnV9vlGrCULIdu5Lf1TQz6YvBHuD9jLeuhIQZlPl4M0OtAI7bEB1LtuzX3w9/Ys5YD2Mak1dfA8gEq1j4UojeaL7t2Q7e2V0/IweHPGLChlHp6NOZy28MGMG/43tkXFcb/wqnQLFB9Sxjw7rRgvJL6joK4d26TQcpkgAwfTCydtB052M8/g7Wp8R9dSo=----ATTACHMENT:----ODU2MjcxOTUwMTg3ODg2NSA2MjA2NTA2NzcyNzQ1NTM1IDEzNzAzNjQyNzg1NjkyOTI=