From 7085a0c2f7104a56a7e946c43ba0b5736be5f4e7 Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 27 Dec 2016 14:47:01 +0100 Subject: * smarty bundled --- .../sysplugins/smarty_internal_runtime_capture.php | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 lib/smarty3/sysplugins/smarty_internal_runtime_capture.php (limited to 'lib/smarty3/sysplugins/smarty_internal_runtime_capture.php') diff --git a/lib/smarty3/sysplugins/smarty_internal_runtime_capture.php b/lib/smarty3/sysplugins/smarty_internal_runtime_capture.php new file mode 100644 index 0000000..69f1ce0 --- /dev/null +++ b/lib/smarty3/sysplugins/smarty_internal_runtime_capture.php @@ -0,0 +1,161 @@ +isRegistered) { + $this->register($_template); + } + $this->captureStack[] = array($buffer, $assign, $append); + $this->captureCount ++; + ob_start(); + } + + /** + * Register callbacks in template class + * + * @param \Smarty_Internal_Template $_template + */ + private function register(Smarty_Internal_Template $_template) + { + $_template->startRenderCallbacks[] = array($this, 'startRender'); + $_template->endRenderCallbacks[] = array($this, 'endRender'); + $this->startRender($_template); + $this->isRegistered = true; + } + + /** + * Start render callback + * + * @param \Smarty_Internal_Template $_template + */ + public function startRender(Smarty_Internal_Template $_template) + { + $this->countStack[] = $this->captureCount; + $this->captureCount = 0; + } + + /** + * Close capture section + * + * @param \Smarty_Internal_Template $_template + * + * @throws \SmartyException + */ + public function close(Smarty_Internal_Template $_template) + { + if ($this->captureCount) { + list($buffer, $assign, $append) = array_pop($this->captureStack); + $this->captureCount --; + if (isset($assign)) { + $_template->assign($assign, ob_get_contents()); + } + if (isset($append)) { + $_template->append($append, ob_get_contents()); + } + $this->namedBuffer[ $buffer ] = ob_get_clean(); + } else { + $this->error($_template); + } + } + + /** + * Error exception on not matching {capture}{/capture} + * + * @param \Smarty_Internal_Template $_template + * + * @throws \SmartyException + */ + public function error(Smarty_Internal_Template $_template) + { + throw new SmartyException("Not matching {capture}{/capture} in \"{$_template->template_resource}\""); + } + + /** + * Return content of named capture buffer + * + * @param \Smarty_Internal_Template $_template + * @param $name + * + * @return null + */ + public function getBuffer(Smarty_Internal_Template $_template, $name) + { + return isset($this->namedBuffer[ $name ]) ? $this->namedBuffer[ $name ] : null; + } + + /** + * End render callback + * + * @param \Smarty_Internal_Template $_template + * + * @throws \SmartyException + */ + public function endRender(Smarty_Internal_Template $_template) + { + if ($this->captureCount) { + $this->error($_template); + } else { + $this->captureCount = array_pop($this->countStack); + } + } + +} \ No newline at end of file -- cgit v1.2.3