Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 1
<?php
2
 
3
/**
4
 * Smarty Resource Data Object
5
 * Meta Data Container for Template Files
6
 *
7
 * @package    Smarty
8
 * @subpackage TemplateResources
9
 * @author     Rodney Rehm
10
 */
11
class Smarty_Template_Source
12
{
13
    /**
14
     * Unique Template ID
15
     *
16
     * @var string
17
     */
18
    public $uid = null;
19
 
20
    /**
21
     * Template Resource (Smarty_Internal_Template::$template_resource)
22
     *
23
     * @var string
24
     */
25
    public $resource = null;
26
 
27
    /**
28
     * Resource Type
29
     *
30
     * @var string
31
     */
32
    public $type = null;
33
 
34
    /**
35
     * Resource Name
36
     *
37
     * @var string
38
     */
39
    public $name = null;
40
 
41
    /**
42
     * Source Filepath
43
     *
44
     * @var string
45
     */
46
    public $filepath = null;
47
 
48
    /**
49
     * Source Timestamp
50
     *
51
     * @var integer
52
     */
53
    public $timestamp = null;
54
 
55
    /**
56
     * Source Existence
57
     *
58
     * @var boolean
59
     */
60
    public $exists = false;
61
 
62
    /**
63
     * Source File Base name
64
     *
65
     * @var string
66
     */
67
    public $basename = null;
68
 
69
    /**
70
     * The Components an extended template is made of
71
     *
72
     * @var \Smarty_Template_Source[]
73
     */
74
    public $components = null;
75
 
76
    /**
77
     * Resource Handler
78
     *
79
     * @var \Smarty_Resource
80
     */
81
    public $handler = null;
82
 
83
    /**
84
     * Smarty instance
85
     *
86
     * @var Smarty
87
     */
88
    public $smarty = null;
89
 
90
    /**
91
     * Resource is source
92
     *
93
     * @var bool
94
     */
95
    public $isConfig = false;
96
 
97
    /**
98
     * Template source content eventually set by default handler
99
     *
100
     * @var string
101
     */
102
    public $content = null;
103
 
104
    /**
105
     * Name of the Class to compile this resource's contents with
106
     *
107
     * @var string
108
     */
109
    public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler';
110
 
111
    /**
112
     * Name of the Class to tokenize this resource's contents with
113
     *
114
     * @var string
115
     */
116
    public $template_lexer_class = 'Smarty_Internal_Templatelexer';
117
 
118
    /**
119
     * Name of the Class to parse this resource's contents with
120
     *
121
     * @var string
122
     */
123
    public $template_parser_class = 'Smarty_Internal_Templateparser';
124
 
125
    /**
126
     * create Source Object container
127
     *
128
     * @param Smarty $smarty   Smarty instance this source object belongs to
129
     * @param string $resource full template_resource
130
     * @param string $type     type of resource
131
     * @param string $name     resource name
132
     *
133
     * @throws   \SmartyException
134
     * @internal param \Smarty_Resource $handler Resource Handler this source object communicates with
135
     */
136
    public function __construct(Smarty $smarty, $resource, $type, $name)
137
    {
138
        $this->handler =
139
            isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] :
140
                Smarty_Resource::load($smarty, $type);
141
        $this->smarty = $smarty;
142
        $this->resource = $resource;
143
        $this->type = $type;
144
        $this->name = $name;
145
    }
146
 
147
    /**
148
     * initialize Source Object for given resource
149
     * Either [$_template] or [$smarty, $template_resource] must be specified
150
     *
151
     * @param Smarty_Internal_Template $_template         template object
152
     * @param Smarty                   $smarty            smarty object
153
     * @param string                   $template_resource resource identifier
154
     *
155
     * @return Smarty_Template_Source Source Object
156
     * @throws SmartyException
157
     */
158
    public static function load(
159
        Smarty_Internal_Template $_template = null,
160
        Smarty $smarty = null,
161
        $template_resource = null
162
    ) {
163
        if ($_template) {
164
            $smarty = $_template->smarty;
165
            $template_resource = $_template->template_resource;
166
        }
167
        if (empty($template_resource)) {
168
            throw new SmartyException('Source: Missing  name');
169
        }
170
        // parse resource_name, load resource handler, identify unique resource name
171
        if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) {
172
            $type = $match[ 1 ];
173
            $name = $match[ 2 ];
174
        } else {
175
            // no resource given, use default
176
            // or single character before the colon is not a resource type, but part of the filepath
177
            $type = $smarty->default_resource_type;
178
            $name = $template_resource;
179
        }
180
        // create new source  object
181
        $source = new Smarty_Template_Source($smarty, $template_resource, $type, $name);
182
        $source->handler->populate($source, $_template);
183
        if (!$source->exists && isset($_template->smarty->default_template_handler_func)) {
184
            Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
185
            $source->handler->populate($source, $_template);
186
        }
187
        return $source;
188
    }
189
 
190
    /**
191
     * Get source time stamp
192
     *
193
     * @return int
194
     */
195
    public function getTimeStamp()
196
    {
197
        if (!isset($this->timestamp)) {
198
            $this->handler->populateTimestamp($this);
199
        }
200
        return $this->timestamp;
201
    }
202
 
203
    /**
204
     * Get source content
205
     *
206
     * @return string
207
     * @throws \SmartyException
208
     */
209
    public function getContent()
210
    {
211
        return isset($this->content) ? $this->content : $this->handler->getContent($this);
212
    }
213
}