1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-31 22:10:45 +02:00

[ticket/12382] Allow nested loops in included files.

They have to reference the fully qualified loop name in BEGIN and END.

PHPBB3-12382
This commit is contained in:
Nils Adermann
2014-05-03 00:13:06 +02:00
parent 936518d201
commit d18f19a3bb
3 changed files with 13 additions and 7 deletions

View File

@@ -191,9 +191,16 @@ class lexer extends \Twig_Lexer
$parent_class = $this;
$callback = function ($matches) use ($parent_class, $parent_nodes)
{
$name = $matches[1];
$subset = trim(substr($matches[2], 1, -1)); // Remove parenthesis
$body = $matches[3];
$hard_parents = explode('.', $matches[1]);
array_pop($hard_parents); // ends with .
if ($hard_parents)
{
$parent_nodes = array_merge($hard_parents, $parent_nodes);
}
$name = $matches[2];
$subset = trim(substr($matches[3], 1, -1)); // Remove parenthesis
$body = $matches[4];
// Replace <!-- BEGINELSE -->
$body = str_replace('<!-- BEGINELSE -->', '{% else %}', $body);
@@ -242,7 +249,7 @@ class lexer extends \Twig_Lexer
return "{% for {$name} in {$parent}{$name}{$subset} %}{$body}{% endfor %}";
};
return preg_replace_callback('#<!-- BEGIN ([!a-zA-Z0-9_]+)(\([0-9,\-]+\))? -->(.+?)<!-- END \1 -->#s', $callback, $code);
return preg_replace_callback('#<!-- BEGIN ((?:[a-zA-Z0-9_]+\.)*)([!a-zA-Z0-9_]+)(\([0-9,\-]+\))? -->(.+?)<!-- END \1\2 -->#s', $callback, $code);
}
/**