diff --git a/app/Http/Controllers/RuleController.php b/app/Http/Controllers/RuleController.php index f6410c7894..f378bc448d 100644 --- a/app/Http/Controllers/RuleController.php +++ b/app/Http/Controllers/RuleController.php @@ -98,6 +98,15 @@ class RuleController extends Controller } unset($key, $ruleTriggers); + // array of valid values for actions + $ruleActions = array_keys(Config::get('firefly.rule-actions')); + $possibleActions = []; + foreach ($ruleActions as $key) { + $possibleActions[$key] = trans('firefly.rule_action_' . $key . '_choice'); + } + unset($key, $ruleActions); + + // has old input? if (Input::old()) { // process old triggers. @@ -107,7 +116,7 @@ class RuleController extends Controller $triggerCount++; $oldTrigger = $entry; $oldValue = Input::old('rule-trigger-value')[$index]; - $oldChecked = isset(Input::old('rule-action-value')[$index]) ? true : false; + $oldChecked = isset(Input::old('rule-trigger-stop')[$index]) ? true : false; $oldTriggers[] = view( 'rules.partials.trigger', [ @@ -120,12 +129,28 @@ class RuleController extends Controller )->render(); $newIndex++; } -// echo '
'; -// var_dump(Input::old()); -// var_dump($oldTriggers); -// exit; - } + // process old actions + $newIndex = 0; + foreach (Input::old('rule-action') as $index => $entry) { + $count = ($newIndex + 1); + $actionCount++; + $oldAction = $entry; + $oldValue = Input::old('rule-action-value')[$index]; + $oldChecked = isset(Input::old('rule-action-stop')[$index]) ? true : false; + $oldActions[] = view( + 'rules.partials.action', + [ + 'oldTrigger' => $oldAction, + 'oldValue' => $oldValue, + 'oldChecked' => $oldChecked, + 'actions' => $possibleActions, + 'count' => $count + ] + )->render(); + $newIndex++; + } + } $subTitleIcon = 'fa-clone'; $subTitle = trans('firefly.make_new_rule', ['title' => $ruleGroup->title]); @@ -143,9 +168,11 @@ class RuleController extends Controller } Session::forget('rules.rule.create.fromStore'); Session::flash('gaEventCategory', 'rules'); - Session::flash('gaEventAction', 'create-rule-group'); + Session::flash('gaEventAction', 'create-rule'); - return view('rules.rule.create', compact('subTitleIcon','oldTriggers', 'triggerCount', 'actionCount', 'ruleGroup', 'subTitle', 'journalTriggers')); + return view( + 'rules.rule.create', compact('subTitleIcon', 'oldTriggers', 'oldActions', 'triggerCount', 'actionCount', 'ruleGroup', 'subTitle', 'journalTriggers') + ); } /** diff --git a/app/Http/Requests/RuleFormRequest.php b/app/Http/Requests/RuleFormRequest.php index 521ecf3d43..e8f18055ab 100644 --- a/app/Http/Requests/RuleFormRequest.php +++ b/app/Http/Requests/RuleFormRequest.php @@ -38,21 +38,26 @@ class RuleFormRequest extends Request { $validTriggers = array_keys(Config::get('firefly.rule-triggers')); + $validActions = array_keys(Config::get('firefly.rule-actions')); + + // some actions require text: + $contextActions = Config::get('firefly.rule-actions-text'); $titleRule = 'required|between:1,100|uniqueObjectForUser:rule_groups,title'; if (RuleGroup::find(Input::get('id'))) { $titleRule = 'required|between:1,100|uniqueObjectForUser:rule_groups,title,' . intval(Input::get('id')); } - return [ - 'title' => $titleRule, - 'description' => 'between:1,5000', - 'stop_processing' => 'boolean', - 'trigger' => 'required|in:store-journal,update-journal', - 'rule-trigger.*' => 'required|in:' . join(',', $validTriggers), - 'rule-trigger-value.*' => 'required|min:1' - - + $rules = [ + 'title' => $titleRule, + 'description' => 'between:1,5000', + 'stop_processing' => 'boolean', + 'trigger' => 'required|in:store-journal,update-journal', + 'rule-trigger.*' => 'required|in:' . join(',', $validTriggers), + 'rule-trigger-value.*' => 'required|min:1', + 'rule-action.*' => 'required|in:' . join(',', $validActions), + 'rule-action-value.*' => 'required_if:rule-action.*,' . join(',', $contextActions) ]; + } } diff --git a/config/firefly.php b/config/firefly.php index ddef1a0805..952f9463e6 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -170,7 +170,7 @@ return [ 'end_date' => 'FireflyIII\Support\Binder\Date' ], - 'rule-triggers' => [ + 'rule-triggers' => [ 'user_action' => 'FireflyIII\Rules\Triggers\UserAction', 'from_account_starts' => 'FireflyIII\Rules\Triggers\FromAccountStarts', 'from_account_ends' => 'FireflyIII\Rules\Triggers\FromAccountEnds', @@ -189,7 +189,7 @@ return [ 'description_contains' => 'FireflyIII\Rules\Triggers\DescriptionContains', 'description_is' => 'FireflyIII\Rules\Triggers\DescriptionIs', ], - 'rule-actions' => [ + 'rule-actions' => [ 'set_category' => 'FireflyIII\Rules\Actions\SetCategory', 'clear_category' => 'FireflyIII\Rules\Actions\ClearCategory', 'set_budget' => 'FireflyIII\Rules\Actions\SetBudget', @@ -201,5 +201,15 @@ return [ 'append_description' => 'FireflyIII\Rules\Actions\AppendDescription', 'prepend_description' => 'FireflyIII\Rules\Actions\PrependDescription', ], + // all rule actions that require text input: + 'rule-actions-text' => [ + 'set_category', + 'set_budget', + 'add_tag', + 'remove_tag', + 'set_description', + 'append_description', + 'prepend_description', + ] ]; diff --git a/public/js/rules/create.js b/public/js/rules/create.js index 9182c31001..5fe38cb550 100644 --- a/public/js/rules/create.js +++ b/public/js/rules/create.js @@ -14,8 +14,11 @@ $(function () { if (triggerCount == 0) { addNewTrigger(); } + if (actionCount == 0) { + addNewAction(); + } + - addNewAction(); $('.add_rule_trigger').click(function () { addNewTrigger(); diff --git a/resources/views/rules/partials/action.twig b/resources/views/rules/partials/action.twig index edb4d77bf5..e7ec792c79 100644 --- a/resources/views/rules/partials/action.twig +++ b/resources/views/rules/partials/action.twig @@ -3,24 +3,37 @@- {% if errors.has('XXX') %} + {% if errors.has('rule-action.'~count) %} - {{ errors.first('xxxx') }}
+{{ errors.first('rule-action.'~count) }}
{% endif %}- + + + {% if errors.has(('rule-action-value.'~count)) %} + + {{ errors.first('rule-action-value.'~count) }} +
+ {% endif %}diff --git a/resources/views/rules/rule/create.twig b/resources/views/rules/rule/create.twig index 5a35d69925..8c907753f4 100644 --- a/resources/views/rules/rule/create.twig +++ b/resources/views/rules/rule/create.twig @@ -84,7 +84,9 @@ - + {% for action in oldActions %} + {{ action|raw }} + {% endfor %}