1: <?php
2:
3: /**
4: * Smarty Template Resource Base Object
5: *
6: * @package Smarty
7: * @subpackage TemplateResources
8: * @author Rodney Rehm
9: */
10: abstract class Smarty_Template_Resource_Base
11: {
12: /**
13: * Compiled Filepath
14: *
15: * @var string
16: */
17: public $filepath = null;
18:
19: /**
20: * Compiled Timestamp
21: *
22: * @var integer|bool
23: */
24: public $timestamp = false;
25:
26: /**
27: * Compiled Existence
28: *
29: * @var boolean
30: */
31: public $exists = false;
32:
33: /**
34: * Template Compile Id (Smarty_Internal_Template::$compile_id)
35: *
36: * @var string
37: */
38: public $compile_id = null;
39:
40: /**
41: * Compiled Content Loaded
42: *
43: * @var boolean
44: */
45: public $processed = false;
46:
47: /**
48: * unique function name for compiled template code
49: *
50: * @var string
51: */
52: public $unifunc = '';
53:
54: /**
55: * flag if template does contain nocache code sections
56: *
57: * @var bool
58: */
59: public $has_nocache_code = false;
60:
61: /**
62: * resource file dependency
63: *
64: * @var array
65: */
66: public $file_dependency = array();
67:
68: /**
69: * Content buffer
70: *
71: * @var string
72: */
73: public $content = null;
74:
75: /**
76: * Included sub templates
77: * - index name
78: * - value use count
79: *
80: * @var int[]
81: */
82: public $includes = array();
83:
84: /**
85: * Flag if this is a cache resource
86: *
87: * @var bool
88: */
89: public $isCache = false;
90:
91: /**
92: * Process resource
93: *
94: * @param Smarty_Internal_Template $_template template object
95: */
96: abstract public function process(Smarty_Internal_Template $_template);
97:
98: /**
99: * get rendered template content by calling compiled or cached template code
100: *
101: * @param \Smarty_Internal_Template $_template
102: * @param string $unifunc function with template code
103: *
104: * @throws \Exception
105: */
106: public function getRenderedTemplateCode(Smarty_Internal_Template $_template, $unifunc = null)
107: {
108: $smarty = &$_template->smarty;
109: $_template->isRenderingCache = $this->isCache;
110: $level = ob_get_level();
111: try {
112: if (!isset($unifunc)) {
113: $unifunc = $this->unifunc;
114: }
115: if (empty($unifunc) || !function_exists($unifunc)) {
116: throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
117: }
118: if ($_template->startRenderCallbacks) {
119: foreach ($_template->startRenderCallbacks as $callback) {
120: call_user_func($callback, $_template);
121: }
122: }
123: $unifunc($_template);
124: foreach ($_template->endRenderCallbacks as $callback) {
125: call_user_func($callback, $_template);
126: }
127: $_template->isRenderingCache = false;
128: } catch (Exception $e) {
129: $_template->isRenderingCache = false;
130: while (ob_get_level() > $level) {
131: ob_end_clean();
132: }
133: if (isset($smarty->security_policy)) {
134: $smarty->security_policy->endTemplate();
135: }
136: throw $e;
137: }
138: }
139:
140: /**
141: * Get compiled time stamp
142: *
143: * @return int
144: */
145: public function getTimeStamp()
146: {
147: if ($this->exists && !$this->timestamp) {
148: $this->timestamp = filemtime($this->filepath);
149: }
150: return $this->timestamp;
151: }
152: }
153: