diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2018-10-14 12:06:58 +0100 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2018-10-14 12:06:58 +0100 |
| commit | 528683980227e5399d67ada05c237d762a6302aa (patch) | |
| tree | 09cc1e19fb6ba7026ed1301e1d9cc5cb63e4b9ed /app/Report/ReportParserGenerate.php | |
| parent | c8f6f5b56eb6e596d0dc7488307170c55a46936b (diff) | |
| download | webtrees-528683980227e5399d67ada05c237d762a6302aa.tar.gz webtrees-528683980227e5399d67ada05c237d762a6302aa.tar.bz2 webtrees-528683980227e5399d67ada05c237d762a6302aa.zip | |
Use symfony expression language to evaluate expressions
Diffstat (limited to 'app/Report/ReportParserGenerate.php')
| -rw-r--r-- | app/Report/ReportParserGenerate.php | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/app/Report/ReportParserGenerate.php b/app/Report/ReportParserGenerate.php index b8fc758d44..f0b580f610 100644 --- a/app/Report/ReportParserGenerate.php +++ b/app/Report/ReportParserGenerate.php @@ -1459,27 +1459,16 @@ class ReportParserGenerate extends ReportParserBase } elseif (preg_match('/^I18N::translateContext\(\'(.+)\', *\'(.+)\'\)$/', $value, $match)) { $value = I18N::translateContext($match[1], $match[2]); } + // Arithmetic functions if (preg_match("/(\d+)\s*([\-\+\*\/])\s*(\d+)/", $value, $match)) { - switch ($match[2]) { - case '+': - $t = $match[1] + $match[3]; - $value = preg_replace('/' . $match[1] . "\s*([\-\+\*\/])\s*" . $match[3] . '/', $t, $value); - break; - case '-': - $t = $match[1] - $match[3]; - $value = preg_replace('/' . $match[1] . "\s*([\-\+\*\/])\s*" . $match[3] . '/', $t, $value); - break; - case '*': - $t = $match[1] * $match[3]; - $value = preg_replace('/' . $match[1] . "\s*([\-\+\*\/])\s*" . $match[3] . '/', $t, $value); - break; - case '/': - $t = $match[1] / $match[3]; - $value = preg_replace('/' . $match[1] . "\s*([\-\+\*\/])\s*" . $match[3] . '/', $t, $value); - break; - } + // Create an expression language with the functions used by our reports. + $expression_provider = new ReportExpressionLanguageProvider(); + $expression_language = new ExpressionLanguage(null, [$expression_provider]); + + $value = (string) $expression_language->evaluate($value); } + if (strpos($value, '@') !== false) { $value = ''; } |
