1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: 12: 13: 14: 15: 16:
17: class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
18: {
19: 20: 21: 22: 23: 24:
25: public $required_attributes = array('file');
26: 27: 28: 29: 30: 31:
32: public $shorttag_order = array('file');
33: 34: 35: 36: 37: 38:
39: public $optional_attributes = array('once', 'assign');
40:
41: 42: 43: 44: 45: 46: 47: 48: 49:
50: public function compile($args, $compiler)
51: {
52: if (!($compiler->smarty instanceof SmartyBC)) {
53: throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable");
54: }
55:
56: $_attr = $this->getAttributes($compiler, $args);
57:
58: 59: 60:
61: $_smarty_tpl = $compiler->template;
62: $_filepath = false;
63: eval('$_file = ' . $_attr['file'] . ';');
64: if (!isset($compiler->smarty->security_policy) && file_exists($_file)) {
65: $_filepath = $_file;
66: } else {
67: if (isset($compiler->smarty->security_policy)) {
68: $_dir = $compiler->smarty->security_policy->trusted_dir;
69: } else {
70: $_dir = $compiler->smarty->trusted_dir;
71: }
72: if (!empty($_dir)) {
73: foreach ((array) $_dir as $_script_dir) {
74: $_script_dir = rtrim($_script_dir, '/\\') . DS;
75: if (file_exists($_script_dir . $_file)) {
76: $_filepath = $_script_dir . $_file;
77: break;
78: }
79: }
80: }
81: }
82: if ($_filepath == false) {
83: $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", $compiler->lex->taglineno);
84: }
85:
86: if (isset($compiler->smarty->security_policy)) {
87: $compiler->smarty->security_policy->isTrustedPHPDir($_filepath);
88: }
89:
90: if (isset($_attr['assign'])) {
91:
92: $_assign = $_attr['assign'];
93: }
94: $_once = '_once';
95: if (isset($_attr['once'])) {
96: if ($_attr['once'] == 'false') {
97: $_once = '';
98: }
99: }
100:
101: if (isset($_assign)) {
102: return "<?php ob_start(); include{$_once} ('{$_filepath}'); \$_smarty_tpl->assign({$_assign},ob_get_contents()); ob_end_clean();?>";
103: } else {
104: return "<?php include{$_once} ('{$_filepath}');?>\n";
105: }
106: }
107: }
108: