authorizeResource(SingleOptin::class); } /** * Display a listing of the resource. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ public function index(Request $request): \Illuminate\Contracts\View\View { $query = SingleOptin::query(); $questionModels = null; $answerModels = null; $this->applyBrandAndAnswerFilters($request, $query, $questionModels, $answerModels); $this->applySearch($request, $query); $this->sortQuery($query); $query->with('brand'); $singleoptinModels = $this->paginate($query); $searchFields = trans('E-mail'); return view('bo.pages.singleoptins.index', [ 'singleoptinModels' => $singleoptinModels, 'searchFields' => $searchFields, 'questionModels' => $questionModels, 'answerModels' => $answerModels, ]); } /** * Remove the specified resource from storage. * * @param \App\Models\SingleOptin $singleoptin * @return \Illuminate\Http\RedirectResponse */ public function destroy(SingleOptin $singleoptin): \Illuminate\Http\RedirectResponse { $singleoptin->answers()->detach(); if ($singleoptin->deleteOrFail()) { return redirect()->route('bo.single_optins.index') ->with('success', trans( ':model a été supprimé.', ['model' => Str::singular(trans('models.classes.singleoptins'))] )); } return redirect()->back() ->with('error', trans( ':model n\'a pas pu être supprimé.', ['model' => Str::singular(trans('models.classes.singleoptins'))] )); } /** * Undocumented function * * @param \Illuminate\Http\Request $request * @param \Illuminate\Database\Eloquent\Builder $query * @param \Illuminate\Support\Collection|null $questionModels * @param \Illuminate\Support\Collection|null $answerModels * @return void */ private function applyBrandAndAnswerFilters( Request $request, Builder $query, ?Collection &$questionModels, ?Collection &$answerModels ): void { if (!$request->filled('brand')) { return; } $brandId = $request->brand; $query->whereHas('brand', fn($q) => $q->whereKey($brandId)); $questionModels = Question::getAllModelsFromBrand($brandId); if (!$request->filled('question')) { return; } $questionId = $request->question; $question = Question::find($questionId); if ($question) { $questionAnswers = $question->answers->modelKeys(); $query->whereHas('answers', fn($q) => $q->whereIn('answer_id', $questionAnswers)); $answerModels = Answer::getAllAnswersFromQuestion($questionId); } if ($request->filled('answer')) { $query->whereHas('answers', fn($q) => $q->whereKey($request->answer)); } } /** * Apply search filter. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Database\Eloquent\Builder $query * @return void */ private function applySearch(Request $request, Builder $query): void { if ($request->filled('search')) { $this->searchQuery($query, $request->search, null, 'email'); } } }