* * This source file is subject to the GPL-3.0 license that is bundled * with this source code in the file LICENSE. */ namespace controllers\internals; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\ExpressionLanguage\ExpressionFunction; /** * Class to analyse rules used by conditional groups */ class Ruler extends \descartes\InternalController { private $expression_language; /** * Constructor */ public function __construct () { $this->expression_language = new ExpressionLanguage(); //Add custom functions $this->expression_language->registerProvider(new ExpressionProvider()); } /** * Verify if a condition is valid. i.e we can evaluate it without error. * @param string $condition : The condition to evaluate. * @param array $datas : The datas to made available to condition * @return bool : false if invalid, true else */ public function validate_condition (string $condition, array $datas = []) : bool { try { $this->expression_language->evaluate($condition, $datas); return true; } catch (\Exception $e) { return false; } } /** * Evaluate a condition * @param string $condition : The condition to evaluate. * @param array $datas : The datas to made available to condition * @return ?bool : false if invalid, true else, null only on error */ public function evaluate_condition (string $condition, array $datas = []) : ?bool { try { $result = $this->expression_language->evaluate($condition, $datas); return (bool) $result; } catch (\Exception $e) { return null; } } }