ldc-legaulois/app/Http/Controllers/Bo/RecipesController.php
Jérémy Munsch d81e4df777 - Introduce Flash Message to refactorize code
- npm i sweetalert2 --save-dev
- create confirm module
- replace all natives confirm with sweet alert
2021-09-18 12:21:21 +02:00

193 lines
6.6 KiB
PHP

<?php
namespace App\Http\Controllers\Bo;
use App\Enums\ArticleCategory;
use App\Enums\NotificationType;
use App\Events\NewNotification;
use App\Http\Controllers\Controller;
use App\Http\Requests\SearchRequest;
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;
use App\Traits\UpdateModelStatus;
class RecipesController extends Controller
{
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();
$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(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é !');
}
}