mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 23:45:10 +00:00
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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()],
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user