mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-30 02:26:58 +00:00
Make sure rules respect active flag.
This commit is contained in:
@@ -46,31 +46,27 @@ class UpdateRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function getAll(): array
|
public function getAll(): array
|
||||||
{
|
{
|
||||||
$strict = null;
|
$fields = [
|
||||||
$active = null;
|
'title' => ['title', 'string'],
|
||||||
$stopProcessing = null;
|
'description' => ['description', 'nlString'],
|
||||||
if (null !== $this->get('active')) {
|
'rule_group_id' => ['rule_group_id', 'integer'],
|
||||||
$active = $this->boolean('active');
|
'trigger' => ['trigger', 'string'],
|
||||||
|
'strict' => ['strict', 'boolean'],
|
||||||
|
'stop_processing' => ['stop_processing', 'boolean'],
|
||||||
|
'active' => ['active', 'boolean'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$return = $this->getAllData($fields);
|
||||||
|
$triggers = $this->getRuleTriggers();
|
||||||
|
$actions = $this->getRuleActions();
|
||||||
|
if(null !== $triggers) {
|
||||||
|
$return['triggers'] = $triggers;
|
||||||
}
|
}
|
||||||
if (null !== $this->get('strict')) {
|
if(null !== $actions) {
|
||||||
$strict = $this->boolean('strict');
|
$return['actions'] = $actions;
|
||||||
}
|
|
||||||
if (null !== $this->get('stop_processing')) {
|
|
||||||
$stopProcessing = $this->boolean('stop_processing');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return $return;
|
||||||
'title' => $this->nullableString('title'),
|
|
||||||
'description' => $this->nullableString('description'),
|
|
||||||
'rule_group_id' => $this->nullableInteger('rule_group_id'),
|
|
||||||
'rule_group_title' => $this->nullableString('rule_group_title'),
|
|
||||||
'trigger' => $this->nullableString('trigger'),
|
|
||||||
'strict' => $strict,
|
|
||||||
'stop_processing' => $stopProcessing,
|
|
||||||
'active' => $active,
|
|
||||||
'triggers' => $this->getRuleTriggers(),
|
|
||||||
'actions' => $this->getRuleActions(),
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -85,11 +81,13 @@ class UpdateRequest extends FormRequest
|
|||||||
$return = [];
|
$return = [];
|
||||||
if (is_array($triggers)) {
|
if (is_array($triggers)) {
|
||||||
foreach ($triggers as $trigger) {
|
foreach ($triggers as $trigger) {
|
||||||
|
$active = array_key_exists('active', $trigger) ? $trigger['active'] : true;
|
||||||
|
$stopProcessing= array_key_exists('stop_processing', $trigger) ? $trigger['stop_processing'] : false;
|
||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $trigger['type'],
|
'type' => $trigger['type'],
|
||||||
'value' => $trigger['value'],
|
'value' => $trigger['value'],
|
||||||
'active' => $this->convertBoolean((string) ($trigger['active'] ?? 'false')),
|
'active' => $active,
|
||||||
'stop_processing' => $this->convertBoolean((string) ($trigger['stop_processing'] ?? 'false')),
|
'stop_processing' => $stopProcessing,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -46,7 +46,6 @@ class UpdateRequest extends FormRequest
|
|||||||
public function getAll(): array
|
public function getAll(): array
|
||||||
{
|
{
|
||||||
// return nothing that isn't explicitely in the array:
|
// return nothing that isn't explicitely in the array:
|
||||||
// this is the way
|
|
||||||
$fields = [
|
$fields = [
|
||||||
'name' => ['name', 'string'],
|
'name' => ['name', 'string'],
|
||||||
'code' => ['code', 'string'],
|
'code' => ['code', 'string'],
|
||||||
@@ -56,7 +55,6 @@ class UpdateRequest extends FormRequest
|
|||||||
'enabled' => ['enabled', 'boolean'],
|
'enabled' => ['enabled', 'boolean'],
|
||||||
];
|
];
|
||||||
|
|
||||||
// this is the way.
|
|
||||||
$return = $this->getAllData($fields);
|
$return = $this->getAllData($fields);
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
|
@@ -30,7 +30,6 @@ use FireflyIII\Models\RuleTrigger;
|
|||||||
use FireflyIII\Support\Search\OperatorQuerySearch;
|
use FireflyIII\Support\Search\OperatorQuerySearch;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Log;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class RuleRepository.
|
* Class RuleRepository.
|
||||||
@@ -319,7 +318,7 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
$ruleAction = new RuleAction;
|
$ruleAction = new RuleAction;
|
||||||
$ruleAction->rule()->associate($rule);
|
$ruleAction->rule()->associate($rule);
|
||||||
$ruleAction->order = $values['order'];
|
$ruleAction->order = $values['order'];
|
||||||
$ruleAction->active = true;
|
$ruleAction->active = $values['active'];
|
||||||
$ruleAction->stop_processing = $values['stop_processing'];
|
$ruleAction->stop_processing = $values['stop_processing'];
|
||||||
$ruleAction->action_type = $values['action'];
|
$ruleAction->action_type = $values['action'];
|
||||||
$ruleAction->action_value = $values['value'] ?? '';
|
$ruleAction->action_value = $values['value'] ?? '';
|
||||||
@@ -339,7 +338,7 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
$ruleTrigger = new RuleTrigger;
|
$ruleTrigger = new RuleTrigger;
|
||||||
$ruleTrigger->rule()->associate($rule);
|
$ruleTrigger->rule()->associate($rule);
|
||||||
$ruleTrigger->order = $values['order'];
|
$ruleTrigger->order = $values['order'];
|
||||||
$ruleTrigger->active = true;
|
$ruleTrigger->active = $values['active'];
|
||||||
$ruleTrigger->stop_processing = $values['stop_processing'];
|
$ruleTrigger->stop_processing = $values['stop_processing'];
|
||||||
$ruleTrigger->trigger_type = $values['action'];
|
$ruleTrigger->trigger_type = $values['action'];
|
||||||
$ruleTrigger->trigger_value = $values['value'] ?? '';
|
$ruleTrigger->trigger_value = $values['value'] ?? '';
|
||||||
@@ -357,24 +356,37 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
public function update(Rule $rule, array $data): Rule
|
public function update(Rule $rule, array $data): Rule
|
||||||
{
|
{
|
||||||
// update rule:
|
// update rule:
|
||||||
|
$fields = [
|
||||||
$rule->rule_group_id = $data['rule_group_id'] ?? $rule->rule_group_id;
|
'title',
|
||||||
$rule->active = $data['active'] ?? $rule->active;
|
'description',
|
||||||
$rule->stop_processing = $data['stop_processing'] ?? $rule->stop_processing;
|
'strict',
|
||||||
$rule->title = $data['title'] ?? $rule->title;
|
'rule_group_id',
|
||||||
$rule->strict = $data['strict'] ?? $rule->strict;
|
'active',
|
||||||
$rule->description = $data['description'] ?? $rule->description;
|
'stop_processing',
|
||||||
|
];
|
||||||
|
foreach ($fields as $field) {
|
||||||
|
if (array_key_exists($field, $data)) {
|
||||||
|
$rule->$field = $data[$field];
|
||||||
|
}
|
||||||
|
}
|
||||||
$rule->save();
|
$rule->save();
|
||||||
|
// update the triggers:
|
||||||
if (null !== $data['triggers']) {
|
if (array_key_exists('trigger', $data) && 'update-journal' === $data['trigger']) {
|
||||||
|
$this->setRuleTrigger('update-journal', $rule);
|
||||||
|
}
|
||||||
|
if (array_key_exists('trigger', $data) && 'store-journal' === $data['trigger']) {
|
||||||
|
$this->setRuleTrigger('store-journal', $rule);
|
||||||
|
}
|
||||||
|
if (array_key_exists('triggers', $data)) {
|
||||||
// delete triggers:
|
// delete triggers:
|
||||||
$rule->ruleTriggers()->delete();
|
$rule->ruleTriggers()->where('trigger_type', '!=', 'user_action')->delete();
|
||||||
|
|
||||||
// recreate triggers:
|
// recreate triggers:
|
||||||
$this->storeTriggers($rule, $data);
|
$this->storeTriggers($rule, $data);
|
||||||
}
|
}
|
||||||
if (null !== $data['actions']) {
|
|
||||||
// delete actions:
|
if (array_key_exists('actions', $data)) {
|
||||||
|
// delete triggers:
|
||||||
$rule->ruleActions()->delete();
|
$rule->ruleActions()->delete();
|
||||||
|
|
||||||
// recreate actions:
|
// recreate actions:
|
||||||
@@ -384,6 +396,30 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
return $rule;
|
return $rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $moment
|
||||||
|
* @param Rule $rule
|
||||||
|
*/
|
||||||
|
private function setRuleTrigger(string $moment, Rule $rule): void
|
||||||
|
{
|
||||||
|
/** @var RuleTrigger $trigger */
|
||||||
|
$trigger = $rule->ruleTriggers()->where('trigger_type', 'user_action')->first();
|
||||||
|
if (null !== $trigger) {
|
||||||
|
$trigger->trigger_value = $moment;
|
||||||
|
$trigger->save();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$trigger = new RuleTrigger;
|
||||||
|
$trigger->order = 0;
|
||||||
|
$trigger->trigger_type = 'user_action';
|
||||||
|
$trigger->trigger_value = $moment;
|
||||||
|
$trigger->rule_id = $rule->id;
|
||||||
|
$trigger->active = true;
|
||||||
|
$trigger->stop_processing = false;
|
||||||
|
$trigger->save();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Rule $rule
|
* @param Rule $rule
|
||||||
* @param array $data
|
* @param array $data
|
||||||
@@ -396,16 +432,18 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
foreach ($data['actions'] as $action) {
|
foreach ($data['actions'] as $action) {
|
||||||
$value = $action['value'] ?? '';
|
$value = $action['value'] ?? '';
|
||||||
$stopProcessing = $action['stop_processing'] ?? false;
|
$stopProcessing = $action['stop_processing'] ?? false;
|
||||||
|
$active = $action['active'] ?? true;
|
||||||
$actionValues = [
|
$actionValues = [
|
||||||
'action' => $action['type'],
|
'action' => $action['type'],
|
||||||
'value' => $value,
|
'value' => $value,
|
||||||
'stop_processing' => $stopProcessing,
|
'stop_processing' => $stopProcessing,
|
||||||
'order' => $order,
|
'order' => $order,
|
||||||
|
'active' => $active,
|
||||||
];
|
];
|
||||||
app('telemetry')->feature('rules.actions.uses_action', $action['type']);
|
app('telemetry')->feature('rules.actions.uses_action', $action['type']);
|
||||||
|
|
||||||
$this->storeAction($rule, $actionValues);
|
$this->storeAction($rule, $actionValues);
|
||||||
|
++$order;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -420,25 +458,17 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
private function storeTriggers(Rule $rule, array $data): bool
|
private function storeTriggers(Rule $rule, array $data): bool
|
||||||
{
|
{
|
||||||
$order = 1;
|
$order = 1;
|
||||||
$stopProcessing = false;
|
|
||||||
|
|
||||||
$triggerValues = [
|
|
||||||
'action' => 'user_action',
|
|
||||||
'value' => $data['trigger'],
|
|
||||||
'stop_processing' => $stopProcessing,
|
|
||||||
'order' => $order,
|
|
||||||
];
|
|
||||||
|
|
||||||
$this->storeTrigger($rule, $triggerValues);
|
|
||||||
foreach ($data['triggers'] as $trigger) {
|
foreach ($data['triggers'] as $trigger) {
|
||||||
$value = $trigger['value'] ?? '';
|
$value = $trigger['value'] ?? '';
|
||||||
$stopProcessing = $trigger['stop_processing'] ?? false;
|
$stopProcessing = $trigger['stop_processing'] ?? false;
|
||||||
|
$active = $trigger['active'] ?? true;
|
||||||
|
|
||||||
$triggerValues = [
|
$triggerValues = [
|
||||||
'action' => $trigger['type'],
|
'action' => $trigger['type'],
|
||||||
'value' => $value,
|
'value' => $value,
|
||||||
'stop_processing' => $stopProcessing,
|
'stop_processing' => $stopProcessing,
|
||||||
'order' => $order,
|
'order' => $order,
|
||||||
|
'active' => $active,
|
||||||
];
|
];
|
||||||
app('telemetry')->feature('rules.triggers.uses_trigger', $trigger['type']);
|
app('telemetry')->feature('rules.triggers.uses_trigger', $trigger['type']);
|
||||||
|
|
||||||
@@ -514,6 +544,7 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $filtered;
|
return $filtered;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,6 +571,7 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $filtered;
|
return $filtered;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -562,6 +594,7 @@ class RuleRepository implements RuleRepositoryInterface
|
|||||||
$params[] = sprintf('%s:"%s"', OperatorQuerySearch::getRootOperator($trigger->trigger_type), $trigger->trigger_value);
|
$params[] = sprintf('%s:"%s"', OperatorQuerySearch::getRootOperator($trigger->trigger_type), $trigger->trigger_value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode(' ', $params);
|
return implode(' ', $params);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -61,7 +61,7 @@ class RuleTransformer extends AbstractTransformer
|
|||||||
$this->ruleRepository->setUser($rule->user);
|
$this->ruleRepository->setUser($rule->user);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'id' => (int)$rule->id,
|
'id' => (string)$rule->id,
|
||||||
'created_at' => $rule->created_at->toAtomString(),
|
'created_at' => $rule->created_at->toAtomString(),
|
||||||
'updated_at' => $rule->updated_at->toAtomString(),
|
'updated_at' => $rule->updated_at->toAtomString(),
|
||||||
'rule_group_id' => (string) $rule->rule_group_id,
|
'rule_group_id' => (string) $rule->rule_group_id,
|
||||||
|
Reference in New Issue
Block a user