Code

d52712368db66bdfb26d58dcf542ed1594226aaa
[gosa.git] / gosa-core / include / smarty / sysplugins / smarty_internal_compile_include_php.php
1 <?php
2 /**
3  * Smarty Internal Plugin Compile Include PHP
4  *
5  * Compiles the {include_php} tag
6  *
7  * @package Smarty
8  * @subpackage Compiler
9  * @author Uwe Tews
10  */
12 /**
13  * Smarty Internal Plugin Compile Insert Class
14  *
15  * @package Smarty
16  * @subpackage Compiler
17  */
18 class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
20     /**
21      * Attribute definition: Overwrites base class.
22      *
23      * @var array
24      * @see Smarty_Internal_CompileBase
25      */
26     public $required_attributes = array('file');
27     /**
28      * Attribute definition: Overwrites base class.
29      *
30      * @var array
31      * @see Smarty_Internal_CompileBase
32      */
33     public $shorttag_order = array('file');
34     /**
35      * Attribute definition: Overwrites base class.
36      *
37      * @var array
38      * @see Smarty_Internal_CompileBase
39      */
40     public $optional_attributes = array('once', 'assign');
42     /**
43      * Compiles code for the {include_php} tag
44      *
45      * @param array  $args     array with attributes from parser
46      * @param object $compiler compiler object
47      * @return string compiled code
48      */
49     public function compile($args, $compiler)
50     {
51         if (!($compiler->smarty instanceof SmartyBC)) {
52             throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable");
53         }
54         // check and get attributes
55         $_attr = $this->getAttributes($compiler, $args);
57         $_output = '<?php ';
59         $_smarty_tpl = $compiler->template;
60         $_filepath = false;
61         eval('$_file = ' . $_attr['file'] . ';');
62         if (!isset($compiler->smarty->security_policy) && file_exists($_file)) {
63             $_filepath = $_file;
64         } else {
65             if (isset($compiler->smarty->security_policy)) {
66                 $_dir = $compiler->smarty->security_policy->trusted_dir;
67             } else {
68                 $_dir = $compiler->smarty->trusted_dir;
69             }
70             if (!empty($_dir)) {
71                 foreach((array)$_dir as $_script_dir) {
72                     $_script_dir = rtrim($_script_dir, '/\\') . DS;
73                     if (file_exists($_script_dir . $_file)) {
74                         $_filepath = $_script_dir .  $_file;
75                         break;
76                     }
77                 }
78             }
79         }
80         if ($_filepath == false) {
81             $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", $compiler->lex->taglineno);
82         }
84         if (isset($compiler->smarty->security_policy)) {
85             $compiler->smarty->security_policy->isTrustedPHPDir($_filepath);
86         }
88         if (isset($_attr['assign'])) {
89             // output will be stored in a smarty variable instead of being displayed
90             $_assign = $_attr['assign'];
91         }
92         $_once = '_once';
93         if (isset($_attr['once'])) {
94             if ($_attr['once'] == 'false') {
95                 $_once = '';
96             }
97         }
99         if (isset($_assign)) {
100             return "<?php ob_start(); include{$_once} ('{$_filepath}'); \$_smarty_tpl->assign({$_assign},ob_get_contents()); ob_end_clean();?>";
101         } else {
102             return "<?php include{$_once} ('{$_filepath}');?>\n";
103         }
104     }
108 ?>