You are here

protected function Twig_NodeVisitor_Sandbox::doEnterNode in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 vendor/twig/twig/lib/Twig/NodeVisitor/Sandbox.php \Twig_NodeVisitor_Sandbox::doEnterNode()

Called before child nodes are visited.

Parameters

Twig_Node $node The node to visit:

Twig_Environment $env The Twig environment instance:

Return value

Twig_Node The modified node

Overrides Twig_BaseNodeVisitor::doEnterNode

File

vendor/twig/twig/lib/Twig/NodeVisitor/Sandbox.php, line 27

Class

Twig_NodeVisitor_Sandbox
Twig_NodeVisitor_Sandbox implements sandboxing.

Code

protected function doEnterNode(Twig_Node $node, Twig_Environment $env) {
  if ($node instanceof Twig_Node_Module) {
    $this->inAModule = true;
    $this->tags = array();
    $this->filters = array();
    $this->functions = array();
    return $node;
  }
  elseif ($this->inAModule) {

    // look for tags
    if ($node
      ->getNodeTag() && !isset($this->tags[$node
      ->getNodeTag()])) {
      $this->tags[$node
        ->getNodeTag()] = $node;
    }

    // look for filters
    if ($node instanceof Twig_Node_Expression_Filter && !isset($this->filters[$node
      ->getNode('filter')
      ->getAttribute('value')])) {
      $this->filters[$node
        ->getNode('filter')
        ->getAttribute('value')] = $node;
    }

    // look for functions
    if ($node instanceof Twig_Node_Expression_Function && !isset($this->functions[$node
      ->getAttribute('name')])) {
      $this->functions[$node
        ->getAttribute('name')] = $node;
    }

    // wrap print to check __toString() calls
    if ($node instanceof Twig_Node_Print) {
      return new Twig_Node_SandboxedPrint($node
        ->getNode('expr'), $node
        ->getLine(), $node
        ->getNodeTag());
    }
  }
  return $node;
}