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: |