a08f21f5676c21762398e4ea4496c004a47d34f3
[yaffs-website] / vendor / twig / twig / lib / Twig / Node / SandboxedPrint.php
1 <?php
2
3 /*
4  * This file is part of Twig.
5  *
6  * (c) Fabien Potencier
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 /**
13  * Twig_Node_SandboxedPrint adds a check for the __toString() method
14  * when the variable is an object and the sandbox is activated.
15  *
16  * When there is a simple Print statement, like {{ article }},
17  * and if the sandbox is enabled, we need to check that the __toString()
18  * method is allowed if 'article' is an object.
19  *
20  * @author Fabien Potencier <fabien@symfony.com>
21  */
22 class Twig_Node_SandboxedPrint extends Twig_Node_Print
23 {
24     public function compile(Twig_Compiler $compiler)
25     {
26         $compiler
27             ->addDebugInfo($this)
28             ->write('echo $this->env->getExtension(\'Twig_Extension_Sandbox\')->ensureToStringAllowed(')
29             ->subcompile($this->getNode('expr'))
30             ->raw(");\n")
31         ;
32     }
33
34     /**
35      * Removes node filters.
36      *
37      * This is mostly needed when another visitor adds filters (like the escaper one).
38      *
39      * @return Twig_Node
40      */
41     protected function removeNodeFilter(Twig_Node $node)
42     {
43         if ($node instanceof Twig_Node_Expression_Filter) {
44             return $this->removeNodeFilter($node->getNode('node'));
45         }
46
47         return $node;
48     }
49 }
50
51 class_alias('Twig_Node_SandboxedPrint', 'Twig\Node\SandboxedPrintNode', false);