Twig-1.3.0/lib/Twig/Node/SandboxedModule.php
changeset 4 9a001a04b634
equal deleted inserted replaced
3:6d109e3804ac 4:9a001a04b634
       
     1 <?php
       
     2 
       
     3 /*
       
     4  * This file is part of Twig.
       
     5  *
       
     6  * (c) 2009 Fabien Potencier
       
     7  * (c) 2009 Armin Ronacher
       
     8  *
       
     9  * For the full copyright and license information, please view the LICENSE
       
    10  * file that was distributed with this source code.
       
    11  */
       
    12 
       
    13 /**
       
    14  * Represents a module node.
       
    15  *
       
    16  * @package    twig
       
    17  * @author     Fabien Potencier <fabien@symfony.com>
       
    18  */
       
    19 class Twig_Node_SandboxedModule extends Twig_Node_Module
       
    20 {
       
    21     protected $usedFilters;
       
    22     protected $usedTags;
       
    23     protected $usedFunctions;
       
    24 
       
    25     public function __construct(Twig_Node_Module $node, array $usedFilters, array $usedTags, array $usedFunctions)
       
    26     {
       
    27         parent::__construct($node->getNode('body'), $node->getNode('parent'), $node->getNode('blocks'), $node->getNode('macros'), $node->getNode('traits'), $node->getAttribute('filename'), $node->getLine(), $node->getNodeTag());
       
    28 
       
    29         $this->usedFilters = $usedFilters;
       
    30         $this->usedTags = $usedTags;
       
    31         $this->usedFunctions = $usedFunctions;
       
    32     }
       
    33 
       
    34     protected function compileDisplayBody(Twig_Compiler $compiler)
       
    35     {
       
    36         if (null === $this->getNode('parent')) {
       
    37             $compiler->write("\$this->checkSecurity();\n");
       
    38         }
       
    39 
       
    40         parent::compileDisplayBody($compiler);
       
    41     }
       
    42 
       
    43     protected function compileDisplayFooter(Twig_Compiler $compiler)
       
    44     {
       
    45         parent::compileDisplayFooter($compiler);
       
    46 
       
    47         $compiler
       
    48             ->write("protected function checkSecurity() {\n")
       
    49             ->indent()
       
    50             ->write("\$this->env->getExtension('sandbox')->checkSecurity(\n")
       
    51             ->indent()
       
    52             ->write(!$this->usedTags ? "array(),\n" : "array('".implode('\', \'', $this->usedTags)."'),\n")
       
    53             ->write(!$this->usedFilters ? "array(),\n" : "array('".implode('\', \'', $this->usedFilters)."'),\n")
       
    54             ->write(!$this->usedFunctions ? "array()\n" : "array('".implode('\', \'', $this->usedFunctions)."')\n")
       
    55             ->outdent()
       
    56             ->write(");\n")
       
    57         ;
       
    58 
       
    59         if (null !== $this->getNode('parent')) {
       
    60             $compiler
       
    61                 ->raw("\n")
       
    62                 ->write("\$this->parent->checkSecurity();\n")
       
    63             ;
       
    64         }
       
    65 
       
    66         $compiler
       
    67             ->outdent()
       
    68             ->write("}\n\n")
       
    69         ;
       
    70     }
       
    71 }