diff --git a/app/Casts/HtmlColor.php b/app/Casts/HtmlColor.php
index 291bb36..39a36f6 100644
--- a/app/Casts/HtmlColor.php
+++ b/app/Casts/HtmlColor.php
@@ -15,10 +15,10 @@ class HtmlColor implements CastsAttributes
/**
* Cast the given value.
*
- * @param Model $model
- * @param string $key
- * @param mixed $value
- * @param array $attributes
+ * @param \Illuminate\Database\Eloquent\Model $model
+ * @param string $key
+ * @param mixed $value
+ * @param array $attributes
* @return string
* @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing
* @phpcs:disable Squiz.Commenting.FunctionComment.ScalarTypeHintMissing
@@ -32,10 +32,10 @@ class HtmlColor implements CastsAttributes
/**
* Prepare the given value for storage.
*
- * @param Model $model
- * @param string $key
- * @param mixed $value
- * @param array $attributes
+ * @param \Illuminate\Database\Eloquent\Model $model
+ * @param string $key
+ * @param mixed $value
+ * @param array $attributes
* @return integer
* @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing
* @phpcs:disable Squiz.Commenting.FunctionComment.ScalarTypeHintMissing
diff --git a/app/Casts/RgbaColor.php b/app/Casts/RgbaColor.php
index eaaebac..8a3ad46 100644
--- a/app/Casts/RgbaColor.php
+++ b/app/Casts/RgbaColor.php
@@ -11,10 +11,10 @@ class RgbaColor extends HtmlColor
/**
* Cast the given value.
*
- * @param Model $model
- * @param string $key
- * @param mixed $value
- * @param array $attributes
+ * @param \Illuminate\Database\Eloquent\Model $model
+ * @param string $key
+ * @param mixed $value
+ * @param array $attributes
* @return string
* @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing
* @phpcs:disable Squiz.Commenting.FunctionComment.ScalarTypeHintMissing
@@ -24,6 +24,7 @@ class RgbaColor extends HtmlColor
public function get($model, $key, $value, $attributes)
{
// phpcs:enable
+ /** @var \Illuminate\Support\Collection */
$intValues = collect(\str_split($this->zeropad(\dechex(\intval($value)), 8), 2))->map(function ($hex) {
return intval(\hexdec($hex));
});
@@ -35,10 +36,10 @@ class RgbaColor extends HtmlColor
/**
* Prepare the given value for storage.
*
- * @param Model $model
- * @param string $key
- * @param mixed $value
- * @param array $attributes
+ * @param \Illuminate\Database\Eloquent\Model $model
+ * @param string $key
+ * @param mixed $value
+ * @param array $attributes
* @return integer
* @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing
* @phpcs:disable Squiz.Commenting.FunctionComment.ScalarTypeHintMissing
diff --git a/app/Console/Commands/CreateAdmin.php b/app/Console/Commands/CreateAdmin.php
index ab0c475..5b29f0d 100644
--- a/app/Console/Commands/CreateAdmin.php
+++ b/app/Console/Commands/CreateAdmin.php
@@ -26,28 +26,28 @@ class CreateAdmin extends Command
/**
* The firstname of the new user.
*
- * @var string
+ * @var string|null
*/
protected $firstname;
/**
* The lastname of the new user.
*
- * @var string
+ * @var string|null
*/
protected $lastname;
/**
* The email of the new user.
*
- * @var string
+ * @var string|null
*/
protected $email;
/**
* The password of the new user.
*
- * @var string
+ * @var string|null
*/
protected $password;
diff --git a/app/Enums/CookingModeEnum.php b/app/Enums/CookingModeEnum.php
index ba02a3f..4760539 100644
--- a/app/Enums/CookingModeEnum.php
+++ b/app/Enums/CookingModeEnum.php
@@ -17,6 +17,7 @@ enum CookingModeEnum: int
* Enum labels
*
* @return array
+ * @phpstan-ignore-next-line
*/
private const LABELS = [
self::withoutCooking->name => 'Sans cuisson',
diff --git a/app/Enums/DifficultyEnum.php b/app/Enums/DifficultyEnum.php
index a88dc89..803a770 100644
--- a/app/Enums/DifficultyEnum.php
+++ b/app/Enums/DifficultyEnum.php
@@ -12,6 +12,12 @@ enum DifficultyEnum: int
case medium = 2;
case hard = 3;
+ /**
+ * Enum labels
+ *
+ * @return array
+ * @phpstan-ignore-next-line
+ */
private const LABELS = [
self::easy->name => 'Facile',
self::medium->name => 'Moyen',
diff --git a/app/Enums/NutriscoreEnum.php b/app/Enums/NutriscoreEnum.php
index 3806781..d8f62eb 100644
--- a/app/Enums/NutriscoreEnum.php
+++ b/app/Enums/NutriscoreEnum.php
@@ -15,6 +15,12 @@ enum NutriscoreEnum: int
case dLetter = 5;
case eLetter = 6;
+ /**
+ * Enum labels
+ *
+ * @return array
+ * @phpstan-ignore-next-line
+ */
private const LABELS = [
self::noLetter->name => 'N/A',
self::aLetter->name => 'A',
@@ -24,6 +30,11 @@ enum NutriscoreEnum: int
self::eLetter->name => 'E'
];
+ /**
+ * Enum stickers
+ *
+ * @return array
+ */
private const STICKERS = [
self::noLetter->name => '',
self::aLetter->name => 'resources/assets/images/nutriscore/logo-nutriscore-A.png',
diff --git a/app/Enums/PreparationTimeEnum.php b/app/Enums/PreparationTimeEnum.php
index 1b071cc..74447a1 100644
--- a/app/Enums/PreparationTimeEnum.php
+++ b/app/Enums/PreparationTimeEnum.php
@@ -13,6 +13,12 @@ enum PreparationTimeEnum: int
case interval3 = 3;
case interval4 = 4;
+ /**
+ * Enum labels
+ *
+ * @return array
+ * @phpstan-ignore-next-line
+ */
private const LABELS = [
self::interval1->name => '0-30 min',
self::interval2->name => '30min - 2h',
@@ -20,6 +26,11 @@ enum PreparationTimeEnum: int
self::interval4->name => '> 4h',
];
+ /**
+ * Enum times
+ *
+ * @return array
+ */
private const TIMES = [
self::interval1->name => ['min' => 0, 'max' => 30],
self::interval2->name => ['min' => 31, 'max' => 120],
@@ -40,7 +51,7 @@ enum PreparationTimeEnum: int
/**
* Get enum images
*
- * @return array
+ * @return array>
*/
public static function toTimes(): array
{
diff --git a/app/Enums/SignsEnum.php b/app/Enums/SignsEnum.php
index f00cbdd..cda25bd 100644
--- a/app/Enums/SignsEnum.php
+++ b/app/Enums/SignsEnum.php
@@ -20,6 +20,12 @@ enum SignsEnum: int
case uexpress = 10;
case netto = 11;
+ /**
+ * Enum labels
+ *
+ * @return array
+ * @phpstan-ignore-next-line
+ */
private const LABELS = [
self::leclerc->name => 'Leclerc',
self::auchan->name => 'Auchan',
diff --git a/app/Http/Controllers/Bo/CertificationController.php b/app/Http/Controllers/Bo/CertificationController.php
index 8ac432c..7895cf6 100644
--- a/app/Http/Controllers/Bo/CertificationController.php
+++ b/app/Http/Controllers/Bo/CertificationController.php
@@ -16,9 +16,9 @@ class CertificationController extends Controller
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function index(Request $request)
+ public function index(Request $request): \Illuminate\Contracts\View\View
{
/** @var \Illuminate\Database\Eloquent\Builder $certifications */
$certifications = Certification::query();
@@ -43,9 +43,9 @@ class CertificationController extends Controller
/**
* Show the form for creating a new resource.
*
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function create()
+ public function create(): \Illuminate\Contracts\View\View
{
return view('bo.pages.certifications.create');
}
@@ -54,9 +54,9 @@ class CertificationController extends Controller
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Certifications\StoreCertificationRequest $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function store(StoreCertificationRequest $request)
+ public function store(StoreCertificationRequest $request): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request) {
$certification = new Certification();
@@ -84,9 +84,9 @@ class CertificationController extends Controller
* Show the form for editing the specified resource.
*
* @param \App\Models\Certification $certification
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function edit(Certification $certification)
+ public function edit(Certification $certification): \Illuminate\Contracts\View\View
{
return view('bo.pages.certifications.edit', [
'certificationModel' => $certification,
@@ -98,10 +98,12 @@ class CertificationController extends Controller
*
* @param \App\Http\Requests\Bo\Certifications\UpdateCertificationRequest $request
* @param \App\Models\Certification $certification
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function update(UpdateCertificationRequest $request, Certification $certification)
- {
+ public function update(
+ UpdateCertificationRequest $request,
+ Certification $certification
+ ): \Illuminate\Http\RedirectResponse {
return DB::transaction(function () use ($request, $certification) {
$certification->fill($request->validated());
@@ -126,9 +128,9 @@ class CertificationController extends Controller
* Remove the specified resource from storage.
*
* @param \App\Models\Certification $certification
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function destroy(Certification $certification)
+ public function destroy(Certification $certification): \Illuminate\Http\RedirectResponse
{
if ($certification->deleteOrFail()) {
return redirect()
diff --git a/app/Http/Controllers/Bo/DashboardController.php b/app/Http/Controllers/Bo/DashboardController.php
index 960a9c1..e28be1b 100644
--- a/app/Http/Controllers/Bo/DashboardController.php
+++ b/app/Http/Controllers/Bo/DashboardController.php
@@ -3,7 +3,6 @@
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
-use Illuminate\Contracts\View\View;
class DashboardController extends Controller
{
@@ -12,7 +11,7 @@ class DashboardController extends Controller
*
* @return \Illuminate\Contracts\View\View
*/
- public function index(): View
+ public function index(): \Illuminate\Contracts\View\View
{
return view('bo.pages.dashboard');
}
diff --git a/app/Http/Controllers/Bo/ProductController.php b/app/Http/Controllers/Bo/ProductController.php
index 5a0de29..7365f21 100644
--- a/app/Http/Controllers/Bo/ProductController.php
+++ b/app/Http/Controllers/Bo/ProductController.php
@@ -22,9 +22,9 @@ class ProductController extends Controller
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function index(Request $request)
+ public function index(Request $request): \Illuminate\Contracts\View\View
{
/** @var \Illuminate\Database\Eloquent\Builder $products */
$products = Product::query();
@@ -50,9 +50,9 @@ class ProductController extends Controller
/**
* Show the form for creating a new resource.
*
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function create()
+ public function create(): \Illuminate\Contracts\View\View
{
$ranges = Range::all();
$certifications = Certification::all();
@@ -65,9 +65,9 @@ class ProductController extends Controller
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Products\StoreProductRequest $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function store(StoreProductRequest $request)
+ public function store(StoreProductRequest $request): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request) {
$product = new Product();
@@ -97,9 +97,9 @@ class ProductController extends Controller
* Show the form for editing the specified resource.
*
* @param \App\Models\Product $product
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function edit(Product $product)
+ public function edit(Product $product): \Illuminate\Contracts\View\View
{
$ranges = Range::all();
$certifications = Certification::all();
@@ -118,9 +118,9 @@ class ProductController extends Controller
*
* @param \App\Http\Requests\Bo\Products\UpdateProductRequest $request
* @param \App\Models\Product $product
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function update(UpdateProductRequest $request, Product $product)
+ public function update(UpdateProductRequest $request, Product $product): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request, $product) {
$product->fill($request->validated());
@@ -148,9 +148,9 @@ class ProductController extends Controller
* Remove the specified resource from storage.
*
* @param \App\Models\Product $product
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function destroy(Product $product)
+ public function destroy(Product $product): \Illuminate\Http\RedirectResponse
{
if ($product->deleteOrFail()) {
return redirect()
diff --git a/app/Http/Controllers/Bo/RangeController.php b/app/Http/Controllers/Bo/RangeController.php
index a2715f7..379890e 100644
--- a/app/Http/Controllers/Bo/RangeController.php
+++ b/app/Http/Controllers/Bo/RangeController.php
@@ -6,23 +6,21 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\Ranges\UpdateRangeRequest;
use App\Models\Range;
use App\Traits\Controllers\UpdateModelStatus;
-use App\Traits\Controllers\ChangesModelOrder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class RangeController extends Controller
{
- use ChangesModelOrder;
use UpdateModelStatus;
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function index(Request $request)
+ public function index(Request $request): \Illuminate\Contracts\View\View
{
/** @var \Illuminate\Database\Eloquent\Builder $ranges */
$ranges = Range::query();
@@ -48,9 +46,9 @@ class RangeController extends Controller
* Show the form for editing the specified resource.
*
* @param \App\Models\Range $range
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function edit(Range $range)
+ public function edit(Range $range): \Illuminate\Contracts\View\View
{
return view('bo.pages.ranges.edit', [
'rangeModel' => $range
@@ -62,9 +60,9 @@ class RangeController extends Controller
*
* @param \App\Http\Requests\Bo\Ranges\UpdateRangeRequest $request
* @param \App\Models\Range $range
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function update(UpdateRangeRequest $request, Range $range)
+ public function update(UpdateRangeRequest $request, Range $range): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request, $range) {
$range->fill($request->validated());
diff --git a/app/Http/Controllers/Bo/RecipeController.php b/app/Http/Controllers/Bo/RecipeController.php
index 77bcf7a..0e86efb 100644
--- a/app/Http/Controllers/Bo/RecipeController.php
+++ b/app/Http/Controllers/Bo/RecipeController.php
@@ -20,9 +20,9 @@ class RecipeController extends Controller
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function index(Request $request)
+ public function index(Request $request): \Illuminate\Contracts\View\View
{
/** @var \Illuminate\Database\Eloquent\Builder $recipes */
$recipes = Recipe::query();
@@ -48,9 +48,9 @@ class RecipeController extends Controller
/**
* Show the form for creating a new resource.
*
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function create()
+ public function create(): \Illuminate\Contracts\View\View
{
$products = Product::all();
$recipes = Recipe::all();
@@ -65,9 +65,9 @@ class RecipeController extends Controller
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Recipes\StoreRecipeRequest $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function store(StoreRecipeRequest $request)
+ public function store(StoreRecipeRequest $request): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request) {
$recipe = new Recipe();
@@ -98,12 +98,12 @@ class RecipeController extends Controller
* Show the form for editing the specified resource.
*
* @param \App\Models\Recipe $recipe
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function edit(Recipe $recipe)
+ public function edit(Recipe $recipe): \Illuminate\Contracts\View\View
{
$products = Product::all();
- $recipes = Recipe::where('id', '!=', $recipe->id)->get();
+ $recipes = Recipe::query()->where('id', '!=', $recipe->id)->get();
return view('bo.pages.recipes.edit', [
'recipeModel' => $recipe,
@@ -117,9 +117,9 @@ class RecipeController extends Controller
*
* @param \App\Http\Requests\Bo\Recipes\UpdateRecipeRequest $request
* @param \App\Models\Recipe $recipe
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function update(UpdateRecipeRequest $request, Recipe $recipe)
+ public function update(UpdateRecipeRequest $request, Recipe $recipe): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request, $recipe) {
$recipe->products()->sync($request->product_list);
@@ -149,9 +149,9 @@ class RecipeController extends Controller
* Remove the specified resource from storage.
*
* @param \App\Models\Recipe $recipe
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function destroy(Recipe $recipe)
+ public function destroy(Recipe $recipe): \Illuminate\Http\RedirectResponse
{
DB::table('recipe_recipe')->where($recipe->recipes()->getRelatedPivotKeyName(), $recipe->id)->delete();
$recipe->products()->sync([]);
diff --git a/app/Http/Controllers/Bo/ShopController.php b/app/Http/Controllers/Bo/ShopController.php
index 0b2f34e..d304606 100644
--- a/app/Http/Controllers/Bo/ShopController.php
+++ b/app/Http/Controllers/Bo/ShopController.php
@@ -16,9 +16,9 @@ class ShopController extends Controller
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function index(Request $request)
+ public function index(Request $request): \Illuminate\Contracts\View\View
{
/** @var \Illuminate\Database\Eloquent\Builder $shops */
$shops = Shop::query();
@@ -46,9 +46,9 @@ class ShopController extends Controller
/**
* Show the form for creating a new resource.
*
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function create()
+ public function create(): \Illuminate\Contracts\View\View
{
return view('bo.pages.shops.create');
}
@@ -57,9 +57,9 @@ class ShopController extends Controller
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Shops\StoreShopRequest $request
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function store(StoreShopRequest $request)
+ public function store(StoreShopRequest $request): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request) {
$shop = new Shop();
@@ -87,9 +87,9 @@ class ShopController extends Controller
* Show the form for editing the specified resource.
*
* @param \App\Models\Shop $shop
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Contracts\View\View
*/
- public function edit(Shop $shop)
+ public function edit(Shop $shop): \Illuminate\Contracts\View\View
{
return view('bo.pages.shops.edit', [
'shopModel' => $shop,
@@ -101,9 +101,9 @@ class ShopController extends Controller
*
* @param \App\Http\Requests\Bo\Shops\UpdateShopRequest $request
* @param \App\Models\Shop $shop
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function update(UpdateShopRequest $request, Shop $shop)
+ public function update(UpdateShopRequest $request, Shop $shop): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request, $shop) {
$shop->fill($request->validated());
@@ -129,9 +129,9 @@ class ShopController extends Controller
* Remove the specified resource from storage.
*
* @param \App\Models\Shop $shop
- * @return \Illuminate\Http\Response
+ * @return \Illuminate\Http\RedirectResponse
*/
- public function destroy(Shop $shop)
+ public function destroy(Shop $shop): \Illuminate\Http\RedirectResponse
{
if ($shop->deleteOrFail()) {
return redirect()
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 4513185..e45f190 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -111,10 +111,7 @@ class Controller extends BaseController
Session::remove("$rName.sort_way");
}
if (request()->sort_col and request()->sort_way and Schema::hasColumn($table, request()->sort_col)) {
- if (
- !isset($ignore) or
- (isset($ignore) and !in_array(request()->sort_col, $ignore))
- ) {
+ if (!in_array(request()->sort_col, $ignore)) {
$query = $query->orderBy(\sprintf("$table.%s", request()->sort_col), request()->sort_way);
}
} elseif (Schema::hasColumn($table, 'order')) {
diff --git a/app/Http/Controllers/Fo/HomeController.php b/app/Http/Controllers/Fo/HomeController.php
index ffa6b20..38b31e0 100644
--- a/app/Http/Controllers/Fo/HomeController.php
+++ b/app/Http/Controllers/Fo/HomeController.php
@@ -16,11 +16,12 @@ class HomeController extends Controller
public function index()
{
// Gammes.
- $ranges = Range::where('status', true)
+ $ranges = Range::query()->where('status', true)
->get();
// 3 Recettes.
- $publishedRecipes = Recipe::where('status', true)
+ $publishedRecipes = Recipe::query()
+ ->where('status', true)
->inRandomOrder()
->take(3)
->get();
diff --git a/app/Http/Controllers/Fo/ProductsController.php b/app/Http/Controllers/Fo/ProductsController.php
index 430d3ef..8cbc0d6 100644
--- a/app/Http/Controllers/Fo/ProductsController.php
+++ b/app/Http/Controllers/Fo/ProductsController.php
@@ -17,7 +17,7 @@ class ProductsController extends Controller
public function index()
{
// Gammes.
- $ranges = Range::where('status', true)
+ $ranges = Range::query()->where('status', true)
->get();
return view('fo.pages.products.index', compact('ranges'));
diff --git a/app/Http/Controllers/Fo/RecipesController.php b/app/Http/Controllers/Fo/RecipesController.php
index 8a4bd39..cc0f0cd 100644
--- a/app/Http/Controllers/Fo/RecipesController.php
+++ b/app/Http/Controllers/Fo/RecipesController.php
@@ -66,7 +66,8 @@ class RecipesController extends Controller
$relatedRecipes = $publishedRecipe->recipes()->where('status', true)->get();
// 3 Recettes.
- $publishedRecipes = Recipe::where('status', true)
+ $publishedRecipes = Recipe::query()
+ ->where('status', true)
->where('id', '!=', $publishedRecipe->id)
->take(3)
->get();
@@ -84,7 +85,6 @@ class RecipesController extends Controller
*
* @param \App\Models\Recipe $publishedRecipe
* @return \Symfony\Component\HttpFoundation\Response
- * @return void
*/
public function printRecipe(Recipe $publishedRecipe): \Symfony\Component\HttpFoundation\Response
{
@@ -104,17 +104,17 @@ class RecipesController extends Controller
/**
* Generate recipe PDF
*
- * @param \App\Models\Recipe $recipe
- * @param string $title
+ * @param \App\Models\Recipe $recipe
+ * @param string $title
* @return \Mccarlosen\LaravelMpdf\LaravelMpdf
*/
private function generateRecipePdf(Recipe $recipe, string $title): \Mccarlosen\LaravelMpdf\LaravelMpdf
{
$tabRecipe = \json_decode(\json_encode(new RecipeResource($recipe)));
- /** @var \Mccarlosen\LaravelMpdf\LaravelMpdf */
+
$mpdf = app('laravel-mpdf');
/** @var \Mccarlosen\LaravelMpdf\LaravelMpdf */
- $pdf = $mpdf->loadView(
+ $pdf = $mpdf->loadView(
'fo.documents.recipe',
// * Dirty convert to object.
[
diff --git a/app/Http/Controllers/Fo/ShopController.php b/app/Http/Controllers/Fo/ShopController.php
index 10434bd..1c49956 100644
--- a/app/Http/Controllers/Fo/ShopController.php
+++ b/app/Http/Controllers/Fo/ShopController.php
@@ -14,9 +14,9 @@ class ShopController extends Controller
/**
* Get all shops
*
- * @return json
+ * @return \Illuminate\Http\JsonResponse
*/
- public function index()
+ public function index(): \Illuminate\Http\JsonResponse
{
if (request()->wantsJson()) {
return response()
@@ -28,10 +28,10 @@ class ShopController extends Controller
/**
* Get the 5 nearest shops with the given coords in the request.
*
- * @param App\Http\Requests\Fo\Shop\GetNearestShopRequest $request
- * @return json
+ * @param \App\Http\Requests\Fo\Shop\GetNearestShopRequest $request
+ * @return \Illuminate\Http\JsonResponse
*/
- public function getNearest(GetNearestShopRequest $request)
+ public function getNearest(GetNearestShopRequest $request): \Illuminate\Http\JsonResponse
{
if (!$request->wantsJson()) {
return abort(404);
diff --git a/app/Http/Requests/Bo/Certifications/StoreCertificationRequest.php b/app/Http/Requests/Bo/Certifications/StoreCertificationRequest.php
index 386b390..3d112bd 100644
--- a/app/Http/Requests/Bo/Certifications/StoreCertificationRequest.php
+++ b/app/Http/Requests/Bo/Certifications/StoreCertificationRequest.php
@@ -27,7 +27,7 @@ class StoreCertificationRequest extends FormRequest
protected function prepareForValidation()
{
$this->merge([
- 'status' => $this->status ? true : false
+ 'status' => $this->boolean('status')
]);
$this->mergePicture('sticker');
}
diff --git a/app/Http/Requests/Bo/ChangeOrderRequest.php b/app/Http/Requests/Bo/ChangeOrderRequest.php
index db70a4c..547064e 100644
--- a/app/Http/Requests/Bo/ChangeOrderRequest.php
+++ b/app/Http/Requests/Bo/ChangeOrderRequest.php
@@ -24,7 +24,7 @@ class ChangeOrderRequest extends FormRequest
protected function prepareForValidation()
{
$this->merge([
- 'direction' => $this->action === 'up' ? true : false
+ 'direction' => $this->direction === 'up' ? true : false
]);
}
@@ -36,7 +36,6 @@ class ChangeOrderRequest extends FormRequest
public function rules()
{
return [
- 'action' => 'required|string|in:up,down',
'direction' => 'required|boolean',
];
}
diff --git a/app/Http/Requests/Bo/Products/StoreProductRequest.php b/app/Http/Requests/Bo/Products/StoreProductRequest.php
index 16d4bd0..1345e9e 100644
--- a/app/Http/Requests/Bo/Products/StoreProductRequest.php
+++ b/app/Http/Requests/Bo/Products/StoreProductRequest.php
@@ -31,15 +31,15 @@ class StoreProductRequest extends FormRequest
protected function prepareForValidation()
{
$this->merge([
- 'status' => $this->status ? true : false,
- 'nutritional_values' => $this->nutritional_values ?? [],
+ 'status' => $this->boolean('status'),
+ 'nutritional_values' => $this->input('nutritional_values') ?? [],
'certification_list' => \collect($this->certifications)->map(function ($value) {
return \is_array($value) ? ($value['value'] ?? null) : null;
})->filter()->all(),
'recipe_list' => \collect($this->recipes)->map(function ($value) {
return \is_array($value) ? ($value['value'] ?? null) : null;
})->filter()->all(),
- 'description' => (string)Str::of($this->post('description'))
+ 'description' => (string)Str::of($this->input('description'))
]);
$this->mergePicture('picture');
$this->mergePicture('sticker');
diff --git a/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php b/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php
index 909c611..c5c72c8 100644
--- a/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php
+++ b/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php
@@ -28,8 +28,8 @@ class UpdateRangeRequest extends FormRequest
protected function prepareForValidation()
{
$this->merge([
- 'slug' => Str::slug(strip_tags($this->name)),
- 'status' => $this->status ? true : false
+ 'slug' => Str::slug(strip_tags($this->input('name'))),
+ 'status' => $this->boolean('status')
]);
$this->mergePicture('picture');
$this->mergePicture('banner');
diff --git a/app/Http/Requests/Bo/Recipes/StoreRecipeRequest.php b/app/Http/Requests/Bo/Recipes/StoreRecipeRequest.php
index 04659c7..eb0ea7a 100644
--- a/app/Http/Requests/Bo/Recipes/StoreRecipeRequest.php
+++ b/app/Http/Requests/Bo/Recipes/StoreRecipeRequest.php
@@ -31,12 +31,12 @@ class StoreRecipeRequest extends FormRequest
protected function prepareForValidation()
{
$this->merge([
- 'slug' => Str::slug(strip_tags($this->title)),
- 'status' => $this->status ? true : false,
- 'ingredients' => $this->ingredients ?? [],
- 'products' => $this->products ?? [],
- 'recipes' => $this->recipes ?? [],
- 'cooking_time' => $this->cooking_time ?? 0,
+ 'slug' => Str::slug(strip_tags($this->input('title'))),
+ 'status' => $this->boolean('status'),
+ 'ingredients' => $this->input('ingredients') ?? [],
+ 'products' => $this->input('products') ?? [],
+ 'recipes' => $this->input('recipes') ?? [],
+ 'cooking_time' => $this->input('cooking_time') ?? 0,
// * For sync relations
'product_list' => \collect($this->products)->map(function ($value) {
return \is_array($value) ? ($value['value'] ?? null) : null;
diff --git a/app/Http/Requests/Bo/UpdateMiniCrudRequest.php b/app/Http/Requests/Bo/UpdateMiniCrudRequest.php
index f845c96..19b187a 100644
--- a/app/Http/Requests/Bo/UpdateMiniCrudRequest.php
+++ b/app/Http/Requests/Bo/UpdateMiniCrudRequest.php
@@ -109,7 +109,7 @@ abstract class UpdateMiniCrudRequest extends FormRequest
$rules = array_merge($rules, [
"data.$iptName.value" => [
function (string $attribute, $value, callable $fail) use ($sizes) {
- return ToolboxHelper::validatePicture($attribute, $value, $fail, $sizes);
+ ToolboxHelper::validatePicture($attribute, $value, $fail, $sizes);
}
],
$this->compileValidate(
diff --git a/app/Http/Resources/Fo/Recipes/RecipeResource.php b/app/Http/Resources/Fo/Recipes/RecipeResource.php
index e488db1..2f4b507 100644
--- a/app/Http/Resources/Fo/Recipes/RecipeResource.php
+++ b/app/Http/Resources/Fo/Recipes/RecipeResource.php
@@ -45,9 +45,12 @@ class RecipeResource extends JsonResource
*
* @param \Illuminate\Http\Request|null $request
* @return array
+ *
+ * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
public function toArray(?Request $request = null): array
{
+ // phpcs:enable
return array_intersect_key(
[
'id' => $this->recipe->id,
diff --git a/app/Lib/Helpers/ExceptionsHelper.php b/app/Lib/Helpers/ExceptionsHelper.php
index 4813275..30deb54 100644
--- a/app/Lib/Helpers/ExceptionsHelper.php
+++ b/app/Lib/Helpers/ExceptionsHelper.php
@@ -145,7 +145,7 @@ class ExceptionsHelper
$traceStr .= self::handleArgs($stack);
}
$traceStr .= ")\n";
- } elseif (isset($stack['function'])) {
+ } else {
$traceStr .= "{$stack['function']}(";
if (isset($stack['args'])) {
$traceStr .= self::handleArgs($stack);
diff --git a/app/Lib/Helpers/FileStorageHelper.php b/app/Lib/Helpers/FileStorageHelper.php
index 45ccec9..ac9d2bd 100644
--- a/app/Lib/Helpers/FileStorageHelper.php
+++ b/app/Lib/Helpers/FileStorageHelper.php
@@ -118,7 +118,7 @@ class FileStorageHelper
);
return str_replace('/private/', '', $newPath);
- }//end if
+ } //end if
if (\is_object($file) and $file instanceof \SplFileInfo) {
/** @var \SplFileInfo $file */
$filename = $filename ?: $file->getBaseName();
@@ -309,7 +309,6 @@ class FileStorageHelper
$private ? 'app/private/modelfiles' : 'app/public/modelfiles',
$tableName,
$filename,
- $private
);
$filename = self::getFileUniqueName($folderPath, $filename);
return "{$folderPath}/{$filename}";
@@ -404,7 +403,7 @@ class FileStorageHelper
$filename = Str::of($filename)->ltrim('.-');
// * Optional beautification
if ($beautify) {
- $filename = static::beautifyFilename($filename);
+ $filename = self::beautifyFilename($filename);
}
// * Maximize filename length to 255 bytes http://serverfault.com/a/9548/44086
/** @var string */
diff --git a/app/Lib/Helpers/ToolboxHelper.php b/app/Lib/Helpers/ToolboxHelper.php
index 1df6d81..b662842 100644
--- a/app/Lib/Helpers/ToolboxHelper.php
+++ b/app/Lib/Helpers/ToolboxHelper.php
@@ -170,11 +170,10 @@ class ToolboxHelper
$url = $match;
try {
$request = Request::create($url);
- // If a route is match then it do not throws exception.
- if (
- \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) &&
- $routes->match($request)
- ) {
+ // Assert route matches existing routes.
+ $routes->match($request);
+ // ? Is url internal ?
+ if (\parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST)) {
// Removes the matched url.
throw ValidationException::withMessages([
$field => trans(
@@ -200,14 +199,14 @@ class ToolboxHelper
* @param array|string $replace
* @param array|string $subject
* @param integer $count
- * @return array|string
+ * @return array|string|false
*/
public static function mbReplace(
array|string $search,
array|string $replace,
array|string $subject,
int &$count = 0
- ): array|string {
+ ): array|string|false {
if (!is_array($search) && is_array($replace)) {
return false;
}
@@ -284,9 +283,12 @@ class ToolboxHelper
public static function getOriginal(Model $model, string $attribute): mixed
{
if (\in_array('Spatie\Translatable\HasTranslations', \class_uses_recursive($model))) {
+ // @phpstan-ignore-next-line
return $model->getTranslation(
$attribute,
+ // @phpstan-ignore-next-line
$model->getLocale(),
+ // @phpstan-ignore-next-line
$model->useFallbackLocale()
);
}
@@ -310,7 +312,7 @@ class ToolboxHelper
): Builder {
$currentLocale = app()->currentLocale();
$locales = collect(config('app.locales'))
- ->mapWithKeys(fn (string $locale) => [$locale => $locale]);
+ ->mapWithKeys(fn (string $locale) => [$locale => $locale]);
if (!$locales->has($defaultLocale)) {
// * Remove default locale.
$locales->pull($defaultLocale);
@@ -356,55 +358,55 @@ class ToolboxHelper
/**
* Convert deeply an object to array
*
- * @param array|object $input
+ * @param mixed $input
* @return array
* @throws \RuntimeException If $input var is a scalar value.
*/
- public static function objectToArray($input): array
+ public static function objectToArray(mixed $input): array
{
// Only process if it's an object or array being passed to the function.
- if (is_object($input) or is_array($input)) {
- $ret = (array)$input;
- foreach ($ret as &$item) {
- // Recursively process EACH element only if not scalar.
- $item = (is_object($item) or is_array($item)) ?
- self::objectToArray($item) : $item;
- }
- return $ret;
- } else {
+ if (!(is_object($input) or is_array($input))) {
throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input));
}
+ $ret = (array)$input;
+ foreach ($ret as &$item) {
+ // Recursively process EACH element only if not scalar.
+ $item = (is_object($item) or is_array($item)) ?
+ self::objectToArray($item) : $item;
+ }
+ return $ret;
}
+
/**
* Convert deeply an array to object
*
- * @param array|object $input
+ * @param mixed $input
* @return object
* @throws \RuntimeException If $input var is a scalar value.
*/
- public static function arrayToObject($input): object
+ public static function arrayToObject(mixed $input): object
{
// Only process if it's an object or array being passed to the function.
- if (is_object($input) or is_array($input)) {
- $ret = (object)$input;
- foreach ($ret as &$item) {
- // Recursively process EACH element only if not scalar.
- $item = (is_object($item) or is_array($item)) ?
- self::arrayToObject($item) : $item;
- }
- return $ret;
- } else {
+ if (!(is_object($input) or is_array($input))) {
throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input));
}
+ $ret = (object)$input;
+ foreach ($ret as &$item) {
+ // Recursively process EACH element only if not scalar.
+ $item = (is_object($item) or is_array($item)) ?
+ self::arrayToObject($item) : $item;
+ }
+ return $ret;
}
+
/**
* Validate picture
*
* @param string $attribute
* @param string|null $value
- * @param callback $fail
+ * @param callable $fail
* @param object $sizes
* @return void
*/
@@ -427,7 +429,7 @@ class ToolboxHelper
'attribute' => $attribute
]));
}
- if (!($dimensions = \getimagesize($fileFullPath)) or !isset($dimensions[0]) or !isset($dimensions[1])) {
+ if (!($dimensions = \getimagesize($fileFullPath))) {
$fail(trans(':attribute impossible de valider les dimensions', [
'attribute' => $attribute
]));
diff --git a/app/Models/Certification.php b/app/Models/Certification.php
index 5e19ed7..437fcba 100644
--- a/app/Models/Certification.php
+++ b/app/Models/Certification.php
@@ -25,7 +25,7 @@ class Certification extends Model
/**
* The attributes that are mass assignable.
*
- * @var array
+ * @var array
*/
protected $fillable = [
'name',
@@ -38,7 +38,7 @@ class Certification extends Model
/**
* The attributes that should be cast.
*
- * @var array
+ * @var array
*/
protected $casts = [
'status' => 'bool'
@@ -61,7 +61,7 @@ class Certification extends Model
$model->sticker = FileStorageHelper::storeFile($model, $model->sticker, true);
});
static::updated(function (self $model) {
- $model->sticker = FileStorageHelper::removeOldFile($model, 'sticker');
+ FileStorageHelper::removeOldFile($model, 'sticker');
self::flashStatus($model, true);
});
static::deleting(function (self $model) {
diff --git a/app/Models/Product.php b/app/Models/Product.php
index c45e46e..223418b 100644
--- a/app/Models/Product.php
+++ b/app/Models/Product.php
@@ -19,7 +19,7 @@ class Product extends Model
/**
* The attributes that are mass assignable.
*
- * @var array
+ * @var array
*/
protected $fillable = [
'name',
@@ -47,7 +47,7 @@ class Product extends Model
/**
* The attributes that should be cast.
*
- * @var array
+ * @var array
*/
protected $casts = [
/** @var array */
@@ -67,7 +67,7 @@ class Product extends Model
// * EVENT CLOSURES.
static::creating(function (self $model) {
// * ASSERTIONS
- static::assertFieldIsUnique('name', $model->name);
+ self::assertFieldIsUnique('name', $model->name);
ToolboxHelper::assertNoInternalBoUrls('description', $model->description);
ToolboxHelper::assertNoInternalBoUrls('preparation', $model->preparation ?? '');
ToolboxHelper::assertNoInternalBoUrls('ingredients', $model->ingredients);
@@ -82,7 +82,7 @@ class Product extends Model
});
static::updating(function (self $model) {
// * ASSERTIONS
- static::assertFieldIsUnique('name', $model->name, $model->id);
+ self::assertFieldIsUnique('name', $model->name, $model->id);
ToolboxHelper::assertNoInternalBoUrls('description', $model->description);
ToolboxHelper::assertNoInternalBoUrls('preparation', $model->preparation ?? '');
ToolboxHelper::assertNoInternalBoUrls('ingredients', $model->ingredients);
diff --git a/app/Models/Range.php b/app/Models/Range.php
index d8ec9eb..6ce8b82 100644
--- a/app/Models/Range.php
+++ b/app/Models/Range.php
@@ -48,7 +48,7 @@ class Range extends Model
/**
* The attributes that are mass assignable.
*
- * @var array
+ * @var array
*/
protected $fillable = [
'name',
@@ -80,8 +80,8 @@ class Range extends Model
});
static::updating(function (self $model) {
// * ASSERTIONS
- static::assertFieldIsUnique('name', $model->name, $model->id);
- static::assertAtLeastOneIsPublished($model);
+ self::assertFieldIsUnique('name', $model->name, $model->id);
+ self::assertAtLeastOneIsPublished($model);
// * TRANSFORMATIONS
$model->slug = Str::slug($model->name);
@@ -90,9 +90,9 @@ class Range extends Model
$model->sticker = FileStorageHelper::storeFile($model, $model->sticker, true);
});
static::updated(function (self $model) {
- $model->picture = FileStorageHelper::removeOldFile($model, 'picture');
- $model->banner = FileStorageHelper::removeOldFile($model, 'banner');
- $model->banner = FileStorageHelper::removeOldFile($model, 'sticker');
+ FileStorageHelper::removeOldFile($model, 'picture');
+ FileStorageHelper::removeOldFile($model, 'banner');
+ FileStorageHelper::removeOldFile($model, 'sticker');
static::flashStatus($model, true);
});
static::deleting(function () {
diff --git a/app/Models/Recipe.php b/app/Models/Recipe.php
index 3d25004..3b186e2 100644
--- a/app/Models/Recipe.php
+++ b/app/Models/Recipe.php
@@ -19,7 +19,7 @@ class Recipe extends Model
/**
* The attributes that are mass assignable.
*
- * @var array
+ * @var array
*/
protected $fillable = [
'name',
@@ -47,7 +47,7 @@ class Recipe extends Model
/**
* The attributes that should be cast.
*
- * @var array
+ * @var array
*/
protected $casts = [
'ingredients' => 'array',
@@ -65,14 +65,14 @@ class Recipe extends Model
{
// * EVENT CLOSURES.
static::creating(function (self $model) {
- static::assertFieldIsUnique('name', $model->name);
+ self::assertFieldIsUnique('name', $model->name);
self::manageFields($model);
});
static::created(function (self $model) {
self::flashStatus($model);
});
static::updating(function (self $model) {
- static::assertFieldIsUnique('name', $model->name, $model->id);
+ self::assertFieldIsUnique('name', $model->name, $model->id);
self::manageFields($model);
});
static::updated(function (self $model) {
@@ -91,10 +91,10 @@ class Recipe extends Model
/**
* Manage fields on this model event.
*
- * @param \Illuminate\Database\Eloquent\Model $model
+ * @param self $model
* @return void
*/
- private static function manageFields(Model $model)
+ private static function manageFields(self $model)
{
// * ASSERTIONS
ToolboxHelper::assertNoInternalBoUrls('description', $model->description);
diff --git a/app/Models/Shop.php b/app/Models/Shop.php
index 4b56441..8782262 100644
--- a/app/Models/Shop.php
+++ b/app/Models/Shop.php
@@ -14,7 +14,7 @@ class Shop extends Model
/**
* The attributes that are mass assignable.
*
- * @var array
+ * @var array
*/
protected $fillable = [
'name',
@@ -29,7 +29,7 @@ class Shop extends Model
/**
* The attributes that should be cast.
*
- * @var array
+ * @var array
*/
protected $casts = [
'signs' => SignsEnum::class,
@@ -45,11 +45,11 @@ class Shop extends Model
// * EVENT CLOSURES.
static::creating(function (self $model) {
// * ASSERTIONS
- static::assertFieldIsUnique('name', $model->name);
+ self::assertFieldIsUnique('name', $model->name);
});
static::updating(function (self $model) {
// * ASSERTIONS
- static::assertFieldIsUnique('name', $model->name, $model->id);
+ self::assertFieldIsUnique('name', $model->name, $model->id);
});
}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 956f342..e5c79ba 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -38,7 +38,7 @@ class AppServiceProvider extends ServiceProvider
return request()->getClientIp();
} else {
return request()->server('HTTP_X_FORWARDED_FOR') ??
- request()->getClientIp();
+ request()->getClientIp();
}
});
@@ -71,7 +71,7 @@ class AppServiceProvider extends ServiceProvider
// * GAMMES
if (Schema::hasTable('ranges')) {
// On partage les ranges (gammes produit).
- $ranges = Range::where('status', true)->get();
+ $ranges = Range::query()->where('status', true)->get();
View::share('PublishedRangesGlobal', $ranges);
}
}
diff --git a/app/Providers/TranslationServiceProvider.php b/app/Providers/TranslationServiceProvider.php
index b3e3f4b..4849099 100644
--- a/app/Providers/TranslationServiceProvider.php
+++ b/app/Providers/TranslationServiceProvider.php
@@ -32,7 +32,7 @@ class TranslationServiceProvider extends ServiceProvider
/**
* Gather provided langs checking from files
*
- * @return \Illuminate\Support\Collection
+ * @return \Illuminate\Support\Collection
*/
private function collectLocalesStrings(): Collection
{
diff --git a/app/Traits/Controllers/ChangesModelOrder.php b/app/Traits/Controllers/ChangesModelOrder.php
index b7a9ade..cfdeaa8 100644
--- a/app/Traits/Controllers/ChangesModelOrder.php
+++ b/app/Traits/Controllers/ChangesModelOrder.php
@@ -3,59 +3,56 @@
namespace App\Traits\Controllers;
use App\Http\Requests\Bo\ChangeOrderRequest;
-use App\Traits\Models\IsCachedAsCollection;
use Illuminate\Database\Eloquent\Model;
-use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
-use Illuminate\Validation\ValidationException;
+use Illuminate\Support\Str;
trait ChangesModelOrder
{
/**
- * Change order
- *
- * ! requires x64 server + order column as unique integer
+ * Change order.
*
* @param \App\Http\Requests\Bo\ChangeOrderRequest $request
* @param \Illuminate\Database\Eloquent\Model $model
* @return \Illuminate\Http\RedirectResponse
* @throws \RuntimeException Si le nom du parametre de la route ne correspond pas au model utilisé.
*/
- public function changeOrder(ChangeOrderRequest $request, Model $model): RedirectResponse
+ public function changeOrder(ChangeOrderRequest $request, Model $model): \Illuminate\Http\RedirectResponse
{
- return DB::transaction(function () use ($request, $model) {
+ $params = collect(request()->route()->parameterNames);
+ $className = Str::ucfirst(Str::lower($params->get($params->count() - 2)));
+ $className = "\\App\\Models\\$className";
+
+ if (!class_exists($className)) {
+ throw new \RuntimeException("The $className class doesn't exist.");
+ }
+
+ /** @var \Illuminate\Database\Eloquent\Model|null */
+ $model = $className::query()->where($model->getRouteKeyName(), $model->getRouteKey())->first();
+
+ if (!$model) {
+ return back()->with('error', trans('crud.messages.order_not_changed'));
+ }
+
+ return DB::transaction(function () use ($request, $className, $model) {
/** @var \Illuminate\Database\Eloquent\Model|null */
- $tmp = (\get_class($model))::where('order', $request->direction ? '<' : '>', $model->order)
+ $tmp = $className::query()->where('order', $request->direction ? '<' : '>', $model->getOriginal('order'))
->orderBy('order', $request->direction ? 'DESC' : 'ASC')->first();
+
if (!$tmp) {
- return back()->with('bo.error', trans('L\'ordre n\'a pas pu être modifié'));
+ return back()->with('error', trans('crud.messages.order_not_changed'));
}
- $oldOrder = $model->order;
- $newOrder = $tmp->order;
- // * Silent update timestamps.
- $tmp->timestamps = false;
- $model->timestamps = false;
+ $newOrder = $tmp->getOriginal('order');
+ // Didn't use ->update() because it didn't work with Models which use MiniCrudModel.
+ $tmp->fill(['order' => $model->getOriginal('order')]);
+ $tmp->save();
+ $model->fill(['order' => $newOrder]);
+ $model->save();
- $saveOk = false;
+ Session::flash('success', trans('crud.messages.order_changed'));
- // ! Fake value to prevent unique SQL key to trigger.
- $tmp->order = 4294967295;
- $saveOk = $tmp->saveQuietly();
- $model->order = $newOrder;
- $saveOk = $model->saveQuietly() & $saveOk;
- $tmp->order = $oldOrder;
- $saveOk = $tmp->saveQuietly() & $saveOk;
- if (\in_array(IsCachedAsCollection::class, class_uses_recursive(\get_class($model)))) {
- $model::removeCached();
- }
- if (!$saveOk) {
- throw ValidationException::withMessages([
- 'error' => \trans('L\'ordre n\'a pas pu être modifié')
- ]);
- }
- Session::flash('bo.success', trans('L\'ordre a été modifié'));
return back();
});
}
diff --git a/app/Traits/Controllers/UpdateModelStatus.php b/app/Traits/Controllers/UpdateModelStatus.php
index 3315688..13c4f65 100644
--- a/app/Traits/Controllers/UpdateModelStatus.php
+++ b/app/Traits/Controllers/UpdateModelStatus.php
@@ -12,19 +12,14 @@ use Illuminate\Database\Eloquent\Model;
trait UpdateModelStatus
{
/**
- * Change model published
+ * Change model published.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @return \Illuminate\Http\RedirectResponse
*/
public function changePublished(Model $model)
{
- $model->status = !$model->status;
- $model->saveOrFail();
-
- if (!$model->saveOrFail()) {
- return redirect()->back()->with('error', __('The status could not be changed'));
- }
- return redirect()->back()->with('success', __('The status has been changed'));
+ $model->update(['published' => !$model->getOriginal('published')]);
+ return redirect()->back()->with('success', trans(__('crud.messages.publish_status_saved')));
}
}
diff --git a/app/Traits/Enums/BaseEnum.php b/app/Traits/Enums/BaseEnum.php
index 2af3e75..2ca2364 100644
--- a/app/Traits/Enums/BaseEnum.php
+++ b/app/Traits/Enums/BaseEnum.php
@@ -120,8 +120,8 @@ trait BaseEnum
/**
* Fetch enum using value
*
- * @param \App\Traits\Enums\BaseEnum|integer|string $value
- * @return \App\Traits\Enums\BaseEnum|null
+ * @param self|integer|string $value
+ * @return self|null
*/
public static function make(self|int|string $value): self|null
{
diff --git a/app/Traits/Models/IsCachedAsCollection.php b/app/Traits/Models/IsCachedAsCollection.php
index f8ede85..550b8dd 100644
--- a/app/Traits/Models/IsCachedAsCollection.php
+++ b/app/Traits/Models/IsCachedAsCollection.php
@@ -10,7 +10,8 @@ use Illuminate\Support\Facades\Cache;
/**
* ! Use this only on limited elements, (not on tags, or products, or posts for ex.)
*
- * @property private static array $cacheConditions Eloquent condition to cache elements (to be used in where statement).
+ * @property array $cacheConditions
+ * Eloquent condition to cache elements (to be used in where statement).
*/
trait IsCachedAsCollection
{
@@ -52,7 +53,7 @@ trait IsCachedAsCollection
{
$conditions = [];
if (property_exists(get_called_class(), 'cacheConditions')) {
- $conditions = collect(static::${'cacheConditions'})->all();
+ $conditions = collect(get_called_class()::${'cacheConditions'})->all();
}
Cache::put(static::getCacheKeyName(), static::queryCached(static::query())
->where($conditions)->get()
diff --git a/app/Traits/Requests/HasPicture.php b/app/Traits/Requests/HasPicture.php
index 5cc57dd..88806ad 100644
--- a/app/Traits/Requests/HasPicture.php
+++ b/app/Traits/Requests/HasPicture.php
@@ -66,7 +66,7 @@ trait HasPicture
$name => [
!$nullable ? 'required' : 'nullable',
function (string $attribute, $value, callable $fail) use ($sizes) {
- return ToolboxHelper::validatePicture($attribute, $value, $fail, $sizes);
+ ToolboxHelper::validatePicture($attribute, $value, $fail, $sizes);
}
]
];
@@ -101,7 +101,7 @@ trait HasPicture
"{$name}Validate.*" => [
'required',
function (string $attribute, $value, callable $fail) use ($sizes) {
- return $this->validatePicture($attribute, $value, $fail, $sizes);
+ ToolboxHelper::validatePicture($attribute, $value, $fail, $sizes);
}
]
];
diff --git a/composer.json b/composer.json
index aa7b517..119f45b 100644
--- a/composer.json
+++ b/composer.json
@@ -25,6 +25,7 @@
"fakerphp/faker": "^1.9.1",
"kitloong/laravel-migrations-generator": "^6.8",
"krlove/eloquent-model-generator": "dev-l10-compatibility",
+ "larastan/larastan": "^2.6",
"laravel-lang/lang": "10.0",
"laravel/pint": "^1.0",
"laravel/sail": "^1.18",
diff --git a/composer.lock b/composer.lock
index 9b6aa6e..b542148 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "3dbef383b0ae1a746367c2068cccb9ca",
+ "content-hash": "5337e7d480ce4959f67c40a20691a553",
"packages": [
{
"name": "axlon/laravel-postal-code-validation",
@@ -9359,6 +9359,108 @@
},
"time": "2023-01-30T20:15:06+00:00"
},
+ {
+ "name": "larastan/larastan",
+ "version": "v2.9.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/larastan/larastan.git",
+ "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/larastan/larastan/zipball/340badd89b0eb5bddbc503a4829c08cf9a2819d7",
+ "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0",
+ "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0",
+ "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0",
+ "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0",
+ "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0",
+ "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0",
+ "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0",
+ "php": "^8.0.2",
+ "phpmyadmin/sql-parser": "^5.9.0",
+ "phpstan/phpstan": "^1.11.2"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12.0",
+ "nikic/php-parser": "^4.19.1",
+ "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2",
+ "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3",
+ "phpunit/phpunit": "^9.6.13 || ^10.5.16"
+ },
+ "suggest": {
+ "orchestra/testbench": "Using Larastan for analysing a package needs Testbench"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Larastan\\Larastan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Can Vural",
+ "email": "can9119@gmail.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel",
+ "keywords": [
+ "PHPStan",
+ "code analyse",
+ "code analysis",
+ "larastan",
+ "laravel",
+ "package",
+ "php",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/larastan/larastan/issues",
+ "source": "https://github.com/larastan/larastan/tree/v2.9.8"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/canvural",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nunomaduro",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/nunomaduro",
+ "type": "patreon"
+ }
+ ],
+ "time": "2024-07-06T17:46:02+00:00"
+ },
{
"name": "laravel-lang/lang",
"version": "10.0.0",
@@ -9906,6 +10008,93 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
+ {
+ "name": "phpmyadmin/sql-parser",
+ "version": "5.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpmyadmin/sql-parser.git",
+ "reference": "91d980ab76c3f152481e367f62b921adc38af451"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451",
+ "reference": "91d980ab76c3f152481e367f62b921adc38af451",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "phpmyadmin/motranslator": "<3.0"
+ },
+ "require-dev": {
+ "phpbench/phpbench": "^1.1",
+ "phpmyadmin/coding-standard": "^3.0",
+ "phpmyadmin/motranslator": "^4.0 || ^5.0",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.9.12",
+ "phpstan/phpstan-phpunit": "^1.3.3",
+ "phpunit/phpunit": "^8.5 || ^9.6",
+ "psalm/plugin-phpunit": "^0.16.1",
+ "vimeo/psalm": "^4.11",
+ "zumba/json-serializer": "~3.0.2"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance",
+ "phpmyadmin/motranslator": "Translate messages to your favorite locale"
+ },
+ "bin": [
+ "bin/highlight-query",
+ "bin/lint-query",
+ "bin/sql-parser",
+ "bin/tokenize-query"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpMyAdmin\\SqlParser\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "The phpMyAdmin Team",
+ "email": "developers@phpmyadmin.net",
+ "homepage": "https://www.phpmyadmin.net/team/"
+ }
+ ],
+ "description": "A validating SQL lexer and parser with a focus on MySQL dialect.",
+ "homepage": "https://github.com/phpmyadmin/sql-parser",
+ "keywords": [
+ "analysis",
+ "lexer",
+ "parser",
+ "query linter",
+ "sql",
+ "sql lexer",
+ "sql linter",
+ "sql parser",
+ "sql syntax highlighter",
+ "sql tokenizer"
+ ],
+ "support": {
+ "issues": "https://github.com/phpmyadmin/sql-parser/issues",
+ "source": "https://github.com/phpmyadmin/sql-parser"
+ },
+ "funding": [
+ {
+ "url": "https://www.phpmyadmin.net/donate/",
+ "type": "other"
+ }
+ ],
+ "time": "2024-08-29T20:56:34+00:00"
+ },
{
"name": "phpstan/phpdoc-parser",
"version": "1.30.0",
@@ -9953,6 +10142,64 @@
},
"time": "2024-08-29T09:54:52+00:00"
},
+ {
+ "name": "phpstan/phpstan",
+ "version": "1.12.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan.git",
+ "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
+ "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ }
+ ],
+ "time": "2024-09-05T16:09:28+00:00"
+ },
{
"name": "phpunit/php-code-coverage",
"version": "10.1.16",
diff --git a/phpstan.neon b/phpstan.neon
new file mode 100644
index 0000000..df74d87
--- /dev/null
+++ b/phpstan.neon
@@ -0,0 +1,10 @@
+includes:
+ - vendor/larastan/larastan/extension.neon
+
+parameters:
+
+ paths:
+ - app/
+
+ # Level 9 is the highest level
+ level: 5