Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 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
}