feat: surface expression validation errors when creating or updating rules

This commit is contained in:
Michael Thomas
2024-03-07 12:23:32 -05:00
parent b572c1dcd3
commit 438f602961
7 changed files with 58 additions and 14 deletions

View File

@@ -35,6 +35,8 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use FireflyIII\Services\Password\Verifier;
use FireflyIII\Support\ParseDateString;
use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator;
use FireflyIII\TransactionRules\Factory\ExpressionLanguageFactory;
use FireflyIII\User;
use Illuminate\Validation\Validator;
use PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException;
@@ -253,6 +255,31 @@ class FireflyValidator extends Validator
return 1 === $count;
}
public function validateRuleActionExpression(string $attribute, string $value = null): bool
{
$value ??= '';
$el = ExpressionLanguageFactory::get();
$evaluator = new ActionExpressionEvaluator($el, $value);
return $evaluator->isValid();
}
public function replaceRuleActionExpression(string $message, string $attribute): string
{
$value = $this->getValue($attribute);
$el = ExpressionLanguageFactory::get();
$evaluator = new ActionExpressionEvaluator($el, $value);
$err = $evaluator->getValidationError();
if ($err == null) {
return $message;
}
return str_replace(":error", $err->getMessage(), $message);
}
public function validateRuleActionValue(string $attribute, string $value = null): bool
{
// first, get the index from this string:
@@ -268,6 +295,11 @@ class FireflyValidator extends Validator
return false;
}
// if value is an expression, assume valid
if (str_starts_with($value, '=')) {
return true;
}
// if it's set_budget, verify the budget name:
if ('set_budget' === $actionType) {
/** @var BudgetRepositoryInterface $repository */