Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 1
<?php
2
/**
3
 * Smarty Internal Extension
4
 * This file contains the Smarty template extension to create a code frame
5
 *
6
 * @package    Smarty
7
 * @subpackage Template
8
 * @author     Uwe Tews
9
 */
10
 
11
/**
12
 * Class Smarty_Internal_Extension_CodeFrame
13
 * Create code frame for compiled and cached templates
14
 */
15
class Smarty_Internal_Runtime_CodeFrame
16
{
17
    /**
18
     * Create code frame for compiled and cached templates
19
     *
20
     * @param Smarty_Internal_Template              $_template
21
     * @param string                                $content   optional template content
22
     * @param string                                $functions compiled template function and block code
23
     * @param bool                                  $cache     flag for cache file
24
     * @param \Smarty_Internal_TemplateCompilerBase $compiler
25
     *
26
     * @return string
27
     */
28
    public function create(
29
        Smarty_Internal_Template $_template,
30
        $content = '',
31
        $functions = '',
32
        $cache = false,
33
        Smarty_Internal_TemplateCompilerBase $compiler = null
34
    ) {
35
        // build property code
36
        $properties[ 'version' ] = Smarty::SMARTY_VERSION;
37
        $properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
38
        if (!$cache) {
39
            $properties[ 'has_nocache_code' ] = $_template->compiled->has_nocache_code;
40
            $properties[ 'file_dependency' ] = $_template->compiled->file_dependency;
41
            $properties[ 'includes' ] = $_template->compiled->includes;
42
        } else {
43
            $properties[ 'has_nocache_code' ] = $_template->cached->has_nocache_code;
44
            $properties[ 'file_dependency' ] = $_template->cached->file_dependency;
45
            $properties[ 'cache_lifetime' ] = $_template->cache_lifetime;
46
        }
47
        $output = "<?php\n";
48
        $output .= "/* Smarty version {$properties[ 'version' ]}, created on " . strftime("%Y-%m-%d %H:%M:%S") .
49
                   "\n  from '" . str_replace('*/', '* /', $_template->source->filepath) . "' */\n\n";
50
        $output .= "/* @var Smarty_Internal_Template \$_smarty_tpl */\n";
51
        $dec = "\$_smarty_tpl->_decodeProperties(\$_smarty_tpl, " . var_export($properties, true) . ',' .
52
               ($cache ? 'true' : 'false') . ')';
53
        $output .= "if ({$dec}) {\n";
54
        $output .= "function {$properties['unifunc']} (Smarty_Internal_Template \$_smarty_tpl) {\n";
55
        if (!$cache && !empty($compiler->tpl_function)) {
56
            $output .= '$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions($_smarty_tpl, ';
57
            $output .= var_export($compiler->tpl_function, true);
58
            $output .= ");\n";
59
        }
60
        if ($cache && isset($_template->smarty->ext->_tplFunction)) {
61
            $output .= "\$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions(\$_smarty_tpl, " .
62
                       var_export($_template->smarty->ext->_tplFunction->getTplFunction($_template), true) . ");\n";
63
        }
64
        $output .= "?>";
65
        $output .= $content;
66
        $output .= "<?php }\n?>";
67
        $output .= $functions;
68
        $output .= "<?php }\n";
69
        // remove unneeded PHP tags
70
        if (preg_match('/\s*\?>[\n]?<\?php\s*/', $output)) {
71
            $curr_split = preg_split(
72
                '/\s*\?>[\n]?<\?php\s*/',
73
                $output
74
            );
75
            preg_match_all(
76
                '/\s*\?>[\n]?<\?php\s*/',
77
                $output,
78
                $curr_parts
79
            );
80
            $output = '';
81
            foreach ($curr_split as $idx => $curr_output) {
82
                $output .= $curr_output;
83
                if (isset($curr_parts[ 0 ][ $idx ])) {
84
                    $output .= "\n";
85
                }
86
            }
87
        }
88
        if (preg_match('/\?>\s*$/', $output)) {
89
            $curr_split = preg_split(
90
                '/\?>\s*$/',
91
                $output
92
            );
93
            $output = '';
94
            foreach ($curr_split as $idx => $curr_output) {
95
                $output .= $curr_output;
96
            }
97
        }
98
        return $output;
99
    }
100
}