aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/functions_template.php
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2007-08-17 20:47:50 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2007-08-17 20:47:50 +0000
commitb29d76b5588023fcab1c27280a17e0d9fa973c71 (patch)
tree7bea7d3d0a84f87caeacbb0718e1db8ebb5157ea /phpBB/includes/functions_template.php
parentaecc7c91787abc8b61326f2f6460aeed9f372b52 (diff)
downloadforums-b29d76b5588023fcab1c27280a17e0d9fa973c71.tar
forums-b29d76b5588023fcab1c27280a17e0d9fa973c71.tar.gz
forums-b29d76b5588023fcab1c27280a17e0d9fa973c71.tar.bz2
forums-b29d76b5588023fcab1c27280a17e0d9fa973c71.tar.xz
forums-b29d76b5588023fcab1c27280a17e0d9fa973c71.zip
test adding isset() calls to if expressions. :o
git-svn-id: file:///svn/phpbb/trunk@8042 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/functions_template.php')
-rw-r--r--phpBB/includes/functions_template.php65
1 files changed, 59 insertions, 6 deletions
diff --git a/phpBB/includes/functions_template.php b/phpBB/includes/functions_template.php
index 0d8a39eaee..5becb2458b 100644
--- a/phpBB/includes/functions_template.php
+++ b/phpBB/includes/functions_template.php
@@ -526,7 +526,60 @@ class template_compile
}
}
- return (($elseif) ? '} else if (' : 'if (') . (implode(' ', $tokens) . ') { ');
+ // Try to combine some tokens...
+ $new_tokens = array();
+ $j = 0;
+
+ for ($i = 0, $size = sizeof($tokens); $i < $size; $i++)
+ {
+ $token = &$tokens[$i];
+
+ if ($token != '&&' && $token != '||')
+ {
+ $new_tokens[$j][] = $token;
+ continue;
+ }
+
+ $this->_merge_tokens(' ', $new_tokens[$j]);
+ $new_tokens[$j++] .= $token;
+ }
+
+ if (!sizeof($new_tokens))
+ {
+ $new_tokens[$j] = &$tokens;
+ }
+
+ if (isset($new_tokens[$j]) && is_array($new_tokens[$j]))
+ {
+ $this->_merge_tokens('', $new_tokens[$j]);
+ }
+
+ return (($elseif) ? '} else if (' : 'if (') . (implode(' ', $new_tokens) . ') { ');
+ }
+
+ /**
+ * Merge tokens from IF expression, correctly adding isset() calls.
+ * @access private
+ */
+ function _merge_tokens($suffix, &$tokens)
+ {
+ for ($i = 0, $size = sizeof($tokens); $i < $size; $i++)
+ {
+ $token = &$tokens[$i];
+
+ if (strpos($token, '$this') === 0)
+ {
+ $token = '(isset(' . $token . ') && ' . $token;
+ $suffix = ')' . $suffix;
+ }
+ else if (strpos($token, 'sizeof(') === 0)
+ {
+ $token = '(isset(' . substr($token, 7, -1) . ') && ' . $token;
+ $suffix = ')' . $suffix;
+ }
+ }
+
+ $tokens = implode(' ', $tokens) . $suffix;
}
/**
@@ -627,11 +680,11 @@ class template_compile
{
$expr_end++;
$expr_arg = $tokens[$expr_end++];
- $expr = "!(($is_arg / $expr_arg) % $expr_arg)";
+ $expr = "!(isset($is_arg) && ($is_arg / $expr_arg) % $expr_arg)";
}
else
{
- $expr = "!($is_arg & 1)";
+ $expr = "!(isset($is_arg) && $is_arg & 1)";
}
break;
@@ -640,11 +693,11 @@ class template_compile
{
$expr_end++;
$expr_arg = $tokens[$expr_end++];
- $expr = "(($is_arg / $expr_arg) % $expr_arg)";
+ $expr = "(isset($is_arg) && ($is_arg / $expr_arg) % $expr_arg)";
}
else
{
- $expr = "($is_arg & 1)";
+ $expr = "(isset($is_arg) && $is_arg & 1)";
}
break;
@@ -653,7 +706,7 @@ class template_compile
{
$expr_end++;
$expr_arg = $tokens[$expr_end++];
- $expr = "!($is_arg % $expr_arg)";
+ $expr = "!(isset($is_arg) && $is_arg % $expr_arg)";
}
break;
}