254 lines
8.5 KiB
PHP
254 lines
8.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Bo;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
use App\Models\Recipes;
|
|
use App\Models\ConsumptionTimes;
|
|
use App\Models\RecipesNews;
|
|
|
|
class RecipesController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$r = Recipes::all();
|
|
// TODO : Récupérer les gammes pour l'affichage dans le tableau
|
|
return view('bo.recipes.index', compact('r'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$c = ConsumptionTimes::all();
|
|
// TODO : Ajouter la liste des produits et des actualités pour le liens en bdd
|
|
return view('bo.recipes.create', compact('c'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$title = $request->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;
|
|
/* TODO : Gérer les produits associés
|
|
$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 = Str::slug($title) .'.'.$picture->extension();
|
|
$picture->move(public_path('images/recettes/' . date('Y') . '/' . date('m') . '/'), $imageName);
|
|
|
|
$r = new Recipes();
|
|
$r->title = $title;
|
|
$r->catch_phrase = $catchPhrase;
|
|
$r->tags = $tags;
|
|
$r->picture = 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;
|
|
/* TODO : Gérer les produits associés
|
|
$r->associated_product1 = $associatedProduct1;
|
|
$r->associated_product2 = $associatedProduct2;
|
|
*/
|
|
$r->consumption_times = $consumptionTimes;
|
|
$r->status = $status;
|
|
$r->notification = $notification;
|
|
$r->save();
|
|
|
|
// TODO : Synchroniser les éléments avec la table Recipes_News
|
|
/*
|
|
$associatedNews = $request->associated_news;
|
|
$r->news()->sync($associatedNews);
|
|
*/
|
|
|
|
return redirect()->route('bo.recipes.index');
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$r = Recipes::findOrFail($id);
|
|
$c = ConsumptionTimes::all();
|
|
return view('bo.recipes.edit')
|
|
->with('r', $r)
|
|
->with('c', $c)
|
|
;
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$title = $request->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;
|
|
/* TODO : Gérer les produits associés
|
|
$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('images/recettes/') . $r->picture))
|
|
unlink(public_path('images/recettes/') . $r->picture);
|
|
$imageName = Str::slug($title) .'.'.$picture->extension();
|
|
$picture->move(public_path('images/recettes/' . date('Y') . '/' . date('m') . '/'), $imageName);
|
|
}
|
|
|
|
$r->title = $title;
|
|
$r->catch_phrase = $catchPhrase;
|
|
$r->tags = $tags;
|
|
if ($picture !== null)
|
|
$r->picture = 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;
|
|
/* TODO : Gérer les produits associés
|
|
$r->associated_product1 = $associatedProduct1;
|
|
$r->associated_product2 = $associatedProduct2;
|
|
*/
|
|
$r->consumption_times = $consumptionTimes;
|
|
$r->status = $status;
|
|
$r->notification = $notification;
|
|
$r->save();
|
|
|
|
// TODO : Synchroniser les éléments avec la table Recipes_News
|
|
/*
|
|
$associatedNews = $request->associated_news;
|
|
$r->news()->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('images/recettes/') . $r->picture));
|
|
unlink(public_path('images/recettes/') . $r->picture);
|
|
|
|
$r->delete();
|
|
// TODO : Supprimer les lignes de la table Recipes_News dont l'id est égal à $r->id - CASCADE sur la FK en base ?
|
|
|
|
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é !');
|
|
}
|
|
}
|