Catch php error in ruler evaluate. Unify all dates functions by using real DateTime objects and function date -> date_create and date_from_format -> date_create_from_format.

This commit is contained in:
osaajani 2021-12-02 01:03:42 +01:00
parent 6bd18c95cc
commit 3f632e9db7
2 changed files with 13 additions and 16 deletions

View File

@ -38,20 +38,18 @@ class ExpressionProvider implements ExpressionFunctionProviderInterface
return isset($var); return isset($var);
}); });
//Check if today is birthday given a birthdate as string and a potential format //Check if today is birthday given a birthdate as DateTime
$is_birthday = new ExpressionFunction('is_birthday', function ($birthdate, $format = null) $is_birthday = new ExpressionFunction('is_birthday', function ($birthdate)
{ {
return sprintf('isset(%1$s) && ((%2$s ? DateTime::createFromFormat(%2$s, %1$s) : new DateTime(%1$s))->format(\'m-d\') == (new DateTime())->format(\'m-d\'))', $birthdate, $format); return sprintf('isset(%1$s) && is_a(%1$s, \'DateTime\') && %1$s->format(\'m-d\') == (new \\DateTime())->format(\'m-d\')', $birthdate);
}, function ($arguments, $birthdate, $format = null) }, function ($arguments, DateTime $birthdate)
{ {
if (!($birthdate ?? false)) if (!($birthdate ?? false))
{ {
return false; return false;
} }
$birthdate = $format ? DateTime::createFromFormat($format, $birthdate) : new DateTime($birthdate); return $birthdate->format('m-d') == (new DateTime())->format('m-d');
return ($birthdate && ($birthdate->format('m-d') == (new DateTime())->format('m-d')));
}); });
return [ return [
@ -63,10 +61,11 @@ class ExpressionProvider implements ExpressionFunctionProviderInterface
ExpressionFunction::fromPhp('mb_substr', 'substr'), ExpressionFunction::fromPhp('mb_substr', 'substr'),
ExpressionFunction::fromPhp('mb_strlen', 'strlen'), ExpressionFunction::fromPhp('mb_strlen', 'strlen'),
ExpressionFunction::fromPhp('abs', 'abs'), ExpressionFunction::fromPhp('abs', 'abs'),
ExpressionFunction::fromPhp('strtotime', 'strtotime'), ExpressionFunction::fromPhp('date_create', 'date'),
ExpressionFunction::fromPhp('date', 'date'), ExpressionFunction::fromPhp('date_create_from_format', 'date_from_format'),
ExpressionFunction::fromPhp('intval', 'intval'), ExpressionFunction::fromPhp('intval', 'intval'),
ExpressionFunction::fromPhp('boolval', 'boolval'), ExpressionFunction::fromPhp('boolval', 'boolval'),
ExpressionFunction::fromPhp('count', 'count'),
]; ];
} }
} }

View File

@ -43,18 +43,15 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
{ {
try try
{ {
$this->expression_language->parse($condition, array_keys($data)); //Use @ to hide notices on non defined vars
@$this->expression_language->parse($condition, array_keys($data));
return true; return true;
} }
catch (\Exception $e) catch (\Throwable $t) //Catch both, exceptions and php error
{ {
return false; return false;
} }
catch (\Throwable $t)
{
//Just ignore non critical php warning and notice
}
} }
/** /**
@ -69,11 +66,12 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
{ {
try try
{ {
//Use @ to hide notices on non defined vars
@$result = $this->expression_language->evaluate($condition, $data); @$result = $this->expression_language->evaluate($condition, $data);
return (bool) $result; return (bool) $result;
} }
catch (\Exception $e) catch (\Throwable $t) //Catch both, exceptions and php error
{ {
return null; return null;
} }