This commit is contained in:
James Cole 2018-10-14 17:38:26 +02:00
parent 329b34f7d1
commit db7e3d725e
3 changed files with 58 additions and 25 deletions

View File

@ -75,32 +75,31 @@ class RuleFormRequest extends Request
$validTriggers = array_keys(config('firefly.rule-triggers')); $validTriggers = array_keys(config('firefly.rule-triggers'));
$validActions = array_keys(config('firefly.rule-actions')); $validActions = array_keys(config('firefly.rule-actions'));
// some actions require text: // some actions require text (aka context):
$contextActions = implode(',', config('firefly.rule-actions-text')); $contextActions = implode(',', config('firefly.context-rule-actions'));
$titleRule = 'required|between:1,100|uniqueObjectForUser:rules,title'; // some triggers require text (aka context):
/** @var Rule $rule */ $contextTriggers = implode(',', config('firefly.context-rule-triggers'));
$rule = $this->route()->parameter('rule');
if (null !== $rule) { // initial set of rules:
$titleRule = 'required|between:1,100|uniqueObjectForUser:rules,title,' . $rule->id;
}
$rules = [ $rules = [
'title' => $titleRule, 'title' => 'required|between:1,100|uniqueObjectForUser:rules,title',
'description' => 'between:1,5000|nullable', 'description' => 'between:1,5000|nullable',
'stop_processing' => 'boolean', 'stop_processing' => 'boolean',
'rule_group_id' => 'required|belongsToUser:rule_groups', 'rule_group_id' => 'required|belongsToUser:rule_groups',
'trigger' => 'required|in:store-journal,update-journal', 'trigger' => 'required|in:store-journal,update-journal',
'rule_triggers.*.name' => 'required|in:' . implode(',', $validTriggers), 'rule_triggers.*.name' => 'required|in:' . implode(',', $validTriggers),
'rule_triggers.*.value' => 'required|min:1|ruleTriggerValue', 'rule_triggers.*.value' => sprintf('required_if:rule_triggers.*.name,%s|min:1|ruleTriggerValue', $contextTriggers),
'rule-actions.*.name' => 'required|in:' . implode(',', $validActions), 'rule-actions.*.name' => 'required|in:' . implode(',', $validActions),
'rule_actions.*.value' => sprintf('required_if:rule_actions.*.name,%s|min:1|ruleActionValue', $contextActions),
'strict' => 'in:0,1', 'strict' => 'in:0,1',
]; ];
// since Laravel does not support this stuff yet, here's a trick.
for ($i = 0; $i < 10; ++$i) { /** @var Rule $rule */
$key = sprintf('rule_actions.%d.value', $i); $rule = $this->route()->parameter('rule');
$rule = sprintf('required-if:rule_actions.%d.name,%s|ruleActionValue', $i, $contextActions);
$rules[$key] = $rule; if (null !== $rule) {
$rules['title'] = 'required|between:1,100|uniqueObjectForUser:rules,title,' . $rule->id;
} }
return $rules; return $rules;

View File

@ -313,10 +313,8 @@ class FireflyValidator extends Validator
* *
* @return bool * @return bool
*/ */
public function validateRuleTriggerValue(string $attribute, string $value): bool public function validateRuleTriggerValue(string $attribute, string $value = null): bool
{ {
//
// first, get the index from this string: // first, get the index from this string:
$parts = explode('.', $attribute); $parts = explode('.', $attribute);
$index = (int)($parts[1] ?? '0'); $index = (int)($parts[1] ?? '0');

View File

@ -375,23 +375,59 @@ return [
'convert_deposit' => ConvertToDeposit::class, 'convert_deposit' => ConvertToDeposit::class,
'convert_transfer' => ConvertToTransfer::class, 'convert_transfer' => ConvertToTransfer::class,
], ],
'rule-actions-text' => [ 'context-rule-actions' => [
'set_category', 'set_category',
'set_budget', 'set_budget',
'add_tag', 'add_tag',
'remove_tag', 'remove_tag',
'link_to_bill',
'set_description', 'set_description',
'append_description', 'append_description',
'prepend_description', 'prepend_description',
'set_source_account',
'set_destination_account',
'set_notes',
'append_notes',
'prepend_notes',
'link_to_bill',
'convert_withdrawal',
'convert_deposit',
'convert_transfer',
], ],
'test-triggers' => [ 'context-rule-triggers' => [
'from_account_starts',
'from_account_ends',
'from_account_is',
'from_account_contains',
'to_account_starts',
'to_account_ends',
'to_account_is',
'to_account_contains',
'amount_less',
'amount_exactly',
'amount_more',
'description_starts',
'description_ends',
'description_contains',
'description_is',
'transaction_type',
'category_is',
'budget_is',
'tag_is',
'currency_is',
'notes_contain',
'notes_start',
'notes_end',
'notes_are',
],
'test-triggers' => [
'limit' => 10, 'limit' => 10,
'range' => 200, 'range' => 200,
], ],
'default_currency' => 'EUR', 'default_currency' => 'EUR',
'default_language' => 'en_US', 'default_language' => 'en_US',
'search_modifiers' => ['amount_is', 'amount', 'amount_max', 'amount_min', 'amount_less', 'amount_more', 'source', 'destination', 'category', 'search_modifiers' => ['amount_is', 'amount', 'amount_max', 'amount_min', 'amount_less', 'amount_more', 'source', 'destination', 'category',
'budget', 'bill', 'type', 'date', 'date_before', 'date_after', 'on', 'before', 'after'], 'budget', 'bill', 'type', 'date', 'date_before', 'date_after', 'on', 'before', 'after'],
// tag notes has_attachments // tag notes has_attachments
]; ];