public function getFunctionName(\Twig_Node_Module $module) { if ($module->hasAttribute('twig_js_name')) { return $module->getAttribute('twig_js_name'); } $templateName = $module->getAttribute('filename'); $templateName = basename($templateName, '.twig'); $templateName = str_replace(':', '.', $templateName); $templateName = preg_replace('/\\.+/', '.', $templateName); $templateName = trim($templateName, '.'); return $templateName; }
protected function compileDisplayFooter(Twig_Compiler $compiler) { parent::compileDisplayFooter($compiler); $compiler ->write("protected function checkSecurity() {\n") ->indent() ->write("\$this->env->getExtension('sandbox')->checkSecurity(\n") ->indent() ->write(!$this->usedTags ? "array(),\n" : "array('".implode('\', \'', $this->usedTags)."'),\n") ->write(!$this->usedFilters ? "array(),\n" : "array('".implode('\', \'', $this->usedFilters)."'),\n") ->write(!$this->usedFunctions ? "array()\n" : "array('".implode('\', \'', $this->usedFunctions)."')\n") ->outdent() ->write(");\n") ; if (null !== $this->getNode('parent')) { $compiler ->raw("\n") ->write("\$this->parent->checkSecurity();\n") ; } $compiler ->outdent() ->write("}\n\n") ; }
/** * Override compilation of class header to add static placeholder array and accessor method. * * @param Twig_Compiler $compiler */ protected function compileClassHeader(Twig_Compiler $compiler) { parent::compileClassHeader($compiler); $placeholders = array(); $this->getVariables($this, $placeholders); $compiler->write("// Curry: placeholders \n")->write("static protected \$placeholders = " . var_export(array_keys($placeholders), true) . ";\n\n")->write("\n")->write("public function getPlaceholders()\n")->write("{\n")->indent()->write("return self::\$placeholders;\n")->outdent()->write("}\n\n"); }
protected function compileDisplayFooter(Twig_Compiler $compiler) { parent::compileDisplayFooter($compiler); $tags = $filters = $functions = array(); foreach (array('tags', 'filters', 'functions') as $type) { foreach ($this->{'used' . ucfirst($type)} as $name => $node) { if ($node instanceof Twig_Node) { ${$type}[$name] = $node->getLine(); } else { ${$type}[$node] = null; } } } $compiler->write("protected function checkSecurity()\n", "{\n")->indent()->write("\$tags = ")->repr(array_filter($tags))->raw(";\n")->write("\$filters = ")->repr(array_filter($filters))->raw(";\n")->write("\$functions = ")->repr(array_filter($functions))->raw(";\n\n")->write("try {\n")->indent()->write("\$this->env->getExtension('sandbox')->checkSecurity(\n")->indent()->write(!$tags ? "array(),\n" : "array('" . implode("', '", array_keys($tags)) . "'),\n")->write(!$filters ? "array(),\n" : "array('" . implode("', '", array_keys($filters)) . "'),\n")->write(!$functions ? "array()\n" : "array('" . implode("', '", array_keys($functions)) . "')\n")->outdent()->write(");\n")->outdent()->write("} catch (Twig_Sandbox_SecurityError \$e) {\n")->indent()->write("\$e->setTemplateFile(\$this->getTemplateName());\n\n")->write("if (\$e instanceof Twig_Sandbox_SecurityNotAllowedTagError && isset(\$tags[\$e->getTagName()])) {\n")->indent()->write("\$e->setTemplateLine(\$tags[\$e->getTagName()]);\n")->outdent()->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFilterError && isset(\$filters[\$e->getFilterName()])) {\n")->indent()->write("\$e->setTemplateLine(\$filters[\$e->getFilterName()]);\n")->outdent()->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFunctionError && isset(\$functions[\$e->getFunctionName()])) {\n")->indent()->write("\$e->setTemplateLine(\$functions[\$e->getFunctionName()]);\n")->outdent()->write("}\n\n")->write("throw \$e;\n")->outdent()->write("}\n")->outdent()->write("}\n\n"); }
/** * @covers Twig_Node_Module::__construct */ public function testConstructor() { $body = new Twig_Node_Text('foo', 0); $parent = new Twig_Node_Expression_Constant('layout.twig', 0); $blocks = new Twig_Node(); $macros = new Twig_Node(); $filename = 'foo.twig'; $node = new Twig_Node_Module($body, $parent, $blocks, $macros, $filename); $this->assertEquals($body, $node->getNode('body')); $this->assertEquals($blocks, $node->getNode('blocks')); $this->assertEquals($macros, $node->getNode('macros')); $this->assertEquals($parent, $node->getNode('parent')); $this->assertEquals($filename, $node->getAttribute('filename')); }
public function testConstructor() { $body = new Twig_Node_Text('foo', 1); $parent = new Twig_Node_Expression_Constant('layout.twig', 1); $blocks = new Twig_Node(); $macros = new Twig_Node(); $traits = new Twig_Node(); $source = new Twig_Source('{{ foo }}', 'foo.twig'); $node = new Twig_Node_Module($body, $parent, $blocks, $macros, $traits, new Twig_Node(array()), $source); $this->assertEquals($body, $node->getNode('body')); $this->assertEquals($blocks, $node->getNode('blocks')); $this->assertEquals($macros, $node->getNode('macros')); $this->assertEquals($parent, $node->getNode('parent')); $this->assertEquals($source->getName(), $node->getTemplateName()); }
public function embedTemplate(Twig_Node_Module $template) { $template->setIndex(mt_rand()); $this->embeddedTemplates[] = $template; }
public function embedTemplate(Twig_Node_Module $template) { $template->setIndex(count($this->embeddedTemplates) + 1); $this->embeddedTemplates[] = $template; }
/** * {@inheritdoc} */ protected function compileClassFooter(\Twig_Compiler $compiler) { $this->compileContentRegionFunction($compiler); parent::compileClassFooter($compiler); }