James Cole
2024-04-20 07:19:15 +02:00
parent 8e7d42201f
commit fd5d2d57a8
4 changed files with 36 additions and 25 deletions

View File

@@ -71,8 +71,9 @@ class StoreRequest extends FormRequest
if (is_array($triggers)) { if (is_array($triggers)) {
foreach ($triggers as $trigger) { foreach ($triggers as $trigger) {
$return[] = [ $return[] = [
'type' => $trigger['type'], 'type' => $trigger['type'] ?? '',
'value' => $trigger['value'], 'value' => $trigger['value'] ?? null,
'prohibited' => $this->convertBoolean((string)($trigger['prohibited'] ?? 'false')),
'active' => $this->convertBoolean((string)($trigger['active'] ?? 'true')), 'active' => $this->convertBoolean((string)($trigger['active'] ?? 'true')),
'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')), 'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')),
]; ];
@@ -105,8 +106,8 @@ class StoreRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$validTriggers = $this->getTriggers(); $validTriggers = $this->getTriggers();
$validActions = array_keys(config('firefly.rule-actions')); $validActions = array_keys(config('firefly.rule-actions'));
// some triggers and actions require text: // some triggers and actions require text:
$contextTriggers = implode(',', $this->getTriggersWithContext()); $contextTriggers = implode(',', $this->getTriggersWithContext());
@@ -118,11 +119,11 @@ class StoreRequest extends FormRequest
'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title', 'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title',
'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title', 'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title',
'trigger' => 'required|in:store-journal,update-journal', 'trigger' => 'required|in:store-journal,update-journal',
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers), 'triggers.*.type' => 'required|in:' . implode(',', $validTriggers),
'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024', 'triggers.*.value' => 'required_if:actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue|max:1024',
'triggers.*.stop_processing' => [new IsBoolean()], 'triggers.*.stop_processing' => [new IsBoolean()],
'triggers.*.active' => [new IsBoolean()], 'triggers.*.active' => [new IsBoolean()],
'actions.*.type' => 'required|in:'.implode(',', $validActions), 'actions.*.type' => 'required|in:' . implode(',', $validActions),
'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'], 'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
'actions.*.stop_processing' => [new IsBoolean()], 'actions.*.stop_processing' => [new IsBoolean()],
'actions.*.active' => [new IsBoolean()], 'actions.*.active' => [new IsBoolean()],
@@ -181,10 +182,10 @@ class StoreRequest extends FormRequest
*/ */
protected function atLeastOneActiveTrigger(Validator $validator): void protected function atLeastOneActiveTrigger(Validator $validator): void
{ {
$data = $validator->getData(); $data = $validator->getData();
/** @var null|array|int|string $triggers */ /** @var null|array|int|string $triggers */
$triggers = $data['triggers'] ?? []; $triggers = $data['triggers'] ?? [];
// need at least one trigger // need at least one trigger
if (!is_countable($triggers) || 0 === count($triggers)) { if (!is_countable($triggers) || 0 === count($triggers)) {
return; return;
@@ -210,10 +211,10 @@ class StoreRequest extends FormRequest
*/ */
protected function atLeastOneActiveAction(Validator $validator): void protected function atLeastOneActiveAction(Validator $validator): void
{ {
$data = $validator->getData(); $data = $validator->getData();
/** @var null|array|int|string $actions */ /** @var null|array|int|string $actions */
$actions = $data['actions'] ?? []; $actions = $data['actions'] ?? [];
// need at least one trigger // need at least one trigger
if (!is_countable($actions) || 0 === count($actions)) { if (!is_countable($actions) || 0 === count($actions)) {
return; return;

View File

@@ -47,7 +47,7 @@ class UpdateRequest extends FormRequest
*/ */
public function getAll(): array public function getAll(): array
{ {
$fields = [ $fields = [
'title' => ['title', 'convertString'], 'title' => ['title', 'convertString'],
'description' => ['description', 'stringWithNewlines'], 'description' => ['description', 'stringWithNewlines'],
'rule_group_id' => ['rule_group_id', 'convertInteger'], 'rule_group_id' => ['rule_group_id', 'convertInteger'],
@@ -81,10 +81,12 @@ class UpdateRequest extends FormRequest
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; $active = array_key_exists('active', $trigger) ? $trigger['active'] : true;
$prohibited = array_key_exists('prohibited', $trigger) ? $trigger['prohibited'] : false;
$stopProcessing = array_key_exists('stop_processing', $trigger) ? $trigger['stop_processing'] : false; $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'],
'prohibited' => $prohibited,
'active' => $active, 'active' => $active,
'stop_processing' => $stopProcessing, 'stop_processing' => $stopProcessing,
]; ];
@@ -120,11 +122,11 @@ class UpdateRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$validTriggers = $this->getTriggers(); $validTriggers = $this->getTriggers();
$validActions = array_keys(config('firefly.rule-actions')); $validActions = array_keys(config('firefly.rule-actions'));
/** @var Rule $rule */ /** @var Rule $rule */
$rule = $this->route()->parameter('rule'); $rule = $this->route()->parameter('rule');
// some triggers and actions require text: // some triggers and actions require text:
$contextTriggers = implode(',', $this->getTriggersWithContext()); $contextTriggers = implode(',', $this->getTriggersWithContext());
@@ -136,11 +138,11 @@ class UpdateRequest extends FormRequest
'rule_group_id' => 'belongsToUser:rule_groups', 'rule_group_id' => 'belongsToUser:rule_groups',
'rule_group_title' => 'nullable|min:1|max:255|belongsToUser:rule_groups,title', 'rule_group_title' => 'nullable|min:1|max:255|belongsToUser:rule_groups,title',
'trigger' => 'in:store-journal,update-journal', 'trigger' => 'in:store-journal,update-journal',
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers), 'triggers.*.type' => 'required|in:' . implode(',', $validTriggers),
'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024', 'triggers.*.value' => 'required_if:actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue|max:1024',
'triggers.*.stop_processing' => [new IsBoolean()], 'triggers.*.stop_processing' => [new IsBoolean()],
'triggers.*.active' => [new IsBoolean()], 'triggers.*.active' => [new IsBoolean()],
'actions.*.type' => 'required|in:'.implode(',', $validActions), 'actions.*.type' => 'required|in:' . implode(',', $validActions),
'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'], 'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
'actions.*.stop_processing' => [new IsBoolean()], 'actions.*.stop_processing' => [new IsBoolean()],
'actions.*.active' => [new IsBoolean()], 'actions.*.active' => [new IsBoolean()],

View File

@@ -34,8 +34,7 @@ use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
*/ */
class RuleTransformer extends AbstractTransformer class RuleTransformer extends AbstractTransformer
{ {
/** @var RuleRepositoryInterface */ private RuleRepositoryInterface $ruleRepository;
private $ruleRepository;
/** /**
* CurrencyTransformer constructor. * CurrencyTransformer constructor.
@@ -72,7 +71,7 @@ class RuleTransformer extends AbstractTransformer
'links' => [ 'links' => [
[ [
'rel' => 'self', 'rel' => 'self',
'uri' => '/rules/'.$rule->id, 'uri' => '/rules/' . $rule->id,
], ],
], ],
]; ];
@@ -109,18 +108,27 @@ class RuleTransformer extends AbstractTransformer
if ('user_action' === $ruleTrigger->trigger_type) { if ('user_action' === $ruleTrigger->trigger_type) {
continue; continue;
} }
$triggerType = (string) $ruleTrigger->trigger_type;
$triggerValue = (string)$ruleTrigger->trigger_value; $triggerValue = (string)$ruleTrigger->trigger_value;
$needsContext = config(sprintf('search.operators.%s.needs_context', $ruleTrigger->trigger_type), true); $prohibited = false;
if(str_starts_with($triggerType, '-')) {
$prohibited = true;
$triggerType = substr($triggerType, 1);
}
$needsContext = config(sprintf('search.operators.%s.needs_context', $triggerType), true);
if (false === $needsContext) { if (false === $needsContext) {
$triggerValue = 'true'; $triggerValue = 'true';
} }
$result[] = [ $result[] = [
'id' => (string)$ruleTrigger->id, 'id' => (string)$ruleTrigger->id,
'created_at' => $ruleTrigger->created_at->toAtomString(), 'created_at' => $ruleTrigger->created_at->toAtomString(),
'updated_at' => $ruleTrigger->updated_at->toAtomString(), 'updated_at' => $ruleTrigger->updated_at->toAtomString(),
'type' => $ruleTrigger->trigger_type, 'type' => $triggerType,
'value' => $triggerValue, 'value' => $triggerValue,
'prohibited' => $prohibited,
'order' => $ruleTrigger->order, 'order' => $ruleTrigger->order,
'active' => $ruleTrigger->active, 'active' => $ruleTrigger->active,
'stop_processing' => $ruleTrigger->stop_processing, 'stop_processing' => $ruleTrigger->stop_processing,

View File

@@ -118,7 +118,7 @@ return [
// see cer.php for exchange rates feature flag. // see cer.php for exchange rates feature flag.
], ],
'version' => 'develop/2024-04-18', 'version' => 'develop/2024-04-18',
'api_version' => '2.0.13', 'api_version' => '2.0.14',
'db_version' => 24, 'db_version' => 24,
// generic settings // generic settings