search) { $r = $this->searchQuery( $r, $request->search, 'title', 'catch_phrase', 'seo_title', 'seo_description', 'ingredients', 'preparation', 'advice' ); } $r = $this->sortQuery($r, ['range_id']); // handle ignore columns (range_id which depends on the product used) if ($request->sort_col === 'range_id' and $request->sort_way) { $r = $r->select('recipes.*'); $r = $r->join('recipes_products', 'recipes.id', '=', 'recipes_products.recipe_id'); $r = $r->join('products', 'products.id', '=', 'recipes_products.product_id'); $r = $r->join('ranges', 'products.range_id', '=', 'ranges.id'); $r = $r->orderBy('ranges.name', $request->sort_way); } $searchFields = trans('Titre, Description, Ingredient, Préparation, Conseils'); $r = $r->paginate(); return view('bo.recipes.index', compact('r', 'searchFields')); } public function create() { $c = ConsumptionTimes::all(); $p = Products::all(); $a = Articles::where('type', ArticleCategory::actu())->get(); return view('bo.recipes.create', compact('c', 'p', 'a')); } public function store(StoreRecipe $request) { $associatedP = []; if ($request->associated_product1) { $associatedP[] = intval($request->associated_product1); } if ($request->associated_product2) { $associatedP[] = intval($request->associated_product2); } $r = new Recipes($request->validated()); $imageName = Str::slug($r->title) . '.' . $request->picture->extension(); $request->picture->move( public_path('uploads/images/recettes/' . date('Y') . '/' . date('m') . '/'), $imageName ); $r->picture = '/uploads/images/recettes/' . date('Y') . '/' . date('m') . '/' . $imageName; $r->consumption_times_id = $request->consumption_times; $r->saveOrFail(); $r->products()->sync($associatedP); $r->articles()->sync($request->associated_news); if ($request->notification) { event(new NewNotification( NotificationType::recipe(), route('recipes.show', Str::slug($r->title)), $r )); return redirect()->route('bo.recipes.edit', $r) ->with('success', 'Notification envoyée'); } return redirect()->route('bo.recipes.edit', $r) ->with('success', 'Recette enregistrée'); } public function edit(Recipes $r) { $c = ConsumptionTimes::all(); $p = Products::with(['recipes', 'consumptionTimes'])->get(); $a = Articles::where('type', ArticleCategory::actu())->get(); $raIds = []; foreach ($r->articles as $recipe_article) { $raIds[] = $recipe_article->id; } return view('bo.recipes.edit', compact('c', 'r', 'a', 'p'))->with('raIds', $raIds); } public function update(UpdateRecipe $request, Recipes $r) { $r->fill($request->validated()); $associatedP = []; if ($request->associated_product1) { $associatedP[] = intval($request->associated_product1); } if ($request->associated_product2) { $associatedP[] = intval($request->associated_product2); } if ($request->picture !== null) { if (file_exists(public_path() . '/' . $r->picture)) { unlink(public_path() . '/' . $r->picture); } $imageName = Str::slug($r->title) . '.' . $request->picture->extension(); $request->picture->move( public_path('uploads/images/recettes/' . date('Y') . '/' . date('m') . '/'), $imageName ); $r->picture = '/uploads/images/recettes/' . date('Y') . '/' . date('m') . '/' . $imageName; } $r->saveOrFail(); $r->products()->sync($associatedP); $r->articles()->sync($request->associated_news); if ($request->notification) { event(new NewNotification( NotificationType::recipe(), route('recipes.show', Str::slug($r->title)), $r )); return redirect()->route('bo.recipes.edit', $r) ->with('success', 'Notification envoyée, Enregistré !'); } return redirect()->route('bo.recipes.edit', $r) ->with('success', 'Enregistré !'); } public function destroy(Recipes $r) { if (file_exists(public_path() . '/' . $r->picture)) { unlink(public_path() . '/' . $r->picture); } $r->notifiable()->delete(); $r->delete(); return redirect()->route('bo.recipes.index') ->with('warning', 'Le contenu à bien été supprimé'); } public function highlights() { $r = Recipes::all(); return view('bo.recipes.highlights', compact('r')); } public function storeHighlights(RecipeHighlightsUpdate $request) { $ids = collect($request->validated()['recipes'] ?? [])->take(3); Recipes::where('highlight', 1)->update(['highlight' => 0]); Recipes::whereIn('id', $ids)->update(['highlight' => 1]); return redirect()->route('bo.recipes.highlights')->with('success', 'Enregistré !'); } }