diff options
author | Meik Sievertsen <acydburn@phpbb.com> | 2007-08-17 20:47:50 +0000 |
---|---|---|
committer | Meik Sievertsen <acydburn@phpbb.com> | 2007-08-17 20:47:50 +0000 |
commit | b29d76b5588023fcab1c27280a17e0d9fa973c71 (patch) | |
tree | 7bea7d3d0a84f87caeacbb0718e1db8ebb5157ea /phpBB/includes/functions_template.php | |
parent | aecc7c91787abc8b61326f2f6460aeed9f372b52 (diff) | |
download | forums-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.php | 65 |
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; } |