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

122 lines
4.2 KiB
PHP
Raw Normal View History

2021-02-09 09:50:17 +01:00
<?php
namespace App\Http\Controllers;
use App\Enums\RecipeType;
use App\Models\ConsumptionTimes;
use App\Models\Ranges;
use App\Models\Recipes;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class RecipesController extends Controller
{
public function index(Request $request)
{
$type = $request->get('type');
$value = $request->get('value');
$search = $request->get('search');
$video_recipe = $request->get('video_recipe');
// @phpcs:disable PSR2.ControlStructures.ControlStructureSpacing.SpacingAfterOpenBrace
if (
!session()->has('recipes.rand') ||
(intval(session()->get('recipes.time', time())) - intval(time())) > (60 * 60 * 60) // 1 hour
) {
session()->put('recipes.time', time());
session()->put('recipes.rand', Recipes::all('id')->shuffle()->map(function ($obj) {
return $obj->id;
})->toArray());
session()->save();
}
$recipes = Recipes::select('title', 'slug', 'picture', 'catch_phrase')
->where('status', true)
->orderByRaw(\sprintf('FIELD(id, %s)', implode(", ", session()->get('recipes.rand'))));
if ($search) {
$recipes = $recipes->where('title', 'like', '%' . implode('%', explode(' ', trim($search))) . '%');
}
if ($video_recipe) {
$recipes = $recipes->where('type', '=', RecipeType::video()->value);
}
$ranges = Ranges::select('name', 'slug')
->where('status', true)
->orderBy('order')
->get();
$consumptionTimes = ConsumptionTimes::select('name', 'slug')
->where('status', true)
->get();
try {
switch ($type) {
case 'range':
$recipes = $recipes->whereHas('products.range', function ($q) use ($value) {
$q->where('ranges.slug', $value);
});
break;
case 'consumption':
$recipes = $recipes->whereHas('consumptionTimes', function ($q) use ($value) {
$q->where('consumption_times.slug', $value);
});
break;
case 'preparation':
switch ($value) {
case 'less15':
$recipes = $recipes->where('preparation_time', '<=', 15);
break;
case '15and30':
$recipes = $recipes
->where('preparation_time', '>=', 15)
->where('preparation_time', '<=', 30);
break;
default:
case 'more30':
$recipes = $recipes
->where('preparation_time', '>', 30);
break;
}
break;
case 'cooking':
switch ($value) {
case 'less15':
$recipes = $recipes->where('cooking_time', '<=', 15);
break;
case '15and30':
$recipes = $recipes
->where('cooking_time', '>=', 15)
->where('cooking_time', '<=', 30);
break;
default:
case 'more30':
$recipes = $recipes
->where('cooking_time', '>', 30);
break;
}
break;
}
} catch (ModelNotFoundException $e) {
}
$recipes = $recipes->paginate();
return view('front.recipes.index', compact(
'recipes',
'ranges',
'consumptionTimes',
'type',
'value'
));
}
public function show(Recipes $recipe)
{
$recipe->load('products', 'articles');
return view('front.recipes.show', compact('recipe'));
}
2021-02-09 09:50:17 +01:00
}