1: <?php
 2: /**
 3:  * Smarty Internal Plugin Compile Eval
 4:  * Compiles the {eval} tag.
 5:  *
 6:  * @package    Smarty
 7:  * @subpackage Compiler
 8:  * @author     Uwe Tews
 9:  */
10: 
11: /**
12:  * Smarty Internal Plugin Compile Eval Class
13:  *
14:  * @package    Smarty
15:  * @subpackage Compiler
16:  */
17: class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
18: {
19:     /**
20:      * Attribute definition: Overwrites base class.
21:      *
22:      * @var array
23:      * @see Smarty_Internal_CompileBase
24:      */
25:     public $required_attributes = array('var');
26:     /**
27:      * Attribute definition: Overwrites base class.
28:      *
29:      * @var array
30:      * @see Smarty_Internal_CompileBase
31:      */
32:     public $optional_attributes = array('assign');
33:     /**
34:      * Attribute definition: Overwrites base class.
35:      *
36:      * @var array
37:      * @see Smarty_Internal_CompileBase
38:      */
39:     public $shorttag_order = array('var', 'assign');
40: 
41:     /**
42:      * Compiles code for the {eval} tag
43:      *
44:      * @param  array  $args     array with attributes from parser
45:      * @param  object $compiler compiler object
46:      *
47:      * @return string compiled code
48:      */
49:     public function compile($args, $compiler)
50:     {
51:         $this->required_attributes = array('var');
52:         $this->optional_attributes = array('assign');
53:         // check and get attributes
54:         $_attr = $this->getAttributes($compiler, $args);
55:         if (isset($_attr['assign'])) {
56:             // output will be stored in a smarty variable instead of being displayed
57:             $_assign = $_attr['assign'];
58:         }
59: 
60:         // create template object
61:         $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";
62:         //was there an assign attribute?
63:         if (isset($_assign)) {
64:             $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
65:         } else {
66:             $_output .= "echo \$_template->fetch();";
67:         }
68: 
69:         return "<?php $_output ?>";
70:     }
71: }
72: