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

248 lines
8.2 KiB
PHP

<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Models\Articles;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Recipes;
use App\Models\ConsumptionTimes;
use App\Models\Products;
use App\Models\Ranges;
use App\Models\RecipesArticles;
class RecipesController extends Controller
{
public function index()
{
$r = Recipes::all();
return view('bo.recipes.index', compact('r'));
}
public function create()
{
$c = ConsumptionTimes::all();
$p = Products::all();
$a = Articles::where('category_id', 1)->get();
return view('bo.recipes.create', compact('c', 'p', 'a'));
}
public function store(Request $request)
{
$title = $request->title;
$slug = Str::slug($title);
$catchPhrase = $request->catch_phrase;
$tags = $request->tags;
$picture = $request->picture;
$ingredients = $request->ingredients;
$preparation = $request->preparation;
$advice = $request->advice;
$keywords = $request->keywords;
$type = $request->type;
$videoLink = $request->video_link;
$preparationTime = $request->preparation_time;
$cookingTime = $request->cooking_time;
$numberPeople = $request->number_people;
$difficulty = $request->difficulty;
$associatedProduct1 = $request->associated_product1;
$associatedProduct2 = $request->associated_product2;
$consumptionTimes = $request->consumption_times;
$status = 0;
$notification = $request->notification === null ? 0 : 1;
$request->validate([
'title' => 'required|max:100',
'catch_phrase' => 'max:100',
'tags' => 'required|max:255',
'picture' => 'required|image|mimes:jpeg,png,jpg|max:2048|dimensions:width=683,height=434',
'ingredients' => 'required|max:4000',
'preparation' => 'required|max:4000',
'advice' => 'max:1000',
'keywords' => 'max:255',
]);
if ($type == "0") {
$request->validate([
'video_link' => 'required|max:255',
]);
}
$imageName = $slug .'.'.$picture->extension();
$picture->move(public_path('images/recettes/' . date('Y') . '/' . date('m') . '/'), $imageName);
$r = new Recipes();
$r->title = $title;
$r->slug = $slug;
$r->catch_phrase = $catchPhrase;
$r->tags = $tags;
$r->picture = 'images/recettes/' . date('Y') . '/' . date('m') . '/' . $imageName;
$r->ingredients = $ingredients;
$r->preparation = $preparation;
$r->advice = $advice;
$r->keywords = $keywords;
$r->type = $type;
if ($type == "0")
$r->video_link = $videoLink;
$r->preparation_time = $preparationTime;
$r->cooking_time = $cookingTime;
$r->number_people = $numberPeople;
$r->difficulty = $difficulty;
$r->associated_product1 = $associatedProduct1;
$r->associated_product2 = $associatedProduct2;
$r->consumption_times = $consumptionTimes;
$r->status = $status;
$r->notification = $notification;
$r->save();
$associatedNews = $request->associated_news;
$r->articles()->sync($associatedNews);
return redirect()->route('bo.recipes.index');
}
public function edit($id)
{
$r = Recipes::findOrFail($id);
$c = ConsumptionTimes::all();
$p = Products::all();
$a = Articles::where('category_id', 1)->get();
$raIds = [];
foreach ($r->articles as $recipe_article) {
$raIds[] = $recipe_article->id;
}
return view('bo.recipes.edit', compact('r', 'c', 'p', 'a'))->with('raIds', $raIds);
}
public function update(Request $request, $id)
{
$title = $request->title;
$slug = Str::slug($title);
$catchPhrase = $request->catch_phrase;
$tags = $request->tags;
$picture = $request->picture;
$ingredients = $request->ingredients;
$preparation = $request->preparation;
$advice = $request->advice;
$keywords = $request->keywords;
$type = $request->type;
$videoLink = $request->video_link;
$preparationTime = $request->preparation_time;
$cookingTime = $request->cooking_time;
$numberPeople = $request->number_people;
$difficulty = $request->difficulty;
$associatedProduct1 = $request->associated_product1;
$associatedProduct2 = $request->associated_product2;
$consumptionTimes = $request->consumption_times;
$status = $request->status === null ? 0 : 1;
$notification = $request->notification === null ? 0 : 1;
$request->validate([
'title' => 'required|max:100',
'catch_phrase' => 'max:100',
'tags' => 'required|max:255',
'ingredients' => 'required|max:4000',
'preparation' => 'required|max:4000',
'advice' => 'max:1000',
'keywords' => 'max:255',
]);
if ($type == "0") {
$request->validate([
'video_link' => 'required|max:255',
]);
}
if ($picture !== null) {
$request->validate([
'picture' => 'required|image|mimes:jpeg,png,jpg|max:2048|dimensions:width=683,height=434',
]);
}
$r = Recipes::findOrFail($id);
if ($picture !== null) {
if (file_exists(public_path() . '/' . $r->picture))
unlink(public_path() . '/' . $r->picture);
$imageName = $slug .'.'.$picture->extension();
$picture->move(public_path('images/recettes/' . date('Y') . '/' . date('m') . '/'), $imageName);
}
$r->title = $title;
$r->slug = $slug;
$r->catch_phrase = $catchPhrase;
$r->tags = $tags;
if ($picture !== null)
$r->picture = 'images/recettes/' . date('Y') . '/' . date('m') . '/' . $imageName;
$r->ingredients = $ingredients;
$r->preparation = $preparation;
$r->advice = $advice;
$r->keywords = $keywords;
$r->type = $type;
if ($type == "0") {
$r->video_link = $videoLink;
} else {
$r->video_link = null;
}
$r->preparation_time = $preparationTime;
$r->cooking_time = $cookingTime;
$r->number_people = $numberPeople;
$r->difficulty = $difficulty;
$r->associated_product1 = $associatedProduct1;
$r->associated_product2 = $associatedProduct2;
$r->consumption_times = $consumptionTimes;
$r->status = $status;
$r->notification = $notification;
$r->save();
$associatedNews = $request->associated_news;
$r->articles()->sync($associatedNews);
return redirect()->route('bo.recipes.edit', $r->id)->with('success', 'Enregistré !');
}
public function destroy($id)
{
$r = Recipes::findOrFail($id);
if (file_exists(public_path() . '/' . $r->picture));
unlink(public_path() . '/' . $r->picture);
$r->delete();
return redirect()->route('bo.recipes.index');
}
public function highlights()
{
$r = Recipes::all();
return view('bo.recipes.highlights', compact('r'));
}
public function storeHighlights(Request $request)
{
$recipes = $request->recipes;
if ($recipes !== null) {
$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é !');
}
}