mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 10:47:00 +00:00 
			
		
		
		
	fix: migrate action expression validation to separate rule class
This commit is contained in:
		| @@ -25,7 +25,6 @@ namespace FireflyIII\Api\V1\Controllers\Models\Rule; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Models\Rule\ValidateExpressionRequest; | ||||
| use FireflyIII\TransactionRules\Expressions\ActionExpression; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -43,18 +42,8 @@ class ExpressionController extends Controller | ||||
|      */ | ||||
|     public function validateExpression(ValidateExpressionRequest $request): JsonResponse | ||||
|     { | ||||
|         $value = $request->getExpression(); | ||||
|         $expr = new ActionExpression($value); | ||||
| 
 | ||||
|         if ($expr->isValid()) { | ||||
|             return response()->json([ | ||||
|                 "valid" => true, | ||||
|             ]); | ||||
|         } else { | ||||
|             return response()->json([ | ||||
|                 "valid" => false, | ||||
|                 "error" => $expr->getValidationError()->getMessage() | ||||
|             ]); | ||||
|         } | ||||
|         return response()->json([ | ||||
|             "valid" => true, | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Rule; | ||||
| 
 | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidActionExpression; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Support\Request\GetRuleConfiguration; | ||||
| @@ -123,7 +124,7 @@ class StoreRequest extends FormRequest | ||||
|             'triggers.*.stop_processing' => [new IsBoolean()], | ||||
|             'triggers.*.active'          => [new IsBoolean()], | ||||
|             'actions.*.type'             => 'required|in:'.implode(',', $validActions), | ||||
|             'actions.*.value'            => 'required_if:actions.*.type,'.$contextActions.'|ruleActionExpression|ruleActionValue', | ||||
|             'actions.*.value'            => ['required_if:actions.*.type,'.$contextActions, new IsValidActionExpression(), 'ruleActionValue'], | ||||
|             'actions.*.stop_processing'  => [new IsBoolean()], | ||||
|             'actions.*.active'           => [new IsBoolean()], | ||||
|             'strict'                     => [new IsBoolean()], | ||||
|   | ||||
| @@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests\Models\Rule; | ||||
| 
 | ||||
| use FireflyIII\Models\Rule; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidActionExpression; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Support\Request\GetRuleConfiguration; | ||||
| @@ -140,7 +141,7 @@ class UpdateRequest extends FormRequest | ||||
|             'triggers.*.stop_processing' => [new IsBoolean()], | ||||
|             'triggers.*.active'          => [new IsBoolean()], | ||||
|             'actions.*.type'             => 'required|in:'.implode(',', $validActions), | ||||
|             'actions.*.value'            => 'required_if:actions.*.type,'.$contextActions.'|ruleActionExpression|ruleActionValue', | ||||
|             'actions.*.value'            => ['required_if:actions.*.type,'.$contextActions, new IsValidActionExpression(), 'ruleActionValue'], | ||||
|             'actions.*.stop_processing'  => [new IsBoolean()], | ||||
|             'actions.*.active'           => [new IsBoolean()], | ||||
|             'strict'                     => [new IsBoolean()], | ||||
|   | ||||
| @@ -24,23 +24,42 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Rule; | ||||
| 
 | ||||
| use FireflyIII\Rules\IsValidActionExpression; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Validation\ValidationException; | ||||
| 
 | ||||
| /** | ||||
|  * Class ValidateExpressionRequest | ||||
|  */ | ||||
| class ValidateExpressionRequest extends FormRequest | ||||
| { | ||||
|     use ConvertsDataTypes; | ||||
|     use ChecksLogin; | ||||
| 
 | ||||
|     /** | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getExpression(): string | ||||
|     public function rules(): array | ||||
|     { | ||||
|         return $this->convertString("expression"); | ||||
|         return ['expression' => ['required', new IsValidActionExpression()]]; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Handle a failed validation attempt. | ||||
|      * | ||||
|      * @param  \Illuminate\Contracts\Validation\Validator  $validator | ||||
|      * @return void | ||||
|      * | ||||
|      * @throws \Illuminate\Validation\ValidationException | ||||
|      */ | ||||
|     protected function failedValidation(Validator $validator): void | ||||
|     { | ||||
|         $error = $validator->errors()->first('expression'); | ||||
| 
 | ||||
|         throw new ValidationException( | ||||
|             $validator, | ||||
|             response()->json([ | ||||
|                 'valid' => false, | ||||
|                 'error' => $error | ||||
|             ], 200) | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user