Merge remote-tracking branch 'remotes/cyberalien/ticket/11482' into develop

# By Vjacheslav Trushkin
# Via Vjacheslav Trushkin
* remotes/cyberalien/ticket/11482:
  [ticket/11482] Use double quotes for code
  [ticket/11482] Unit tests for advanced DEFINE
  [ticket/11482] Implementation of advanced DEFINE tag
This commit is contained in:
Nathan Guse 2013-05-20 10:47:45 -05:00
commit 9fab868f0f
6 changed files with 67 additions and 2 deletions

View file

@ -335,6 +335,10 @@ class phpbb_template_filter extends php_user_filter
return '<?php ' . $this->compile_tag_define($matches[2], false) . ' ?>';
break;
case 'ENDDEFINE':
return '<?php ' . $this->compile_tag_enddefine() . ' ?>';
break;
case 'INCLUDE':
return '<?php ' . $this->compile_tag_include($matches[2]) . ' ?>';
break;
@ -839,6 +843,16 @@ class phpbb_template_filter extends php_user_filter
$match = array();
preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match);
if (!empty($match[2]) && !isset($match[3]) && $op)
{
// DEFINE tag with ENDDEFINE
$array = "\$_tpldata['DEFINE']['.vars']";
$code = 'ob_start(); ';
$code .= "if (!isset($array)) { $array = array(); } ";
$code .= "{$array}[] = '{$match[2]}'";
return $code;
}
if (empty($match[2]) || (!isset($match[3]) && $op))
{
return '';
@ -865,6 +879,20 @@ class phpbb_template_filter extends php_user_filter
return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';';
}
/**
* Compile ENDDEFINE tag
*
* @return string compiled template code
*/
private function compile_tag_enddefine()
{
$array = "\$_tpldata['DEFINE']['.vars']";
$code = "if (!isset($array) || !sizeof($array)) { trigger_error('ENDDEFINE tag without DEFINE in ' . basename(__FILE__), E_USER_ERROR); }";
$code .= "\$define_var = array_pop($array); ";
$code .= "\$_tpldata['DEFINE']['.'][\$define_var] = ob_get_clean();";
return $code;
}
/**
* Compile INCLUDE tag
*

View file

@ -132,6 +132,20 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
array(),
"xyz\nabc\nabc\nbar\nbar\nabc",
),
array(
'define_advanced.html',
array(),
array('loop' => array(array(), array(), array(), array(), array(), array(), array()), 'test' => array(array()), 'test.deep' => array(array()), 'test.deep.defines' => array(array())),
array(),
"abc\nzxc\ncde\nbcd",
),
array(
'define_unclosed.html',
array(),
array(),
array(),
"test",
),
array(
'expressions.html',
array(),

View file

@ -7,5 +7,3 @@
{$VALUE}
<!-- UNDEFINE $VALUE -->
{$VALUE}
<!-- DEFINE $VALUE -->

View file

@ -0,0 +1,12 @@
<!-- DEFINE $VALUE -->
abc
<!-- ENDDEFINE -->
{$VALUE}
<!-- DEFINE $VALUE1 -->
bcd
<!-- ENDDEFINE -->
<!-- DEFINE $VALUE2 -->
cde
<!-- ENDDEFINE -->
<!-- INCLUDE define_include2.html -->
{$INCLUDED_VALUE3}

View file

@ -0,0 +1,11 @@
<!-- DEFINE $INCLUDED_VALUE1 -->
zxc
<!-- ENDDEFINE -->
<!-- DEFINE $INCLUDED_VALUE2 -->
qwe
<!-- ENDDEFINE -->
{$INCLUDED_VALUE1}
<!-- DEFINE $INCLUDED_VALUE3 -->
{$VALUE2}
{$VALUE1}
<!-- ENDDEFINE -->

View file

@ -0,0 +1,2 @@
<!-- DEFINE $VALUE -->
test