Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 1
<?php
2
/**
3
 * Smarty Internal Plugin Resource Extends
4
 *
5
 * @package    Smarty
6
 * @subpackage TemplateResources
7
 * @author     Uwe Tews
8
 * @author     Rodney Rehm
9
 */
10
 
11
/**
12
 * Smarty Internal Plugin Resource Extends
13
 * Implements the file system as resource for Smarty which {extend}s a chain of template files templates
14
 *
15
 * @package    Smarty
16
 * @subpackage TemplateResources
17
 */
18
class Smarty_Internal_Resource_Extends extends Smarty_Resource
19
{
20
    /**
21
     * mbstring.overload flag
22
     *
23
     * @var int
24
     */
25
    public $mbstring_overload = 0;
26
 
27
    /**
28
     * populate Source Object with meta data from Resource
29
     *
30
     * @param Smarty_Template_Source   $source    source object
31
     * @param Smarty_Internal_Template $_template template object
32
     *
33
     * @throws SmartyException
34
     */
35
    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
36
    {
37
        $uid = '';
38
        $sources = array();
39
        $components = explode('|', $source->name);
40
        $smarty = &$source->smarty;
41
        $exists = true;
42
        foreach ($components as $component) {
43
            /* @var \Smarty_Template_Source $_s */
44
            $_s = Smarty_Template_Source::load(null, $smarty, $component);
45
            if ($_s->type === 'php') {
46
                throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
47
            }
48
            $sources[ $_s->uid ] = $_s;
49
            $uid .= $_s->filepath;
50
            if ($_template) {
51
                $exists = $exists && $_s->exists;
52
            }
53
        }
54
        $source->components = $sources;
55
        $source->filepath = $_s->filepath;
56
        $source->uid = sha1($uid . $source->smarty->_joined_template_dir);
57
        $source->exists = $exists;
58
        if ($_template) {
59
            $source->timestamp = $_s->timestamp;
60
        }
61
    }
62
 
63
    /**
64
     * populate Source Object with timestamp and exists from Resource
65
     *
66
     * @param Smarty_Template_Source $source source object
67
     */
68
    public function populateTimestamp(Smarty_Template_Source $source)
69
    {
70
        $source->exists = true;
71
        /* @var \Smarty_Template_Source $_s */
72
        foreach ($source->components as $_s) {
73
            $source->exists = $source->exists && $_s->exists;
74
        }
75
        $source->timestamp = $source->exists ? $_s->getTimeStamp() : false;
76
    }
77
 
78
    /**
79
     * Load template's source from files into current template object
80
     *
81
     * @param Smarty_Template_Source $source source object
82
     *
83
     * @return string template source
84
     * @throws SmartyException if source cannot be loaded
85
     */
86
    public function getContent(Smarty_Template_Source $source)
87
    {
88
        if (!$source->exists) {
89
            throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'");
90
        }
91
        $_components = array_reverse($source->components);
92
        $_content = '';
93
        /* @var \Smarty_Template_Source $_s */
94
        foreach ($_components as $_s) {
95
            // read content
96
            $_content .= $_s->getContent();
97
        }
98
        return $_content;
99
    }
100
 
101
    /**
102
     * Determine basename for compiled filename
103
     *
104
     * @param Smarty_Template_Source $source source object
105
     *
106
     * @return string resource's basename
107
     */
108
    public function getBasename(Smarty_Template_Source $source)
109
    {
110
        return str_replace(':', '.', basename($source->filepath));
111
    }
112
 
113
    /*
114
      * Disable timestamp checks for extends resource.
115
      * The individual source components will be checked.
116
      *
117
      * @return bool
118
      */
119
    /**
120
     * @return bool
121
     */
122
    public function checkTimestamps()
123
    {
124
        return false;
125
    }
126
}