type; $currentType = AdviceTypeEnum::make(\intval($type)); $advice->when(isset($type), function ($advice) use ($currentType) { $advice->where('type', '=', $currentType->value); }); if ($request->search) { $this->searchQuery( $advice, $request->search, null, 'title' ); } $this->sortQuery($advice); $searchFields = trans('Titre'); $advice = $advice->paginate(10); return view('bo.pages.advice.index', compact('advice', 'currentType', 'searchFields')); } /** * Show the form for creating a new resource. * * @param Request $request * @return \Illuminate\Http\Response */ public function create(Request $request) { $advice = new Advice(); $type = $request->type; $currentType = AdviceTypeEnum::make(\intval($type)); $adviceTags = Tag::query()->select(['id', 'label', 'slug'])->get(); $adviceProducts = Product::all(); $recipeList = Advice::where('type', '=', AdviceTypeEnum::recipes())->get(); $tipList = Advice::where('type', '=', AdviceTypeEnum::tips())->get(); $recipeList = collect($recipeList)->each(function (\App\Models\Advice &$value) { $value->label = $value->title; }); $tipList = collect($tipList)->each(function (\App\Models\Advice &$value) { $value->label = $value->title; }); $recipesSelected = collect([]); $tipsSelected = collect([]); collect($advice->advices)->each(function ($eltAdvice) use (&$recipesSelected, &$tipsSelected) { if ($eltAdvice->type->value == AdviceTypeEnum::recipes()->value) { $eltAdvice->label = $eltAdvice->title; $recipesSelected = $recipesSelected->concat([$eltAdvice]); } elseif ($eltAdvice->type->value == AdviceTypeEnum::tips()->value) { $eltAdvice->label = $eltAdvice->title; $tipsSelected = $tipsSelected->concat([$eltAdvice]); } }); return view('bo.pages.advice.create', [ 'advice' => $advice, 'currentType' => $currentType, 'adviceTags' => $adviceTags, 'adviceProducts' => $adviceProducts, 'recipeList' => $recipeList, 'tipList' => $tipList, 'recipesSelected' => $recipesSelected, 'tipsSelected' => $tipsSelected, ]); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\Advice\StoreAdviceRequest $request * @return \Illuminate\Http\Response */ public function store(StoreAdviceRequest $request) { return DB::transaction(function () use ($request) { $advice = new Advice(); $advice->fill($request->validated()); $currentType = AdviceTypeEnum::make(\intval($request->type)); if ($advice->saveOrFail()) { $advice->tags()->sync(collect($request->tags)->pluck('id')); $advice->products()->sync($request->products_list); $advice->advices()->sync(array_merge($request->recipes_list, $request->tips_list)); return redirect() ->route('bo.advice.edit', $advice) ->with('success', trans( ':model a été créé', ['model' => Str::singular($currentType->label)] )); } return redirect() ->back() ->with('error', trans( ':model n\'a pas été créé', ['model' => Str::singular($currentType->label)] )); }); } /** * Show the form for editing the specified resource. * * @param \App\Models\Advice $advice * @return \Illuminate\Http\Response */ public function edit(Advice $advice) { $currentType = $advice->type; $adviceTags = Tag::whereNotIn('id', $advice->tags()->pluck('id')) ->select(['id', 'label', 'slug'])->get(); $adviceProducts = Product::all(); $recipeList = Advice::where([ ['type', '=', AdviceTypeEnum::recipes()], ['id', '!=', $advice->id], ])->get(); $tipList = Advice::where([ ['type', '=', AdviceTypeEnum::tips()], ['id', '!=', $advice->id], ])->get(); $recipeList = collect($recipeList)->each(function (\App\Models\Advice &$value) { $value->label = $value->title; }); $tipList = collect($tipList)->each(function (\App\Models\Advice &$value) { $value->label = $value->title; }); $recipesSelected = collect([]); $tipsSelected = collect([]); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> */ $recipesSelected = $advice->recipes()->each(function (Advice &$recipe) { $recipe->label = $recipe->title; }); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> */ $tipsSelected = $advice->tips()->each(function (Advice &$tip) { $tip->label = $tip->title; }); return view('bo.pages.advice.edit', [ 'advice' => $advice, 'currentType' => $currentType, 'adviceTags' => $adviceTags, 'adviceProducts' => $adviceProducts, 'recipeList' => $recipeList, 'tipList' => $tipList, 'recipesSelected' => $recipesSelected, 'tipsSelected' => $tipsSelected, ]); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\Advice\UpdateAdviceRequest $request * @param \App\Models\Advice $advice * @return \Illuminate\Http\Response */ public function update(UpdateAdviceRequest $request, Advice $advice) { return DB::transaction(function () use ($request, $advice) { $advice->tags()->sync(collect($request->tags)->pluck('id')); $advice->products()->sync($request->products_list); $advice->advices()->sync(array_merge($request->recipes_list, $request->tips_list)); $advice->fill($request->validated()); $currentType = AdviceTypeEnum::make(\intval($request->type)); if ($advice->saveOrFail()) { return redirect() ->route('bo.advice.edit', $advice) ->with('success', trans( ':model a été mis à jour', ['model' => Str::singular($currentType->label)] )); } return redirect() ->back() ->with('error', trans( ':model n\'a pas été mis à jour', ['model' => Str::singular($currentType->label)] )); }); } /** * Remove the specified resource from storage. * * @param \App\Models\Advice $advice * @return \Illuminate\Http\Response */ public function destroy(Advice $advice) { DB::table('advice_advice')->where($advice->advices()->getRelatedPivotKeyName(), $advice->id)->delete(); $advice->tags()->sync([]); $advice->products()->sync([]); $advice->advices()->sync([]); $currentType = AdviceTypeEnum::make(\intval($advice->type->value)); if ($advice->deleteOrFail()) { return redirect() ->route('bo.advice.index', ['type' => $currentType]) ->with('warning', trans( ':model a bien été supprimé', ['model' => Str::singular($currentType->label)] )); } return redirect() ->back() ->with('error', trans( ':model n\'a pas été supprimé', ['model' => Str::singular($currentType->label)] )); } }