diff --git a/app/Http/Controllers/Rule/IndexController.php b/app/Http/Controllers/Rule/IndexController.php index 9c872b1544..a0fef5dc2b 100644 --- a/app/Http/Controllers/Rule/IndexController.php +++ b/app/Http/Controllers/Rule/IndexController.php @@ -25,12 +25,15 @@ namespace FireflyIII\Http\Controllers\Rule; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; +use FireflyIII\Models\RuleTrigger; use FireflyIII\Repositories\Rule\RuleRepositoryInterface; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\Support\Http\Controllers\RuleManagement; +use FireflyIII\Support\Search\OperatorQuerySearch; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\View\View; @@ -40,10 +43,9 @@ use Illuminate\View\View; class IndexController extends Controller { use RuleManagement; - /** @var RuleGroupRepositoryInterface Rule group repository */ - private $ruleGroupRepos; - /** @var RuleRepositoryInterface Rule repository. */ - private $ruleRepos; + + private RuleGroupRepositoryInterface $ruleGroupRepos; + private RuleRepositoryInterface $ruleRepos; /** * RuleController constructor. @@ -82,6 +84,27 @@ class IndexController extends Controller return view('rules.index', compact('ruleGroups')); } + /** + * @param Rule $rule + * @return RedirectResponse + * @throws \FireflyIII\Exceptions\FireflyException + */ + public function search(Rule $rule): RedirectResponse + { + $route = route('search.index'); + $params = []; + /** @var RuleTrigger $trigger */ + foreach ($rule->ruleTriggers as $trigger) { + if ('user_action' !== $trigger->trigger_type) { + $params[] = sprintf('%s:"%s"', OperatorQuerySearch::getRootOperator($trigger->trigger_type), $trigger->trigger_value); + } + } + $query = implode(' ', $params); + $route = sprintf('%s?%s', $route, http_build_query(['search' => $query, 'rule' => $rule->id])); + + return redirect($route); + } + /** * Stop action for reordering of rule actions. * diff --git a/app/Http/Controllers/Rule/SelectController.php b/app/Http/Controllers/Rule/SelectController.php index 0490704432..c985ecf507 100644 --- a/app/Http/Controllers/Rule/SelectController.php +++ b/app/Http/Controllers/Rule/SelectController.php @@ -189,51 +189,4 @@ class SelectController extends Controller return response()->json(['html' => $view, 'warning' => $warning]); } - /** - * This method allows the user to test a certain set of rule triggers. The rule triggers are grabbed from - * the rule itself. - * - * @param Rule $rule - * - * @return JsonResponse - * - */ - public function testTriggersByRule(Rule $rule): JsonResponse - { - $triggers = $rule->ruleTriggers; - - if (0 === count($triggers)) { - return response()->json(['html' => '', 'warning' => (string) trans('firefly.warning_no_valid_triggers')]); // @codeCoverageIgnore - } - - - // create new rule engine: - $newRuleEngine = app(RuleEngineInterface::class); - - // set rules: - $newRuleEngine->setRules(new Collection([$rule])); - $collection = $newRuleEngine->find(); - $collection = $collection->slice(0, 20); - - $warning = ''; - if (0 === count($collection)) { - $warning = (string) trans('firefly.warning_no_matching_transactions'); // @codeCoverageIgnore - } - - // Return json response - $view = 'ERROR, see logs.'; - try { - $view = view('list.journals-array-tiny', ['groups' => $collection])->render(); - // @codeCoverageIgnoreStart - } catch (Throwable $exception) { - Log::error(sprintf('Could not render view in testTriggersByRule(): %s', $exception->getMessage())); - Log::error($exception->getTraceAsString()); - } - - // @codeCoverageIgnoreEnd - - return response()->json(['html' => $view, 'warning' => $warning]); - } - - }