ldc-legaulois/app/Http/Controllers/Bo/RecipesController.php

194 lines
6.6 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Controllers\Bo;
2021-04-27 17:50:57 +02:00
use App\Enums\ArticleCategory;
use App\Enums\NotificationType;
use App\Events\NewNotification;
use App\Http\Controllers\Controller;
use App\Http\Requests\SearchRequest;
2021-04-30 20:55:00 +02:00
use App\Http\Requests\StoreRecipe;
use App\Http\Requests\UpdateRecipe;
use App\Models\Articles;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Recipes;
use App\Models\ConsumptionTimes;
use App\Models\Products;
2021-04-28 13:57:12 +02:00
use App\Traits\UpdateModelStatus;
class RecipesController extends Controller
{
2021-04-28 13:57:12 +02:00
use UpdateModelStatus;
public function index(SearchRequest $request)
{
$r = Recipes::with('products.range');
if ($request->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();
2021-04-27 17:50:57 +02:00
$a = Articles::where('type', ArticleCategory::actu())->get();
return view('bo.recipes.create', compact('c', 'p', 'a'));
}
2021-04-30 20:55:00 +02:00
public function store(StoreRecipe $request)
{
2021-03-29 16:00:03 +02:00
$associatedP = [];
2021-04-30 20:55:00 +02:00
if ($request->associated_product1) {
$associatedP[] = intval($request->associated_product1);
2021-03-29 16:00:03 +02:00
}
2021-04-30 20:55:00 +02:00
if ($request->associated_product2) {
$associatedP[] = intval($request->associated_product2);
2021-03-29 16:00:03 +02:00
}
2021-04-30 20:55:00 +02:00
$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
);
2021-06-10 15:51:53 +02:00
$r->picture = '/uploads/images/recettes/' . date('Y') . '/' . date('m') . '/' . $imageName;
2021-04-30 20:55:00 +02:00
$r->consumption_times_id = $request->consumption_times;
$r->saveOrFail();
2021-03-29 16:00:03 +02:00
$r->products()->sync($associatedP);
2021-04-30 21:17:41 +02:00
$r->articles()->sync($request->associated_news);
2021-04-30 20:55:00 +02:00
if ($request->notification) {
event(new NewNotification(
NotificationType::recipe(),
route('recipes.show', Str::slug($r->title)),
$r
));
2021-04-30 21:17:41 +02:00
return redirect()->route('bo.recipes.edit', $r)
->with('success', 'Notification envoyée');
2021-03-20 14:38:15 +01:00
}
return redirect()->route('bo.recipes.edit', $r)
->with('success', 'Recette enregistrée');
}
2021-04-28 13:57:12 +02:00
public function edit(Recipes $r)
{
$c = ConsumptionTimes::all();
2021-06-15 17:00:01 +02:00
$p = Products::with(['recipes', 'consumptionTimes'])->get();
2021-04-27 17:50:57 +02:00
$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);
}
2021-04-30 20:55:00 +02:00
public function update(UpdateRecipe $request, Recipes $r)
{
2021-04-30 20:55:00 +02:00
$r->fill($request->validated());
2021-03-29 16:00:03 +02:00
$associatedP = [];
2021-04-30 20:55:00 +02:00
if ($request->associated_product1) {
$associatedP[] = intval($request->associated_product1);
2021-03-29 16:00:03 +02:00
}
2021-04-30 20:55:00 +02:00
if ($request->associated_product2) {
$associatedP[] = intval($request->associated_product2);
}
2021-04-30 20:55:00 +02:00
if ($request->picture !== null) {
2021-03-20 14:38:15 +01:00
if (file_exists(public_path() . '/' . $r->picture)) {
unlink(public_path() . '/' . $r->picture);
2021-03-20 14:38:15 +01:00
}
2021-04-30 20:55:00 +02:00
$imageName = Str::slug($r->title) . '.' . $request->picture->extension();
$request->picture->move(
public_path('uploads/images/recettes/' . date('Y') . '/' . date('m') . '/'),
$imageName
);
2021-06-10 15:51:53 +02:00
$r->picture = '/uploads/images/recettes/' . date('Y') . '/' . date('m') . '/' . $imageName;
2021-03-20 14:38:15 +01:00
}
2021-04-30 20:55:00 +02:00
$r->saveOrFail();
2021-03-29 16:00:03 +02:00
$r->products()->sync($associatedP);
2021-04-30 21:17:41 +02:00
$r->articles()->sync($request->associated_news);
2021-04-30 20:55:00 +02:00
if ($request->notification) {
event(new NewNotification(
NotificationType::recipe(),
route('recipes.show', Str::slug($r->title)),
$r
));
2021-04-30 21:17:41 +02:00
return redirect()->route('bo.recipes.edit', $r)
->with('success', 'Notification envoyée, Enregistré !');
2021-03-20 14:38:15 +01:00
}
2021-04-30 21:17:41 +02:00
return redirect()->route('bo.recipes.edit', $r)
->with('success', 'Enregistré !');
}
2021-04-28 13:57:12 +02:00
public function destroy(Recipes $r)
{
2021-03-20 14:38:15 +01:00
if (file_exists(public_path() . '/' . $r->picture)) {
unlink(public_path() . '/' . $r->picture);
2021-03-21 22:51:19 +01:00
}
$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(Request $request)
{
$recipes = $request->recipes;
if ($recipes !== null) {
2021-03-20 14:38:15 +01:00
$oldHighlights = Recipes::select('id')->where('highlight', 1)->get();
foreach ($recipes as $recipe) {
if (!$oldHighlights->contains($recipe)) {
$r = Recipes::findOrFail($recipe);
$r->highlight = 1;
$r->save();
}
}
foreach ($oldHighlights as $oldHighlight) {
if (!in_array($oldHighlight->id, $recipes)) {
$oldHighlight->highlight = 0;
$oldHighlight->save();
}
}
} else {
Recipes::where('highlight', 1)->update(['highlight' => 0]);
}
return redirect()->route('bo.recipes.highlights')->with('success', 'Enregistré !');
}
}