summaryrefslogtreecommitdiff
path: root/app/Report/ReportParserGenerate.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2018-10-14 12:06:58 +0100
committerGreg Roach <fisharebest@webtrees.net>2018-10-14 12:06:58 +0100
commit528683980227e5399d67ada05c237d762a6302aa (patch)
tree09cc1e19fb6ba7026ed1301e1d9cc5cb63e4b9ed /app/Report/ReportParserGenerate.php
parentc8f6f5b56eb6e596d0dc7488307170c55a46936b (diff)
downloadwebtrees-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.php25
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 = '';
}