source: trunk/include/smarty/libs/sysplugins/smarty_internal_resource_php.php @ 23485

Last change on this file since 23485 was 23485, checked in by rvelices, 11 years ago

Smarty EOL style LF svn property

  • Property svn:eol-style set to LF
File size: 3.5 KB
Line 
1<?php
2
3/**
4 * Smarty Internal Plugin Resource PHP
5 *
6 * Implements the file system as resource for PHP templates
7 *
8 * @package Smarty
9 * @subpackage TemplateResources
10 * @author Uwe Tews
11 * @author Rodney Rehm
12 */
13class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
14    /**
15     * container for short_open_tag directive's value before executing PHP templates
16     * @var string
17     */
18    protected $short_open_tag;
19
20    /**
21     * Create a new PHP Resource
22     *
23     */
24    public function __construct()
25    {
26        $this->short_open_tag = ini_get( 'short_open_tag' );
27    }
28
29    /**
30     * populate Source Object with meta data from Resource
31     *
32     * @param Smarty_Template_Source $source source object
33     * @param Smarty_Internal_Template $_template template object
34     * @return void
35     */
36    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
37    {
38        $source->filepath = $this->buildFilepath($source, $_template);
39
40        if ($source->filepath !== false) {
41            if (is_object($source->smarty->security_policy)) {
42                $source->smarty->security_policy->isTrustedResourceDir($source->filepath);
43            }
44
45            $source->uid = sha1($source->filepath);
46            if ($source->smarty->compile_check) {
47                $source->timestamp = @filemtime($source->filepath);
48                $source->exists = !!$source->timestamp;
49            }
50        }
51    }
52
53    /**
54     * populate Source Object with timestamp and exists from Resource
55     *
56     * @param Smarty_Template_Source $source source object
57     * @return void
58     */
59    public function populateTimestamp(Smarty_Template_Source $source)
60    {
61        $source->timestamp = @filemtime($source->filepath);
62        $source->exists = !!$source->timestamp;
63    }
64
65    /**
66     * Load template's source from file into current template object
67     *
68     * @param Smarty_Template_Source $source source object
69     * @return string template source
70     * @throws SmartyException if source cannot be loaded
71     */
72    public function getContent(Smarty_Template_Source $source)
73    {
74        if ($source->timestamp) {
75            return '';
76        }
77        throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
78    }
79
80    /**
81     * Render and output the template (without using the compiler)
82     *
83     * @param Smarty_Template_Source $source source object
84     * @param Smarty_Internal_Template $_template template object
85     * @return void
86     * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
87     */
88    public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
89    {
90        $_smarty_template = $_template;
91
92        if (!$source->smarty->allow_php_templates) {
93            throw new SmartyException("PHP templates are disabled");
94        }
95        if (!$source->exists) {
96            if ($_template->parent instanceof Smarty_Internal_Template) {
97                $parent_resource = " in '{$_template->parent->template_resource}'";
98            } else {
99                $parent_resource = '';
100            }
101            throw new SmartyException("Unable to load template {$source->type} '{$source->name}'{$parent_resource}");
102        }
103
104        // prepare variables
105        extract($_template->getTemplateVars());
106
107        // include PHP template with short open tags enabled
108        ini_set( 'short_open_tag', '1' );
109        include($source->filepath);
110        ini_set( 'short_open_tag', $this->short_open_tag );
111    }
112}
113
114?>
Note: See TracBrowser for help on using the repository browser.