diff --git a/app/Api/V1/Requests/RuleStoreRequest.php b/app/Api/V1/Requests/RuleStoreRequest.php index 26648dd18d..7a1a06c4a9 100644 --- a/app/Api/V1/Requests/RuleStoreRequest.php +++ b/app/Api/V1/Requests/RuleStoreRequest.php @@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests; use FireflyIII\Rules\IsBoolean; use FireflyIII\Support\Request\ConvertsDataTypes; +use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Validator; use function is_array; @@ -35,7 +36,8 @@ use function is_array; */ class RuleStoreRequest extends FormRequest { - use ConvertsDataTypes; + use ConvertsDataTypes, GetRuleConfiguration; + /** * Authorize logged in users. * @@ -88,11 +90,11 @@ class RuleStoreRequest extends FormRequest */ public function rules(): array { - $validTriggers = array_keys(config('firefly.rule-triggers')); + $validTriggers = $this->getTriggers(); $validActions = array_keys(config('firefly.rule-actions')); // some triggers and actions require text: - $contextTriggers = implode(',', config('firefly.context-rule-triggers')); + $contextTriggers = implode(',', $this->getTriggersWithContext()); $contextActions = implode(',', config('firefly.context-rule-actions')); return [ diff --git a/app/Api/V1/Requests/RuleUpdateRequest.php b/app/Api/V1/Requests/RuleUpdateRequest.php index 51d285d6fc..4e6aeec134 100644 --- a/app/Api/V1/Requests/RuleUpdateRequest.php +++ b/app/Api/V1/Requests/RuleUpdateRequest.php @@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests; use FireflyIII\Rules\IsBoolean; use FireflyIII\Support\Request\ConvertsDataTypes; +use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Validator; use function is_array; @@ -35,7 +36,7 @@ use function is_array; */ class RuleUpdateRequest extends FormRequest { - use ConvertsDataTypes; + use ConvertsDataTypes, GetRuleConfiguration; /** * Authorize logged in users. * @@ -88,12 +89,12 @@ class RuleUpdateRequest extends FormRequest */ public function rules(): array { - $validTriggers = array_keys(config('firefly.rule-triggers')); + $validTriggers = $this->getTriggers(); $validActions = array_keys(config('firefly.rule-actions')); $rule = $this->route()->parameter('rule'); // some triggers and actions require text: - $contextTriggers = implode(',', config('firefly.context-rule-triggers')); + $contextTriggers = implode(',', $this->getTriggersWithContext()); $contextActions = implode(',', config('firefly.context-rule-actions')); return [ diff --git a/app/Http/Controllers/Json/RuleController.php b/app/Http/Controllers/Json/RuleController.php index 28fc13736d..caab433e7d 100644 --- a/app/Http/Controllers/Json/RuleController.php +++ b/app/Http/Controllers/Json/RuleController.php @@ -73,7 +73,7 @@ class RuleController extends Controller public function trigger(Request $request): JsonResponse { $count = (int) $request->get('count') > 0 ? (int) $request->get('count') : 1; - $keys = array_keys(config('firefly.rule-triggers')); + $keys = array_keys(config('firefly.search.operators')); $triggers = []; foreach ($keys as $key) { if ('user_action' !== $key) { diff --git a/app/Http/Requests/RuleFormRequest.php b/app/Http/Requests/RuleFormRequest.php index ba37873a10..62600ceae5 100644 --- a/app/Http/Requests/RuleFormRequest.php +++ b/app/Http/Requests/RuleFormRequest.php @@ -24,6 +24,7 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Models\Rule; use FireflyIII\Support\Request\ConvertsDataTypes; +use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; /** @@ -31,7 +32,7 @@ use Illuminate\Foundation\Http\FormRequest; */ class RuleFormRequest extends FormRequest { - use ConvertsDataTypes; + use ConvertsDataTypes, GetRuleConfiguration; /** * Verify the request. * @@ -73,14 +74,14 @@ class RuleFormRequest extends FormRequest */ public function rules(): array { - $validTriggers = array_keys(config('firefly.rule-triggers')); + $validTriggers = $this->getTriggers(); $validActions = array_keys(config('firefly.rule-actions')); // some actions require text (aka context): $contextActions = implode(',', config('firefly.context-rule-actions')); // some triggers require text (aka context): - $contextTriggers = implode(',', config('firefly.context-rule-triggers')); + $contextTriggers = implode(',', $this->getTriggersWithContext()); // initial set of rules: $rules = [ diff --git a/app/Http/Requests/TestRuleFormRequest.php b/app/Http/Requests/TestRuleFormRequest.php index ed3786e719..1ebf43521a 100644 --- a/app/Http/Requests/TestRuleFormRequest.php +++ b/app/Http/Requests/TestRuleFormRequest.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; +use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; /** @@ -31,6 +32,7 @@ use Illuminate\Foundation\Http\FormRequest; */ class TestRuleFormRequest extends FormRequest { + use GetRuleConfiguration; /** * Verify the request. * @@ -51,7 +53,7 @@ class TestRuleFormRequest extends FormRequest public function rules(): array { // fixed - $validTriggers = array_keys(config('firefly.rule-triggers')); + $validTriggers = $this->getTriggers(); $rules = [ 'rule-trigger.*' => 'required|min:1|in:' . implode(',', $validTriggers), 'rule-trigger-value.*' => 'required|min:1|ruleTriggerValue', diff --git a/app/Support/Domain.php b/app/Support/Domain.php index d522ccba56..e06821b560 100644 --- a/app/Support/Domain.php +++ b/app/Support/Domain.php @@ -49,6 +49,6 @@ class Domain */ public static function getRuleTriggers(): array { - return config('firefly.rule-triggers'); + return array_keys(config('firefly.search.operators')); } } diff --git a/app/Support/Request/GetRuleConfiguration.php b/app/Support/Request/GetRuleConfiguration.php new file mode 100644 index 0000000000..06f0f73e10 --- /dev/null +++ b/app/Support/Request/GetRuleConfiguration.php @@ -0,0 +1,52 @@ +. + */ + +namespace FireflyIII\Support\Request; + +/** + * Trait GetRuleConfiguration + */ +trait GetRuleConfiguration +{ + + /** + * @return array + */ + protected function getTriggers(): array + { + return array_keys(config('firefly.search.operators')); + } + + /** + * @return array + */ + protected function getTriggersWithContext(): array + { + $list = config('firefly.search.operators'); + $return = []; + foreach ($list as $key => $info) { + if (true === $info['needs_context']) { + $return[] = $key; + } + } + return $return; + } +} \ No newline at end of file diff --git a/app/Support/Twig/Rule.php b/app/Support/Twig/Rule.php index 88369495dd..ac5769a049 100644 --- a/app/Support/Twig/Rule.php +++ b/app/Support/Twig/Rule.php @@ -77,7 +77,7 @@ class Rule extends AbstractExtension return new TwigFunction( 'allRuleTriggers', static function () { - $ruleTriggers = array_keys(Config::get('firefly.rule-triggers')); + $ruleTriggers = array_keys(config('firefly.search.operators'));; $possibleTriggers = []; foreach ($ruleTriggers as $key) { if ('user_action' !== $key) { diff --git a/app/TransactionRules/Factory/TriggerFactory.php b/app/TransactionRules/Factory/TriggerFactory.php index 765be07afb..62260fa2ab 100644 --- a/app/TransactionRules/Factory/TriggerFactory.php +++ b/app/TransactionRules/Factory/TriggerFactory.php @@ -37,7 +37,7 @@ use Log; class TriggerFactory { /** @var array array with trigger types */ - protected static $triggerTypes = []; + protected static array $triggerTypes = []; /** * Returns the trigger for the given type and journal. This method returns the actual implementation diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index 8c10713282..b17495d5be 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -351,7 +351,7 @@ class FireflyValidator extends Validator } // and finally a "will match everything check": - $classes = app('config')->get('firefly.rule-triggers'); + $classes = array_keys(config('firefly.search.operators'));; /** @var TriggerInterface $class */ $class = $classes[$triggerType] ?? false; if (false === $class) { diff --git a/config/firefly.php b/config/firefly.php index bcc6d23ec4..88b39cee29 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -445,59 +445,6 @@ return [ 'configName' => ConfigurationName::class, ], - 'rule-triggers' => [ - 'user_action' => UserAction::class, - 'from_account_starts' => FromAccountStarts::class, - 'from_account_ends' => FromAccountEnds::class, - 'from_account_is' => FromAccountIs::class, - 'from_account_contains' => FromAccountContains::class, - 'from_account_nr_starts' => FromAccountNumberStarts::class, - 'from_account_nr_ends' => FromAccountNumberEnds::class, - 'from_account_nr_is' => FromAccountNumberIs::class, - 'from_account_nr_contains' => FromAccountNumberContains::class, - 'to_account_starts' => ToAccountStarts::class, - 'to_account_ends' => ToAccountEnds::class, - 'to_account_is' => ToAccountIs::class, - 'to_account_contains' => ToAccountContains::class, - 'to_account_nr_starts' => ToAccountNumberStarts::class, - 'to_account_nr_ends' => ToAccountNumberEnds::class, - 'to_account_nr_is' => ToAccountNumberIs::class, - 'to_account_nr_contains' => ToAccountNumberContains::class, - 'amount_less' => AmountLess::class, - 'amount_exactly' => AmountExactly::class, - 'amount_more' => AmountMore::class, - 'description_starts' => DescriptionStarts::class, - 'description_ends' => DescriptionEnds::class, - 'description_contains' => DescriptionContains::class, - 'description_is' => DescriptionIs::class, - 'date_is' => DateIs::class, - 'date_before' => DateBefore::class, - 'date_after' => DateAfter::class, - 'transaction_type' => TransactionType::class, - 'category_is' => CategoryIs::class, - 'budget_is' => BudgetIs::class, - 'tag_is' => TagIs::class, - 'currency_is' => CurrencyIs::class, - 'foreign_currency_is' => ForeignCurrencyIs::class, - 'has_attachments' => HasAttachment::class, - 'has_no_category' => HasNoCategory::class, - 'has_any_category' => HasAnyCategory::class, - 'has_no_budget' => HasNoBudget::class, - 'has_any_budget' => HasAnyBudget::class, - 'has_no_tag' => HasNoTag::class, - 'has_any_tag' => HasAnyTag::class, - 'notes_contain' => NotesContain::class, - 'notes_start' => NotesStart::class, - 'notes_end' => NotesEnd::class, - 'notes_are' => NotesAre::class, - 'no_notes' => NotesEmpty::class, - 'any_notes' => NotesAny::class, - 'bill_is' => BillIs::class, // TODO - 'created_on' => CreatedOn::class, // TODO - 'updated_on' => UpdatedOn::class,// TODO - 'external_id' => ExternalId::class,// TODO - 'internal_reference' => InternalReference::class, // TODO - ], 'rule-actions' => [ 'set_category' => SetCategory::class, 'clear_category' => ClearCategory::class, @@ -540,35 +487,6 @@ return [ //'convert_deposit', 'convert_transfer', ], - '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', - 'date_is', - 'date_before', - 'date_after', - ], 'test-triggers' => [ 'limit' => 10, @@ -580,95 +498,95 @@ return [ 'search' => [ 'operators' => [ - 'user_action' => ['alias' => false, 'trigger_class' => UserAction::class], - 'from_account_starts' => ['alias' => false, 'trigger_class' => FromAccountStarts::class], - 'from_account_ends' => ['alias' => false, 'trigger_class' => FromAccountEnds::class], - 'from_account_contains' => ['alias' => false, 'trigger_class' => FromAccountContains::class], - 'from_account_nr_starts' => ['alias' => false, 'trigger_class' => FromAccountNumberStarts::class], - 'from_account_nr_ends' => ['alias' => false, 'trigger_class' => FromAccountNumberEnds::class], - 'from_account_nr_is' => ['alias' => false, 'trigger_class' => FromAccountNumberIs::class], - 'from_account_nr_contains' => ['alias' => false, 'trigger_class' => FromAccountNumberContains::class], - 'to_account_starts' => ['alias' => false, 'trigger_class' => ToAccountStarts::class], - 'to_account_ends' => ['alias' => false, 'trigger_class' => ToAccountEnds::class], - 'to_account_contains' => ['alias' => false, 'trigger_class' => ToAccountContains::class], - 'to_account_nr_starts' => ['alias' => false, 'trigger_class' => ToAccountNumberStarts::class], - 'to_account_nr_ends' => ['alias' => false, 'trigger_class' => ToAccountNumberEnds::class], - 'to_account_nr_is' => ['alias' => false, 'trigger_class' => ToAccountNumberIs::class], - 'to_account_nr_contains' => ['alias' => false, 'trigger_class' => ToAccountNumberContains::class], - 'description_starts' => ['alias' => false, 'trigger_class' => DescriptionStarts::class], - 'description_ends' => ['alias' => false, 'trigger_class' => DescriptionEnds::class], - 'description_contains' => ['alias' => false, 'trigger_class' => DescriptionContains::class], - 'description_is' => ['alias' => false, 'trigger_class' => DescriptionIs::class], - 'currency_is' => ['alias' => false, 'trigger_class' => CurrencyIs::class], - 'foreign_currency_is' => ['alias' => false, 'trigger_class' => ForeignCurrencyIs::class], - 'has_attachments' => ['alias' => false, 'trigger_class' => HasAttachment::class], - 'has_no_category' => ['alias' => false, 'trigger_class' => HasNoCategory::class], - 'has_any_category' => ['alias' => false, 'trigger_class' => HasAnyCategory::class], - 'has_no_budget' => ['alias' => false, 'trigger_class' => HasNoBudget::class], - 'has_any_budget' => ['alias' => false, 'trigger_class' => HasAnyBudget::class], - 'has_no_tag' => ['alias' => false, 'trigger_class' => HasNoTag::class], - 'has_any_tag' => ['alias' => false, 'trigger_class' => HasAnyTag::class], - 'notes_contain' => ['alias' => false, 'trigger_class' => NotesContain::class], - 'notes_start' => ['alias' => false, 'trigger_class' => NotesStart::class], - 'notes_end' => ['alias' => false, 'trigger_class' => NotesEnd::class], - 'notes_are' => ['alias' => false, 'trigger_class' => NotesAre::class], - 'no_notes' => ['alias' => false, 'trigger_class' => NotesEmpty::class], - 'any_notes' => ['alias' => false, 'trigger_class' => NotesAny::class], + 'user_action' => ['alias' => false, 'trigger_class' => UserAction::class, 'needs_context' => true,], + 'from_account_starts' => ['alias' => false, 'trigger_class' => FromAccountStarts::class, 'needs_context' => true,], + 'from_account_ends' => ['alias' => false, 'trigger_class' => FromAccountEnds::class, 'needs_context' => true,], + 'from_account_contains' => ['alias' => false, 'trigger_class' => FromAccountContains::class, 'needs_context' => true,], + 'from_account_nr_starts' => ['alias' => false, 'trigger_class' => FromAccountNumberStarts::class, 'needs_context' => true,], + 'from_account_nr_ends' => ['alias' => false, 'trigger_class' => FromAccountNumberEnds::class, 'needs_context' => true,], + 'from_account_nr_is' => ['alias' => false, 'trigger_class' => FromAccountNumberIs::class, 'needs_context' => true,], + 'from_account_nr_contains' => ['alias' => false, 'trigger_class' => FromAccountNumberContains::class, 'needs_context' => true,], + 'to_account_starts' => ['alias' => false, 'trigger_class' => ToAccountStarts::class, 'needs_context' => true,], + 'to_account_ends' => ['alias' => false, 'trigger_class' => ToAccountEnds::class, 'needs_context' => true,], + 'to_account_contains' => ['alias' => false, 'trigger_class' => ToAccountContains::class, 'needs_context' => true,], + 'to_account_nr_starts' => ['alias' => false, 'trigger_class' => ToAccountNumberStarts::class, 'needs_context' => true,], + 'to_account_nr_ends' => ['alias' => false, 'trigger_class' => ToAccountNumberEnds::class, 'needs_context' => true,], + 'to_account_nr_is' => ['alias' => false, 'trigger_class' => ToAccountNumberIs::class, 'needs_context' => true,], + 'to_account_nr_contains' => ['alias' => false, 'trigger_class' => ToAccountNumberContains::class, 'needs_context' => true,], + 'description_starts' => ['alias' => false, 'trigger_class' => DescriptionStarts::class, 'needs_context' => true,], + 'description_ends' => ['alias' => false, 'trigger_class' => DescriptionEnds::class, 'needs_context' => true,], + 'description_contains' => ['alias' => false, 'trigger_class' => DescriptionContains::class, 'needs_context' => true,], + 'description_is' => ['alias' => false, 'trigger_class' => DescriptionIs::class, 'needs_context' => true,], + 'currency_is' => ['alias' => false, 'trigger_class' => CurrencyIs::class, 'needs_context' => true,], + 'foreign_currency_is' => ['alias' => false, 'trigger_class' => ForeignCurrencyIs::class, 'needs_context' => true,], + 'has_attachments' => ['alias' => false, 'trigger_class' => HasAttachment::class, 'needs_context' => false,], + 'has_no_category' => ['alias' => false, 'trigger_class' => HasNoCategory::class, 'needs_context' => false,], + 'has_any_category' => ['alias' => false, 'trigger_class' => HasAnyCategory::class, 'needs_context' => false,], + 'has_no_budget' => ['alias' => false, 'trigger_class' => HasNoBudget::class, 'needs_context' => false,], + 'has_any_budget' => ['alias' => false, 'trigger_class' => HasAnyBudget::class, 'needs_context' => false,], + 'has_no_tag' => ['alias' => false, 'trigger_class' => HasNoTag::class, 'needs_context' => false,], + 'has_any_tag' => ['alias' => false, 'trigger_class' => HasAnyTag::class, 'needs_context' => false,], + 'notes_contain' => ['alias' => false, 'trigger_class' => NotesContain::class, 'needs_context' => true,], + 'notes_start' => ['alias' => false, 'trigger_class' => NotesStart::class, 'needs_context' => true,], + 'notes_end' => ['alias' => false, 'trigger_class' => NotesEnd::class, 'needs_context' => true,], + 'notes_are' => ['alias' => false, 'trigger_class' => NotesAre::class, 'needs_context' => true,], + 'no_notes' => ['alias' => false, 'trigger_class' => NotesEmpty::class, 'needs_context' => false,], + 'any_notes' => ['alias' => false, 'trigger_class' => NotesAny::class, 'needs_context' => false,], // exact amount - 'amount_exactly' => ['alias' => false, 'trigger_class' => AmountExactly::class], - 'amount_is' => ['alias' => true, 'alias_for' => 'amount_exactly'], - 'amount' => ['alias' => true, 'alias_for' => 'amount_exactly'], + 'amount_exactly' => ['alias' => false, 'trigger_class' => AmountExactly::class, 'needs_context' => true,], + 'amount_is' => ['alias' => true, 'alias_for' => 'amount_exactly', 'needs_context' => true,], + 'amount' => ['alias' => true, 'alias_for' => 'amount_exactly', 'needs_context' => true,], // is less than - 'amount_less' => ['alias' => false, 'trigger_class' => AmountLess::class], - 'amount_max' => ['alias' => true, 'alias_for' => 'amount_less'], + 'amount_less' => ['alias' => false, 'trigger_class' => AmountLess::class, 'needs_context' => true,], + 'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true,], // is more than - 'amount_more' => ['alias' => false, 'trigger_class' => AmountMore::class], - 'amount_min' => ['alias' => true, 'alias_for' => 'amount_more'], + 'amount_more' => ['alias' => false, 'trigger_class' => AmountMore::class, 'needs_context' => true,], + 'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true,], // source account - 'from_account_is' => ['alias' => false, 'trigger_class' => FromAccountIs::class], - 'source' => ['alias' => true, 'alias_for' => 'from_account_is'], - 'from' => ['alias' => true, 'alias_for' => 'from_account_is'], + 'from_account_is' => ['alias' => false, 'trigger_class' => FromAccountIs::class, 'needs_context' => true,], + 'source' => ['alias' => true, 'alias_for' => 'from_account_is', 'needs_context' => true,], + 'from' => ['alias' => true, 'alias_for' => 'from_account_is', 'needs_context' => true,], // destination account - 'to_account_is' => ['alias' => false, 'trigger_class' => ToAccountIs::class], - 'destination' => ['alias' => true, 'alias_for' => 'to_account_is'], - 'to' => ['alias' => true, 'alias_for' => 'to_account_is'], + 'to_account_is' => ['alias' => false, 'trigger_class' => ToAccountIs::class, 'needs_context' => true,], + 'destination' => ['alias' => true, 'alias_for' => 'to_account_is', 'needs_context' => true,], + 'to' => ['alias' => true, 'alias_for' => 'to_account_is', 'needs_context' => true,], // category - 'category_is' => ['alias' => false, 'trigger_class' => CategoryIs::class], - 'category' => ['alias' => true, 'alias_for' => 'category_is'], + 'category_is' => ['alias' => false, 'trigger_class' => CategoryIs::class, 'needs_context' => true,], + 'category' => ['alias' => true, 'alias_for' => 'category_is', 'needs_context' => true,], // budget - 'budget_is' => ['alias' => false, 'trigger_class' => BudgetIs::class], - 'budget' => ['alias' => true, 'alias_for' => 'budget_is'], + 'budget_is' => ['alias' => false, 'trigger_class' => BudgetIs::class, 'needs_context' => true,], + 'budget' => ['alias' => true, 'alias_for' => 'budget_is', 'needs_context' => true,], // bill - 'bill_is' => ['alias' => false, 'trigger_class' => BillIs::class], // TODO - 'bill' => ['alias' => true, 'alias_for' => 'bill_is'], + 'bill_is' => ['alias' => false, 'trigger_class' => BillIs::class, 'needs_context' => true,], // TODO + 'bill' => ['alias' => true, 'alias_for' => 'bill_is', 'needs_context' => true,], // type - 'transaction_type' => ['alias' => false, 'trigger_class' => TransactionType::class], - 'type' => ['alias' => true, 'alias_for' => 'transaction_type'], + 'transaction_type' => ['alias' => false, 'trigger_class' => TransactionType::class, 'needs_context' => true,], + 'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true,], // date: - 'date_is' => ['alias' => false, 'trigger_class' => DateIs::class], - 'date' => ['alias' => true, 'alias_for' => 'date_is'], - 'on' => ['alias' => true, 'alias_for' => 'date_is'], - 'date_before' => ['alias' => false, 'trigger_class' => DateBefore::class], - 'before' => ['alias' => true, 'alias_for' => 'date_before'], - 'date_after' => ['alias' => false, 'trigger_class' => DateAfter::class], - 'after' => ['alias' => true, 'alias_for' => 'date_after'], + 'date_is' => ['alias' => false, 'trigger_class' => DateIs::class, 'needs_context' => true,], + 'date' => ['alias' => true, 'alias_for' => 'date_is', 'needs_context' => true,], + 'on' => ['alias' => true, 'alias_for' => 'date_is', 'needs_context' => true,], + 'date_before' => ['alias' => false, 'trigger_class' => DateBefore::class, 'needs_context' => true,], + 'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true,], + 'date_after' => ['alias' => false, 'trigger_class' => DateAfter::class, 'needs_context' => true,], + 'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true,], // other interesting fields - 'tag_is' => ['alias' => false, 'trigger_class' => TagIs::class], - 'tag' => ['alias' => true, 'alias_for' => 'tag'], - 'created_on' => ['alias' => false, 'trigger_class' => CreatedOn::class], // TODO - 'updated_on' => ['alias' => false, 'trigger_class' => UpdatedOn::class], // TODO - 'external_id' => ['alias' => false, 'trigger_class' => ExternalId::class], // TODO - 'internal_reference' => ['alias' => false, 'trigger_class' => InternalReference::class], // TODO + 'tag_is' => ['alias' => false, 'trigger_class' => TagIs::class, 'needs_context' => true,], + 'tag' => ['alias' => true, 'alias_for' => 'tag', 'needs_context' => true,], + 'created_on' => ['alias' => false, 'trigger_class' => CreatedOn::class, 'needs_context' => true,], // TODO + 'updated_on' => ['alias' => false, 'trigger_class' => UpdatedOn::class, 'needs_context' => true,], // TODO + 'external_id' => ['alias' => false, 'trigger_class' => ExternalId::class, 'needs_context' => true,], // TODO + 'internal_reference' => ['alias' => false, 'trigger_class' => InternalReference::class, 'needs_context' => true,], // TODO ], ],