. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Rule; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; use FireflyIII\Repositories\Rule\RuleRepositoryInterface; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\Support\Http\Controllers\RuleManagement; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\View\View; /** * Class IndexController */ class IndexController extends Controller { use RuleManagement; private RuleGroupRepositoryInterface $ruleGroupRepos; private RuleRepositoryInterface $ruleRepos; /** * RuleController constructor. * * @codeCoverageIgnore */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { app('view')->share('title', (string) trans('firefly.rules')); app('view')->share('mainTitleIcon', 'fa-random'); $this->ruleGroupRepos = app(RuleGroupRepositoryInterface::class); $this->ruleRepos = app(RuleRepositoryInterface::class); return $next($request); } ); } /** * Index of all rules and groups. * * @return Factory|View */ public function index() { /** @var User $user */ $user = auth()->user(); $this->createDefaultRuleGroup(); $this->createDefaultRule(); $this->ruleGroupRepos->resetOrder(); $ruleGroups = $this->ruleGroupRepos->getRuleGroupsWithRules(null); return prefixView('rules.index', compact('ruleGroups')); } /** * @param Rule $rule * @return RedirectResponse * @throws \FireflyIII\Exceptions\FireflyException */ public function search(Rule $rule): RedirectResponse { $route = route('search.index'); $query = $this->ruleRepos->getSearchQuery($rule); $route = sprintf('%s?%s', $route, http_build_query(['search' => $query, 'rule' => $rule->id])); return redirect($route); } /** * @param Request $request * @param Rule $rule * @param RuleGroup $ruleGroup * * @return JsonResponse */ public function moveRule(Request $request, Rule $rule, RuleGroup $ruleGroup): JsonResponse { $order = (int) $request->get('order'); $this->ruleRepos->moveRule($rule, $ruleGroup, (int) $order); return response()->json([]); } }