diff --git a/app/Http/Controllers/Bo/BrandAdvantageController.php b/app/Http/Controllers/Bo/BrandAdvantageController.php index d2e60359..1caba82f 100644 --- a/app/Http/Controllers/Bo/BrandAdvantageController.php +++ b/app/Http/Controllers/Bo/BrandAdvantageController.php @@ -10,6 +10,7 @@ use App\Traits\Controllers\ChangesModelOrder; use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class BrandAdvantageController extends Controller { @@ -47,11 +48,11 @@ class BrandAdvantageController extends Controller 'text', ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans('validation.attributes.title'), trans('validation.custom.sustitle'), trans('validation.attributes.text'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($brandAdvantageModels); @@ -100,12 +101,12 @@ class BrandAdvantageController extends Controller if ($brandAdvantage->saveOrFail()) { return redirect()->route('bo.brand_advantages.edit', $brandAdvantage) ->with('success', trans('crud.messages.has_been_created', [ - 'model' => str(trans_choice('models.classes.brand_advantage', 1))->ucfirst() + 'model' => Str::ucfirst(trans_choice('models.classes.brand_advantage', 1)) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ - 'model' => str(trans_choice('models.classes.brand_advantage', 1))->ucfirst() + 'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)) ])); }); } @@ -138,12 +139,12 @@ class BrandAdvantageController extends Controller if ($brandAdvantage->saveOrFail()) { return redirect()->route('bo.brand_advantages.edit', $brandAdvantage) ->with('success', trans('crud.messages.has_been_updated', [ - 'model' => str(trans_choice('models.classes.brand_advantage', 1))->ucfirst() + 'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)) ])); } return redirect()->route('bo.brand_advantages.edit', $brandAdvantage) ->with('error', trans('crud.messages.cannot_be_updated', [ - 'model' => str(trans_choice('models.classes.brand_advantage', 1))->ucfirst() + 'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)) ])); }); } @@ -162,12 +163,12 @@ class BrandAdvantageController extends Controller if ($brandAdvantage->deleteOrFail()) { return redirect()->route('bo.brand_advantages.index', $previousQueries) ->with('success', trans('crud.messages.has_been_deleted', [ - 'model' => str(trans_choice('models.classes.brand_advantage', 1))->ucfirst() + 'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ - 'model' => str(trans('models.classebrand_advantage'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classebrand_advantage')) ])); } diff --git a/app/Http/Controllers/Bo/MeatController.php b/app/Http/Controllers/Bo/MeatController.php index fb5e59ce..9a2382d5 100644 --- a/app/Http/Controllers/Bo/MeatController.php +++ b/app/Http/Controllers/Bo/MeatController.php @@ -12,6 +12,7 @@ use App\Traits\Controllers\ChangesModelOrder; use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class MeatController extends Controller { @@ -49,11 +50,11 @@ class MeatController extends Controller 'description', ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans('validation.custom.label'), trans('validation.custom.subtitle'), trans('validation.attributes.description'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($meatModels); @@ -102,12 +103,12 @@ class MeatController extends Controller if ($meat->saveOrFail()) { return redirect()->route('bo.meats.edit', $meat) ->with('success', trans('crud.messages.has_been_created', [ - 'model' => str(trans('models.classes.meat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.meat')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ - 'model' => str(trans('models.classes.meat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.meat')) ])); }); } @@ -140,12 +141,12 @@ class MeatController extends Controller if ($meat->saveOrFail()) { return redirect()->route('bo.meats.edit', $meat) ->with('success', trans('crud.messages.has_been_updated', [ - 'model' => str(trans('models.classes.meat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.meat')) ])); } return redirect()->route('bo.meats.edit', $meat) ->with('error', trans('crud.messages.cannot_be_updated', [ - 'model' => str(trans('models.classes.meat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.meat')) ])); }); } @@ -173,12 +174,12 @@ class MeatController extends Controller if ($meat->deleteOrFail()) { return redirect()->route('bo.meats.index', $previousQueries) ->with('success', trans('crud.messages.has_been_deleted', [ - 'model' => str(trans('models.classes.meat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.meat')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ - 'model' => str(trans('models.classes.meat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.meat')) ])); } @@ -239,8 +240,8 @@ class MeatController extends Controller return redirect()->route('bo.meats.edit-submeats-order', $request->meat) ->with('success', trans('crud.messages.submodels_have_been_reordered', [ - 'submodelName' => str(trans('models.classes.submeat'))->plural(), - 'modelLabel' => $meat->label, + 'submodelName' => Str::plural(trans('models.classes.submeat')), + 'modelLabel' => $meat->label, ])); }); } diff --git a/app/Http/Controllers/Bo/NewsBreedingController.php b/app/Http/Controllers/Bo/NewsBreedingController.php index d6385eed..35159696 100644 --- a/app/Http/Controllers/Bo/NewsBreedingController.php +++ b/app/Http/Controllers/Bo/NewsBreedingController.php @@ -62,11 +62,11 @@ class NewsBreedingController extends Controller 'associated_page' ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans('validation.attributes.title'), trans('validation.custom.subtitle'), trans('validation.attributes.content'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($newsBreedingModels); diff --git a/app/Http/Controllers/Bo/RangeController.php b/app/Http/Controllers/Bo/RangeController.php index 35f0f951..a7a83e68 100644 --- a/app/Http/Controllers/Bo/RangeController.php +++ b/app/Http/Controllers/Bo/RangeController.php @@ -12,6 +12,7 @@ use App\Traits\Controllers\ChangesModelOrder; use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class RangeController extends Controller { @@ -49,11 +50,11 @@ class RangeController extends Controller 'description', ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans('validation.custom.label'), trans('validation.custom.subtitle'), trans('validation.attributes.description'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($rangeModels); @@ -102,12 +103,12 @@ class RangeController extends Controller if ($range->saveOrFail()) { return redirect()->route('bo.ranges.edit', $range) ->with('success', trans('crud.messages.has_been_created', [ - 'model' => str(trans('models.classes.range'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.range')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ - 'model' => str(trans('models.classes.range'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.range')) ])); }); } @@ -140,12 +141,12 @@ class RangeController extends Controller if ($range->saveOrFail()) { return redirect()->route('bo.ranges.edit', $range) ->with('success', trans('crud.messages.has_been_updated', [ - 'model' => str(trans('models.classes.range'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.range')) ])); } return redirect()->route('bo.ranges.edit', $range) ->with('error', trans('crud.messages.cannot_be_updated', [ - 'model' => str(trans('models.classes.range'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.range')) ])); }); } @@ -173,12 +174,12 @@ class RangeController extends Controller if ($range->deleteOrFail()) { return redirect()->route('bo.ranges.index', $previousQueries) ->with('success', trans('crud.messages.has_been_deleted', [ - 'model' => str(trans('models.classes.range'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.range')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ - 'model' => str(trans('models.classes.range'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.range')) ])); } @@ -238,8 +239,8 @@ class RangeController extends Controller return redirect()->route('bo.ranges.edit-subranges-order', $request->range) ->with('success', trans('crud.messages.submodels_have_been_reordered', [ - 'submodelName' => str(trans('models.classes.subrange'))->plural(), - 'modelLabel' => $range->label, + 'submodelName' => Str::plural(trans('models.classes.subrange')), + 'modelLabel' => $range->label, ])); }); } diff --git a/app/Http/Controllers/Bo/SubmeatController.php b/app/Http/Controllers/Bo/SubmeatController.php index ee25c287..5613e01a 100644 --- a/app/Http/Controllers/Bo/SubmeatController.php +++ b/app/Http/Controllers/Bo/SubmeatController.php @@ -10,6 +10,7 @@ use App\Models\Submeat; use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class SubmeatController extends Controller { @@ -46,11 +47,11 @@ class SubmeatController extends Controller 'description', ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans('validation.custom.label'), trans('validation.custom.subtitle'), trans('validation.attributes.description'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($submeatModels); @@ -104,12 +105,12 @@ class SubmeatController extends Controller if ($submeat->saveOrFail()) { return redirect()->route('bo.submeats.edit', $submeat) ->with('success', trans('crud.messages.has_been_created', [ - 'model' => str(trans('models.classes.submeat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.submeat')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ - 'model' => str(trans('models.classes.submeat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.submeat')) ])); }); } @@ -147,12 +148,12 @@ class SubmeatController extends Controller if ($submeat->saveOrFail()) { return redirect()->route('bo.submeats.edit', $submeat) ->with('success', trans('crud.messages.has_been_updated', [ - 'model' => str(trans('models.classes.submeat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.submeat')) ])); } return redirect()->route('bo.submeats.edit', $submeat) ->with('error', trans('crud.messages.cannot_be_updated', [ - 'model' => str(trans('models.classes.submeat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.submeat')) ])); }); } @@ -171,12 +172,12 @@ class SubmeatController extends Controller if ($submeat->deleteOrFail()) { return redirect()->route('bo.submeats.index', $previousQueries) ->with('success', trans('crud.messages.has_been_deleted', [ - 'model' => str(trans('models.classes.submeat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.submeat')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ - 'model' => str(trans('models.classes.submeat'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.submeat')) ])); } diff --git a/app/Http/Controllers/Bo/SubrangeController.php b/app/Http/Controllers/Bo/SubrangeController.php index 9e143ca0..aea86beb 100644 --- a/app/Http/Controllers/Bo/SubrangeController.php +++ b/app/Http/Controllers/Bo/SubrangeController.php @@ -10,6 +10,7 @@ use App\Models\Subrange; use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class SubrangeController extends Controller { @@ -46,11 +47,11 @@ class SubrangeController extends Controller 'description', ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans('validation.custom.label'), trans('validation.custom.subtitle'), trans('validation.attributes.description'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($subrangeModels); @@ -85,7 +86,7 @@ class SubrangeController extends Controller return view('bo.pages.subranges.create', [ 'subrangeModel' => $subrange, - 'rangeModels' => $rangeModels, + 'rangeModels' => $rangeModels, ]); } @@ -104,12 +105,12 @@ class SubrangeController extends Controller if ($subrange->saveOrFail()) { return redirect()->route('bo.subranges.edit', $subrange) ->with('success', trans('crud.messages.has_been_created', [ - 'model' => str(trans('models.classes.subrange'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.subrange')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ - 'model' => str(trans('models.classes.subrange'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.subrange')) ])); }); } @@ -126,7 +127,7 @@ class SubrangeController extends Controller return view('bo.pages.subranges.edit', [ 'subrangeModel' => $subrange, - 'rangeModels' => $rangeModels, + 'rangeModels' => $rangeModels, ]); } @@ -147,12 +148,12 @@ class SubrangeController extends Controller if ($subrange->saveOrFail()) { return redirect()->route('bo.subranges.edit', $subrange) ->with('success', trans('crud.messages.has_been_updated', [ - 'model' => str(trans('models.classes.subrange'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.subrange')) ])); } return redirect()->route('bo.subranges.edit', $subrange) ->with('error', trans('crud.messages.cannot_be_updated', [ - 'model' => str(trans('models.classes.subrange'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.subrange')) ])); }); } @@ -171,12 +172,12 @@ class SubrangeController extends Controller if ($subrange->deleteOrFail()) { return redirect()->route('bo.subranges.index', $previousQueries) ->with('success', trans('crud.messages.has_been_deleted', [ - 'model' => str(trans('models.classes.subrange'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.subrange')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ - 'model' => str(trans('models.classes.subrange'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.subrange')) ])); } diff --git a/app/Http/Controllers/Bo/TestimonialController.php b/app/Http/Controllers/Bo/TestimonialController.php index 4e950633..1a14faac 100644 --- a/app/Http/Controllers/Bo/TestimonialController.php +++ b/app/Http/Controllers/Bo/TestimonialController.php @@ -10,6 +10,7 @@ use App\Models\Testimonial; use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class TestimonialController extends Controller { @@ -47,12 +48,12 @@ class TestimonialController extends Controller 'job', ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans_choice('validation.custom.catchline', 1), trans('validation.attributes.content'), trans('validation.custom.testimonial_identity'), trans('validation.custom.job'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($testimonialModels); @@ -87,7 +88,7 @@ class TestimonialController extends Controller return view('bo.pages.testimonials.create', [ 'testimonialModel' => $testimonial, - 'meatModels' => $meatModels, + 'meatModels' => $meatModels, ]); } @@ -106,12 +107,12 @@ class TestimonialController extends Controller if ($testimonial->saveOrFail()) { return redirect()->route('bo.testimonials.edit', $testimonial) ->with('success', trans('crud.messages.has_been_created', [ - 'model' => str(trans('models.classes.testimonial'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.testimonial')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ - 'model' => str(trans('models.classes.testimonial'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.testimonial')) ])); }); } @@ -128,7 +129,7 @@ class TestimonialController extends Controller return view('bo.pages.testimonials.edit', [ 'testimonialModel' => $testimonial, - 'meatModels' => $meatModels, + 'meatModels' => $meatModels, ]); } @@ -149,12 +150,12 @@ class TestimonialController extends Controller if ($testimonial->saveOrFail()) { return redirect()->route('bo.testimonials.edit', $testimonial) ->with('success', trans('crud.messages.has_been_updated', [ - 'model' => str(trans('models.classes.testimonial'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.testimonial')) ])); } return redirect()->route('bo.testimonials.edit', $testimonial) ->with('error', trans('crud.messages.cannot_be_updated', [ - 'model' => str(trans('models.classes.testimonial'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.testimonial')) ])); }); } @@ -173,12 +174,12 @@ class TestimonialController extends Controller if ($testimonial->deleteOrFail()) { return redirect()->route('bo.testimonials.index', $previousQueries) ->with('success', trans('crud.messages.has_been_deleted', [ - 'model' => str(trans('models.classes.testimonial'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.testimonial')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ - 'model' => str(trans('models.classes.testimonial'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.testimonial')) ])); } diff --git a/app/Http/Controllers/Bo/VideoController.php b/app/Http/Controllers/Bo/VideoController.php index 8ade758a..e24425d9 100644 --- a/app/Http/Controllers/Bo/VideoController.php +++ b/app/Http/Controllers/Bo/VideoController.php @@ -11,6 +11,7 @@ use App\Traits\Controllers\ChangesModelOrder; use App\Traits\Controllers\UpdateModelPublished; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; class VideoController extends Controller { @@ -46,9 +47,9 @@ class VideoController extends Controller 'title', ); } - $searchFields = str(\implode(', ', [ + $searchFields = Str::ucFirst(\implode(', ', [ trans('validation.attributes.title'), - ]))->ucfirst(); + ])); /** Sort columns with a query */ $this->sortQuery($videoModels); @@ -99,12 +100,12 @@ class VideoController extends Controller if ($video->saveOrFail()) { return redirect()->route('bo.videos.edit', $video) ->with('success', trans('crud.messages.has_been_created', [ - 'model' => str(trans('models.classes.video'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.video')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_created', [ - 'model' => str(trans('models.classes.video'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.video')) ])); }); } @@ -139,12 +140,12 @@ class VideoController extends Controller if ($video->saveOrFail()) { return redirect()->route('bo.videos.edit', $video) ->with('success', trans('crud.messages.has_been_updated', [ - 'model' => str(trans('models.classes.video'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.video')) ])); } return redirect()->route('bo.videos.edit', $video) ->with('error', trans('crud.messages.cannot_be_updated', [ - 'model' => str(trans('models.classes.video'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.video')) ])); }); } @@ -163,12 +164,12 @@ class VideoController extends Controller if ($video->deleteOrFail()) { return redirect()->route('bo.videos.index', $previousQueries) ->with('success', trans('crud.messages.has_been_deleted', [ - 'model' => str(trans('models.classes.video'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.video')) ])); } return redirect()->back() ->with('error', trans('crud.messages.cannot_be_deleted', [ - 'model' => str(trans('models.classes.video'))->ucfirst() + 'model' => Str::ucFirst(trans('models.classes.video')) ])); } diff --git a/app/Http/Controllers/Club/DiscountController.php b/app/Http/Controllers/Club/DiscountController.php index 1832bf20..1e16f287 100644 --- a/app/Http/Controllers/Club/DiscountController.php +++ b/app/Http/Controllers/Club/DiscountController.php @@ -7,6 +7,7 @@ use App\Http\Requests\Club\MesBr\PrintCouponsRequest; use App\Models\Customer; use App\Models\Discount; use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Cache; class DiscountController extends Controller { @@ -140,6 +141,9 @@ class DiscountController extends Controller return null; } + // Update customer discounts count. + Cache::set("discountsCustomerCount", Discount::getCustomerDiscountsCount($customer->hashcode)); + // * Tout est OK return \base64_decode(Arr::get($result, 'pdf')) ?: null; } catch (\RuntimeException $e) { diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 43f3312d..24d8bf99 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Enums\Pagination\ItemsPerPaginationEnum; use App\Enums\Theme\BootstrapThemeEnum; use App\Lib\Helpers\ToolboxHelper; +use App\Models\Discount; use App\Models\Message; use App\Models\Notification; use Illuminate\Database\Eloquent\Builder; @@ -49,6 +50,10 @@ class Controller extends BaseController !is_null($notificationModel->customer_id); }) ->count()); + + $result = Cache::get("discountsCustomerCount") + ?: Discount::getCustomerDiscountsCount($customerModel->hashcode); + View::share('discountsCustomerCount', $result); } return $next($request); }); @@ -310,20 +315,21 @@ class Controller extends BaseController string|null $search = null ): \Illuminate\Pagination\LengthAwarePaginator { $modelsTitles = []; - $query->when(!is_null($search), function (Builder $q) use ($search, $searchField) { - $q->where($searchField, 'like', "%{$search}%"); + $searchLower = Str::lower($search); + $query->when(!is_null($search), function (Builder $q) use ($searchLower, $searchField) { + $q->where($searchField, 'like', "%{$searchLower}%"); }) ->where('published', true) ->inRandomOrder() ->pluck($searchField) - ->each(function (string $title) use (&$modelsTitles, $search) { + ->each(function (string $title) use (&$modelsTitles, $searchLower) { if (count($modelsTitles) < 5) { foreach (explode(" ", $title) as $word) { $word = Str::lower($word); if ( strlen($word) > 3 && !in_array($word, $modelsTitles) - && ((!is_null($search)) ? str_contains($word, $search) : true) + && ((!is_null($searchLower)) ? str_contains($word, $searchLower) : true) ) { $modelsTitles[] = $word; } diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php index 4fc3de4a..d970e554 100644 --- a/app/Http/Middleware/SecureHeaders.php +++ b/app/Http/Middleware/SecureHeaders.php @@ -105,7 +105,7 @@ class SecureHeaders 'Content-Security-Policy', implode(' ', $cspPolicies) . $reportUri ); - $response->headers->set('Feature-Policy', 'fullscreen \'self\';'); + $response->headers->set('Feature-Policy', 'fullscreen=(self \'https://www.youtube.com\');'); return $response; } diff --git a/app/Http/Requests/Bo/MenuNodeData/UpdateMenuNodeDataRequest.php b/app/Http/Requests/Bo/MenuNodeData/UpdateMenuNodeDataRequest.php index b0aa76d8..afcfc217 100644 --- a/app/Http/Requests/Bo/MenuNodeData/UpdateMenuNodeDataRequest.php +++ b/app/Http/Requests/Bo/MenuNodeData/UpdateMenuNodeDataRequest.php @@ -2,10 +2,11 @@ namespace App\Http\Requests\Bo\MenuNodeData; +use App\Rules\Hex; use App\Traits\Requests\HasPicture; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Gate; -use App\Rules\Hex; +use Illuminate\Support\Str; class UpdateMenuNodeDataRequest extends FormRequest { @@ -29,10 +30,10 @@ class UpdateMenuNodeDataRequest extends FormRequest public function prepareForValidation(): void { if ($this->has('text')) { - $this->merge(['text' => str($this->input('text'))->value()]); + $this->merge(['text' => Str::ucFirst($this->input('text'))]); } if ($this->has('text_color')) { - $this->merge(['text_color' => str($this->input('text_color'))->value()]); + $this->merge(['text_color' => Str::ucFirst($this->input('text_color'))]); } if ($this->has('link_target')) { $this->merge(['link_target' => $this->boolean('link_target')]); diff --git a/app/Http/Requests/Bo/NewsClubs/UpdateNewsClubRequest.php b/app/Http/Requests/Bo/NewsClubs/UpdateNewsClubRequest.php index 91f2acce..714ad08c 100644 --- a/app/Http/Requests/Bo/NewsClubs/UpdateNewsClubRequest.php +++ b/app/Http/Requests/Bo/NewsClubs/UpdateNewsClubRequest.php @@ -7,6 +7,16 @@ use Illuminate\Support\Facades\Gate; class UpdateNewsClubRequest extends StoreNewsClubRequest { + /** + * Determine if the user is authorized to make this request. + * + * @return boolean + */ + public function authorize(): bool + { + return Gate::check('update', $this->route('news_club')); + } + /** * Prepare the data for validation. * @@ -26,14 +36,4 @@ class UpdateNewsClubRequest extends StoreNewsClubRequest ]); $this->mergePicture('picture'); } - - /** - * Determine if the user is authorized to make this request. - * - * @return boolean - */ - public function authorize(): bool - { - return Gate::check('update', $this->route('news_club')); - } } diff --git a/app/Http/Requests/Club/Customers/StoreCustomerRequest.php b/app/Http/Requests/Club/Customers/StoreCustomerRequest.php index a167a761..dde3c49c 100644 --- a/app/Http/Requests/Club/Customers/StoreCustomerRequest.php +++ b/app/Http/Requests/Club/Customers/StoreCustomerRequest.php @@ -73,7 +73,7 @@ class StoreCustomerRequest extends FormRequest 'required', 'email:rfc,dns,spoof', 'max:255', - // * Does email already exists in CRM ? + // Does email already exists in CRM ? // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed function (string $attribute, $value, \Closure $fail) { if (CrmCustomer::findWithEmail(\strval($value))) { @@ -113,8 +113,8 @@ class StoreCustomerRequest extends FormRequest 'email' => trans('validation.attributes.email'), 'password' => trans('validation.attributes.password'), 'password_confirmation' => trans('validation.attributes.password_confirmation'), - 'ok_cgv' => trans('conditions d\'utilisation'), - 'opt_in' => trans('newsletter'), + 'ok_cgv' => trans('validation.custom.terms'), + 'opt_in' => trans('validation.custom.newsletter'), ]; } } diff --git a/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php b/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php index 33304fa6..6ac4d972 100644 --- a/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php +++ b/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php @@ -33,8 +33,10 @@ class UpdatePasswordRequest extends FormRequest new CrmCustomerPassword($crmCustomer) ], 'password' => [ - 'required', 'string', 'max:255', 'confirmed', - Password::min(8)->mixedCase()->letters()->numbers()->uncompromised() + 'required', + 'string', + 'confirmed', + Password::min(8)->max(255)->mixedCase()->letters()->numbers()->uncompromised() ] ]; } @@ -51,4 +53,22 @@ class UpdatePasswordRequest extends FormRequest 'password' => trans('validation.attributes.password'), ]; } + + /** + * Get custom messages for validator errors. + * + * @return array + */ + public function messages(): array + { + return [ + 'password.max' => trans('255 caractères maximum'), + 'password.min' => trans('8 caractères minimum'), + 'password.letters' => trans('Au moins une lettre'), + 'password.numbers' => trans('Au moins un chiffre'), + 'password.mixed' => trans('Au moins une lettre majuscule et une lettre minuscule'), + 'password.uncompromised' => trans('Ne doît pas être compromis'), + 'password.confirmed' => trans('La confirmation doît correspondre au nouveau'), + ]; + } } diff --git a/app/Jobs/FetchDigitalRecruiterOffers.php b/app/Jobs/FetchDigitalRecruiterOffers.php index b30a7119..5df80978 100644 --- a/app/Jobs/FetchDigitalRecruiterOffers.php +++ b/app/Jobs/FetchDigitalRecruiterOffers.php @@ -87,7 +87,7 @@ class FetchDigitalRecruiterOffers $offerModel->picture_alt = $offer->title ?? ""; $offerModel->picture_title = sprintf("Image de l'offre %s", $offer->title ?? ""); $offerModel->link = $offer->apply_url ?? ""; - $offerModel->description = strip_tags(clean($offer->description ?? "")); + $offerModel->description = strip_tags(clean($offer->profile ?? "")); $offerModel->published = true; $offerModel->publish_at = $offer->published_at; $offerModel->saveOrFail(); diff --git a/app/Lib/Definitions/MenuNode.php b/app/Lib/Definitions/MenuNode.php index 6d7e85db..5eb5614a 100644 --- a/app/Lib/Definitions/MenuNode.php +++ b/app/Lib/Definitions/MenuNode.php @@ -6,10 +6,11 @@ use App\Enums\Settings\MenuNodeType; use App\Lib\Link; /** - * @property-read \App\Enums\Settings\MenuNodeType $type The node menu type. - * @property-read string $title The node menu title. - * @property-read \App\Lib\Link $link The node menu link. - * @property-read boolean $published The node menu publish status. + * @property-read integer $id The node menu id. + * @property-read \App\Enums\Settings\MenuNodeType $type The node menu type. + * @property-read string $title The node menu title. + * @property-read \App\Lib\Link $link The node menu link. + * @property-read boolean $published The node menu publish status. * @package App\Lib\Definitions */ class MenuNode extends \stdClass @@ -23,7 +24,7 @@ class MenuNode extends \stdClass */ public function __get(string $name): mixed { - if (in_array($name, ['type', 'title', 'link', 'published'])) { + if (in_array($name, ['id', 'type', 'title', 'link', 'published'])) { return $this->{$name}; } throw new \TypeError("undefined property {$name}"); @@ -32,6 +33,7 @@ class MenuNode extends \stdClass /** * Make and instance * + * @param integer $id The node menu id. * @param integer $type The node menu type. * @param boolean $published The node menu published. * @param string $title The node menu title. @@ -39,12 +41,14 @@ class MenuNode extends \stdClass * @return \App\Lib\Definitions\MenuNode * @throws \RuntimeException If $type or $data is wrong. */ - public static function make(int $type, bool $published, string $title, array $link): self + public static function make(int $id, int $type, bool $published, string $title, array $link): self { self::assertTypeIsCorrect($type); $menuNode = new self(); // @phpstan-ignore-next-line + $menuNode->id = $id; + // @phpstan-ignore-next-line $menuNode->type = MenuNodeType::make($type); // @phpstan-ignore-next-line $menuNode->published = $published; diff --git a/app/Lib/Link.php b/app/Lib/Link.php index 6f0d255e..5841ecf1 100644 --- a/app/Lib/Link.php +++ b/app/Lib/Link.php @@ -4,6 +4,7 @@ namespace App\Lib; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Jsonable; +use Illuminate\Support\Str; use Stringable; /** @@ -46,8 +47,8 @@ class Link implements Jsonable, Arrayable, Stringable $router = app('router'); return (bool)collect($router->getRoutes()->getRoutes()) - ->filter(fn ($route) => str($route->getName())->startsWith('fo.')) - ->filter(fn ($route) => str($route->getName())->exactly($routeName))->count(); + ->filter(fn ($route) => Str::of($route->getName())->startsWith('fo.')) + ->filter(fn ($route) => Str::of($route->getName())->exactly($routeName))->count(); } // * METHODS diff --git a/app/Models/ConsumptionMoment.php b/app/Models/ConsumptionMoment.php index 4a1fd33d..75bfac9f 100644 --- a/app/Models/ConsumptionMoment.php +++ b/app/Models/ConsumptionMoment.php @@ -8,6 +8,7 @@ use App\Traits\Models\ActivityLog; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Str; /** * @property string $title Consumption moment title. @@ -48,7 +49,7 @@ class ConsumptionMoment extends Model { static::creating(function (self $model) { self::assertTitleIsUnique($model->title); - $model->slug = str($model->title)->slug(); + $model->slug = Str::slug($model->title); $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); }); static::created(function () { @@ -56,7 +57,7 @@ class ConsumptionMoment extends Model }); static::updating(function (self $model) { self::assertTitleIsUnique($model->title, $model->getKey()); - $model->slug = str($model->title)->slug(); + $model->slug = Str::slug($model->title); $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); }); static::updated(function (self $model) { @@ -83,7 +84,7 @@ class ConsumptionMoment extends Model { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id); - ToolboxHelper::assertFieldIsUnique($table, 'slug', str($title)->slug(), $id); + ToolboxHelper::assertFieldIsUnique($table, 'slug', Str::slug($title), $id); } /** diff --git a/app/Models/Customer.php b/app/Models/Customer.php index 361a3144..96e7678f 100644 --- a/app/Models/Customer.php +++ b/app/Models/Customer.php @@ -22,6 +22,7 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Str; use Illuminate\Validation\Rule; use Illuminate\Validation\ValidationException; use LDC\LDCCRM\Exceptions\CrmException; @@ -166,7 +167,7 @@ class Customer extends Authenticatable implements MustVerifyEmail 'id' => $last->id, 'date' => $last->created_at, 'dateRaw' => $last->getRawOriginal('created_at'), - 'preview' => str($last->message)->limit(15), + 'preview' => Str::limit($last->message, 15), 'messages' => $responses->values()->all() ])]; } @@ -183,7 +184,7 @@ class Customer extends Authenticatable implements MustVerifyEmail 'id' => $last->id, 'date' => $last->created_at, 'dateRaw' => $last->getRawOriginal('created_at'), - 'preview' => str($last->message)->limit(15), + 'preview' => Str::limit($last->message, 15), 'messages' => $sent->values()->all() ])]; })->toBase(); diff --git a/app/Models/Discount.php b/app/Models/Discount.php index f8c7b32e..06dcc9de 100644 --- a/app/Models/Discount.php +++ b/app/Models/Discount.php @@ -149,6 +149,22 @@ class Discount extends Model } //end try } + /** + * Get customer discounts count. + * + * @param string $hashcode + * @return integer + */ + public static function getCustomerDiscountsCount(string $hashcode): int + { + /** @var \LDC\MESBR\MesBr */ + $mesBr = app('mesBrAPI'); + + return collect($mesBr->getMurCustomer($hashcode)->coupons)->filter(function ($discount) { + return !$discount->used; + })->count(); + } + /** * Replace coupons picture host. * diff --git a/app/Models/GeneralSetting.php b/app/Models/GeneralSetting.php index a3c4f2dc..d273a4a9 100644 --- a/app/Models/GeneralSetting.php +++ b/app/Models/GeneralSetting.php @@ -142,7 +142,8 @@ class GeneralSetting extends Model return match ($type) { SettingsType::mainMenu => collect(MenuNodeType::all()) ->filter(fn(MenuNodeType $menuNodeType) => $menuNodeType !== MenuNodeType::link) - ->map(fn(MenuNodeType $nodeType) => MenuNode::make( + ->map(fn(MenuNodeType $nodeType, int $key) => MenuNode::make( + $key + 1, $nodeType->value(), true, $nodeType->label(), diff --git a/app/Models/News.php b/app/Models/News.php index 7629bfdc..e31adb44 100644 --- a/app/Models/News.php +++ b/app/Models/News.php @@ -197,7 +197,7 @@ class News extends Model private static function manageFields(self $model): void { self::assertTitleIsUnique($model->title, $model->getKey()); - $model->slug = str($model->title)->slug(); + $model->slug = Str::slug($model->title); $model->thumbnail = FileStorageHelper::storeFile($model, $model->thumbnail, true); $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); } @@ -214,7 +214,7 @@ class News extends Model { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id); - ToolboxHelper::assertFieldIsUnique($table, 'slug', str($title)->slug(), $id); + ToolboxHelper::assertFieldIsUnique($table, 'slug', Str::slug($title), $id); } /** diff --git a/app/Models/NewsBreeding.php b/app/Models/NewsBreeding.php index d023cb57..ff45473e 100644 --- a/app/Models/NewsBreeding.php +++ b/app/Models/NewsBreeding.php @@ -156,7 +156,7 @@ class NewsBreeding extends Model { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id); - ToolboxHelper::assertFieldIsUnique($table, 'slug', str($title)->slug(), $id); + ToolboxHelper::assertFieldIsUnique($table, 'slug', Str::slug($title), $id); } diff --git a/app/Models/Product.php b/app/Models/Product.php index e2c8d909..4cb7c798 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -166,11 +166,18 @@ class Product extends Model implements SeoInterface public static function getProductsViewsByRange(string|null $slug = null): array { $rangeModel = !is_null($slug) ? - Range::query()->where('slug', $slug)->first() : - Range::query()->orderBy('slug', 'ASC')->where('published', true)->first(); - return Product::query()->whereHas('range', function (Builder $q) use ($rangeModel) { - $q->where('id', $rangeModel->getKey()); - })->inRandomOrder() + Range::query()->where([['slug', $slug], ['published', true]])->first() : + Range::query()->where('published', true)->orderBy('slug', 'ASC')->first(); + return Product::query()->where('published', true) + ->whereHas('subrange', function (Builder $q) use ($rangeModel) { + $q->where('published', true)->whereHas('range', function (Builder $q) use ($rangeModel) { + $q->where('id', $rangeModel->getKey()); + }); + }) + ->orWhereHas('range', function (Builder $q) use ($rangeModel) { + $q->where('id', $rangeModel->getKey()); + }) + ->inRandomOrder() ->limit(6) ->get() ->map(function ($productModel) { diff --git a/app/Models/Recipe.php b/app/Models/Recipe.php index 8100ab8c..14578672 100644 --- a/app/Models/Recipe.php +++ b/app/Models/Recipe.php @@ -213,9 +213,7 @@ class Recipe extends Model implements SeoInterface */ public static function getFirstHighlighted(): \App\Models\Recipe|null { - return Cache::rememberForever('publishedFirstHighlightedRecipe', function () { - return self::query()->where('published', true)->where('highlight', true)->first(); - }); + return self::query()->where('published', true)->where('highlight', true)->first(); } /** diff --git a/app/Models/StaticPage.php b/app/Models/StaticPage.php index 95935263..5b9ea148 100644 --- a/app/Models/StaticPage.php +++ b/app/Models/StaticPage.php @@ -74,7 +74,7 @@ class StaticPage extends Model static::updating(function (self $model) { self::assertSeoTitleIsUnique($model->seo_title, $model->getKey()); self::assertTitleIsUnique($model->title, $model->getKey()); - $model->slug = Str::slug($model->title ?? $model->seo_title ?? str()->random(20)); + $model->slug = Str::slug($model->title ?? $model->seo_title ?? Str::random(20)); if (!is_null($model->picture)) { $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); } diff --git a/app/Models/Testimonial.php b/app/Models/Testimonial.php index 4e09f2cf..e6af0df5 100644 --- a/app/Models/Testimonial.php +++ b/app/Models/Testimonial.php @@ -125,8 +125,8 @@ class Testimonial extends Model ), ], [ 'published.prohibited' => trans('Il ne peut y avoir que :max :model:plural publié:plural en même temps.', [ - 'max' => $max, - 'model' => str(trans('models.classes.testimonial')), + 'max' => $max, + 'model' => trans('models.classes.testimonial'), 'plural' => $max > 1 ? 's' : '', ]) ])->validate(); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 1dfd4616..e8e3cae4 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\URL; use Illuminate\Support\ServiceProvider; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Blade; use Money\Currencies\ISOCurrencies; use Money\Currency; use Money\Formatter\IntlMoneyFormatter; @@ -45,16 +46,21 @@ class AppServiceProvider extends ServiceProvider Carbon::setLocale(config('app.locale')); // * SETTINGS - App::singleton('settings', fn () => GeneralSetting::getCached()); + App::singleton('settings', fn() => GeneralSetting::getCached()); // * Menu - App::singleton('menuNodeList', fn () => App::get('settings') + App::singleton('menuNodeList', fn() => App::get('settings') ->where('type', SettingsType::mainMenu)->firstOrFail()); - App::singleton('menuNodeDataList', fn () => MenuNodeData::getCached()); + App::singleton('menuNodeDataList', fn() => MenuNodeData::getCached()); // * Censor - App::singleton('censor', fn () => new CensorWords()); + App::singleton('censor', fn() => new CensorWords()); $this->setPaymentCurrency(); + + // * BLADE DIRECTIVES + Blade::if('isExport', function () { + return request()->routeIs('fo.*.export'); + }); } /** diff --git a/database/migrations/2024_08_29_094103_alter_breeders_table.php b/database/migrations/2024_08_29_094103_alter_breeders_table.php index af760077..276d30c0 100644 --- a/database/migrations/2024_08_29_094103_alter_breeders_table.php +++ b/database/migrations/2024_08_29_094103_alter_breeders_table.php @@ -5,6 +5,7 @@ use App\Models\Breeder; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Str; return new class extends Migration { @@ -32,7 +33,7 @@ return new class extends Migration $breederModels = Breeder::query()->get(); foreach ($breederModels as $breederModel) { - $breederModel->department = Department::make(str($breederModel->postal_code)->take(2)); + $breederModel->department = Department::make(Str::take($breederModel->postal_code, 2)); $breederModel->picture_alt = trans('Photo de :first_name :last_name', [ 'first_name' => $breederModel->first_name, 'last_name' => $breederModel->last_name, diff --git a/database/migrations/2024_21_26_161928_message_as_encrypted.php b/database/migrations/2024_21_26_161928_message_as_encrypted.php index 693c5597..9e830e1d 100644 --- a/database/migrations/2024_21_26_161928_message_as_encrypted.php +++ b/database/migrations/2024_21_26_161928_message_as_encrypted.php @@ -5,6 +5,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Crypt; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Str; return new class extends Migration { @@ -36,7 +37,7 @@ return new class extends Migration $messages = DB::table('messages')->get(); $messages->each(function (object $message) { DB::table('messages')->where('id', $message->id)->update([ - 'message' => str(Crypt::decryptString($message->message))->limit(255) + 'message' => Str::limit(Crypt::decryptString($message->message), 255) ]); }); Schema::table('messages', function (Blueprint $table) { diff --git a/database/migrations/2024_21_27_123911_alter_menu_node_general_settings_table.php b/database/migrations/2024_21_27_123911_alter_menu_node_general_settings_table.php new file mode 100644 index 00000000..a63425a4 --- /dev/null +++ b/database/migrations/2024_21_27_123911_alter_menu_node_general_settings_table.php @@ -0,0 +1,68 @@ +where('type', SettingsType::mainMenu)->first(); + if (!$generalSettingModel) { + throw new \Exception('Missing generalSettings ' . SettingsType::mainMenu->label()); + } + $generalSettingModel->value = collect($generalSettingModel->value)->map(function (\stdClass $item, int $key) { + if ($item->type->equals(MenuNodeType::ourCommitments)) { + $item->link = (new Link(routeName: MenuNodeType::ourCommitments->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::siteLogo)) { + $item->link = (new Link(routeName: MenuNodeType::siteLogo->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::breedings)) { + $item->link = (new Link(routeName: MenuNodeType::breedings->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::ourBrand)) { + $item->link = (new Link(routeName: MenuNodeType::ourBrand->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::news)) { + $item->link = (new Link(routeName: MenuNodeType::news->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::ourProducts)) { + $item->link = (new Link(routeName: MenuNodeType::ourProducts->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::ourRecipes)) { + $item->link = (new Link(routeName: MenuNodeType::ourRecipes->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::recruitment)) { + $item->link = (new Link(routeName: MenuNodeType::recruitment->routeName()))->toArray(); + } elseif ($item->type->equals(MenuNodeType::link)) { + $item->link = (new Link(url: ""))->toArray(); + } + $item->id = $key + 1; + return $item; + }); + $generalSettingModel->saveQuietly(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + /** @var \App\Models\GeneralSetting|null */ + $generalSettingModel = GeneralSetting::query()->where('type', SettingsType::mainMenu)->first(); + if (!$generalSettingModel) { + throw new \Exception('Missing generalSettings ' . SettingsType::mainMenu->label()); + } + $generalSettingModel->value = collect($generalSettingModel->value)->map(function (\stdClass $item) { + $item = collect($item)->except(['id']); + return $item; + }); + $generalSettingModel->saveQuietly(); + } +}; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index fe235278..68d81e50 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -277,6 +277,7 @@ return [ 'multiple_answers' => 'multiple answers', 'nb_guests' => 'number of reference persons for the list of ingredients', 'new' => 'new', + 'newsletter' => 'newsletter', 'on_homepage' => 'on homepage', 'order' => 'order', 'packaging' => 'packaging', diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index df659f59..d78bfd7f 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -282,6 +282,7 @@ return [ 'multiple_answers' => 'multiple réponses', 'nb_guests' => 'nombre de personnes de référence pour la liste des ingrédients', 'new' => 'nouveau', + 'newsletter' => 'newsletter', 'old_password' => 'ancien mot de passe', 'on_homepage' => 'sur la page d\'accueil', 'order' => 'ordre', diff --git a/resources/sass/bo/base/_common.scss b/resources/sass/bo/base/_common.scss index d15aa12c..24188ceb 100644 --- a/resources/sass/bo/base/_common.scss +++ b/resources/sass/bo/base/_common.scss @@ -14,7 +14,7 @@ body { margin-top: $bo-header-height; .sidebar { - position: fixed; + position: sticky; z-index: 2; top: $bo-header-height; left: 0; diff --git a/resources/sass/club/pages/_account.scss b/resources/sass/club/pages/_account.scss index 994c1ed0..a17a4e87 100644 --- a/resources/sass/club/pages/_account.scss +++ b/resources/sass/club/pages/_account.scss @@ -30,8 +30,10 @@ } .left-part { - position: sticky; - top: 2rem; - height: fit-content; + @include media-breakpoint-up(lg) { + position: sticky; + top: 2rem; + height: fit-content; + } } } diff --git a/resources/sass/fo/base/_layout.scss b/resources/sass/fo/base/_layout.scss index ec1c1d18..7e5da2a4 100644 --- a/resources/sass/fo/base/_layout.scss +++ b/resources/sass/fo/base/_layout.scss @@ -219,6 +219,15 @@ body { } } } + + // * Adapt header in export pages because all links are hidden + .header-export { + min-height: 62px; + + .menu-logo { + position: inherit; + } + } } #input-group-search { @@ -300,7 +309,7 @@ body { flex-grow: 0; flex-shrink: 1; - .col-logo{ + .col-logo { height: calc(fit-content - 3rem); } diff --git a/resources/sass/fo/pages/recruitment.scss b/resources/sass/fo/pages/recruitment.scss index a21c7b29..e842074a 100644 --- a/resources/sass/fo/pages/recruitment.scss +++ b/resources/sass/fo/pages/recruitment.scss @@ -20,6 +20,11 @@ height: auto !important; } } + + // .swiper-pagination-bullet-active { + // background-color: $color-light !important; + // transform: scale(1.1); + // } } &-jobs { diff --git a/resources/ts/bo/components/MainMenu.vue b/resources/ts/bo/components/MainMenu.vue index ddebb2ce..0067e029 100644 --- a/resources/ts/bo/components/MainMenu.vue +++ b/resources/ts/bo/components/MainMenu.vue @@ -29,7 +29,7 @@
- {{ trans.methods.__('Montant Total') }} : + {{ trans.methods.__('Montant Total (TTC)') }} :
{{ formatPrice(currentShop.total) }}
@@ -267,4 +267,7 @@ function formatPrice(number: number): string {
.fade-leave-to {
opacity: 0;
}
+.recap-command {
+ top: 1.5rem;
+}
diff --git a/resources/ts/club/components/club/shop/RecapComponent.vue b/resources/ts/club/components/club/shop/RecapComponent.vue
index 1b6e6b31..3fdf4189 100644
--- a/resources/ts/club/components/club/shop/RecapComponent.vue
+++ b/resources/ts/club/components/club/shop/RecapComponent.vue
@@ -236,7 +236,7 @@
colspan="4"
>
{{ formatPrice(currentShop.total) }} {{ trans.methods.__('Frais de port inclus') }} diff --git a/resources/ts/fo/base/common.ts b/resources/ts/fo/base/common.ts index 6434de3e..1b54a82b 100644 --- a/resources/ts/fo/base/common.ts +++ b/resources/ts/fo/base/common.ts @@ -170,10 +170,12 @@ document.addEventListener("DOMContentLoaded", function () { 768: { slidesPerView: 2, spaceBetween: 35, + slidesPerGroup: 2, }, 992: { slidesPerView: 2, spaceBetween: 55, + slidesPerGroup: 2, }, }, }, diff --git a/resources/ts/fo/components/SearchModelComponent.vue b/resources/ts/fo/components/SearchModelComponent.vue index 31d78389..05012db8 100644 --- a/resources/ts/fo/components/SearchModelComponent.vue +++ b/resources/ts/fo/components/SearchModelComponent.vue @@ -233,7 +233,7 @@
{{ trans.methods.__('Tous les éléments ont été chargés') }}
diff --git a/resources/ts/types/models/MenuNode.d.ts b/resources/ts/types/models/MenuNode.d.ts index 4f862610..31a477aa 100644 --- a/resources/ts/types/models/MenuNode.d.ts +++ b/resources/ts/types/models/MenuNode.d.ts @@ -1,8 +1,8 @@ import type { MenuNodeTypeEnum } from "resources/ts"; import type { LinkInterface } from "resources/ts/types/models/Link"; - export interface MenuNodeInterface { + id: number, type: MenuNodeTypeEnum, published: boolean, title: string, diff --git a/resources/views/bo/layouts/sidemenu.blade.php b/resources/views/bo/layouts/sidemenu.blade.php index 2b2e1ef6..2e194493 100644 --- a/resources/views/bo/layouts/sidemenu.blade.php +++ b/resources/views/bo/layouts/sidemenu.blade.php @@ -280,7 +280,9 @@ $recruitmentStaticPageModel->type->value()) || request()->routeIs('bo.professions.*') || request()->routeIs('bo.brand_advantages.*') || - request()->routeIs('bo.offers.*'), + request()->routeIs('bo.offers.*') || + request()->routeIs('bo.testimonials.*') || + request()->routeIs('bo.news_corporates.*'), ])> ucFirst() }} +{{ __('Montant total :') }} +
{{ __('Montant total (TTC) :') }} {{ e(app('phpMoneyFormatter')->format(new Money($total * 100, app('phpMoneyCurrency')))) }} diff --git a/resources/views/club/partials/card-club-home.blade.php b/resources/views/club/partials/card-club-home.blade.php index 2497705b..63697794 100644 --- a/resources/views/club/partials/card-club-home.blade.php +++ b/resources/views/club/partials/card-club-home.blade.php @@ -1,4 +1,4 @@ -
+ diff --git a/resources/views/club/partials/card-notification.blade.php b/resources/views/club/partials/card-notification.blade.php index 0acfdaef..1a66362e 100644 --- a/resources/views/club/partials/card-notification.blade.php +++ b/resources/views/club/partials/card-notification.blade.php @@ -27,7 +27,7 @@{{ $message_label }}
diff --git a/resources/views/fo/layouts/footer.blade.php b/resources/views/fo/layouts/footer.blade.php index 9fdf016c..81b7c64c 100644 --- a/resources/views/fo/layouts/footer.blade.php +++ b/resources/views/fo/layouts/footer.blade.php @@ -10,7 +10,7 @@