From 1b577db125806c79841cb05a7a15803dd2638cc7 Mon Sep 17 00:00:00 2001 From: Nicolas Demangeat Date: Mon, 7 Oct 2024 14:56:15 +0200 Subject: [PATCH 01/23] fix: :bug: remove

in key numbers section in story.blade --- resources/views/fo/pages/story.blade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/fo/pages/story.blade.php b/resources/views/fo/pages/story.blade.php index 0211a52e..1e1a8eb8 100644 --- a/resources/views/fo/pages/story.blade.php +++ b/resources/views/fo/pages/story.blade.php @@ -19,9 +19,9 @@ {{ $staticPageModel->data['keynumbers_title']['value'] }} -

-

- {{ $staticPageModel->data['keynumbers_description']['value'] }} +

+

+ {!! clean($staticPageModel->data['keynumbers_description']['value']) !!}

From 43056247e1103c00606adc1b6884a4ee2be513aa Mon Sep 17 00:00:00 2001 From: Nicolas Demangeat Date: Tue, 8 Oct 2024 09:31:34 +0200 Subject: [PATCH 02/23] fix: :bug: change highlight recipe display in recipes index.blade + add trad --- resources/lang/en/crud.php | 1 + resources/lang/fr/crud.php | 1 + resources/sass/fo/pages/recipes.scss | 4 +++- resources/views/fo/pages/recipes/show.blade.php | 5 +++-- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/resources/lang/en/crud.php b/resources/lang/en/crud.php index 06160129..70d7e022 100644 --- a/resources/lang/en/crud.php +++ b/resources/lang/en/crud.php @@ -78,6 +78,7 @@ return [ 'other' => [ 'up' => 'Change the order of appearance upwards', 'down' => 'Change the order of appearance downwards', + 'highlight' => 'Highlight', 'no_model_found' => 'No :model found|No :model found', 'publish' => 'Actually Published', 'unpublish' => 'Actually Unpublished', diff --git a/resources/lang/fr/crud.php b/resources/lang/fr/crud.php index 8f39fa5f..32f37a6b 100644 --- a/resources/lang/fr/crud.php +++ b/resources/lang/fr/crud.php @@ -89,6 +89,7 @@ return [ 'other' => [ 'up' => 'Modifier l\'ordre d\'apparition vers le haut', 'down' => 'Modifier l\'ordre d\'apparition vers le bas', + 'highlight' => 'mise en avant', 'no_model_found' => 'Aucun :model trouvé|Aucune :model trouvée', 'publish' => 'Actuellement Publié', 'unpublish' => 'Actuellement Dépublié', diff --git a/resources/sass/fo/pages/recipes.scss b/resources/sass/fo/pages/recipes.scss index a4856641..d6f249f7 100644 --- a/resources/sass/fo/pages/recipes.scss +++ b/resources/sass/fo/pages/recipes.scss @@ -35,7 +35,9 @@ margin-top: -1rem; @include media-breakpoint-up(md) { - margin-top: -2rem; + position: relative; + left: 20%; + margin-top: -5rem; } .card-header { diff --git a/resources/views/fo/pages/recipes/show.blade.php b/resources/views/fo/pages/recipes/show.blade.php index 0c93e454..d3b10828 100644 --- a/resources/views/fo/pages/recipes/show.blade.php +++ b/resources/views/fo/pages/recipes/show.blade.php @@ -31,7 +31,8 @@
  • -
  • + {{-- uncomment after issue-185 --}} + {{--
  • + --}}
    Date: Tue, 8 Oct 2024 10:13:41 +0200 Subject: [PATCH 03/23] feat: remove search logo of the menu bar nav --- resources/views/fo/layouts/header.blade.php | 4 ++-- resources/views/fo/layouts/main-menu/locales.blade.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/views/fo/layouts/header.blade.php b/resources/views/fo/layouts/header.blade.php index ff807ec5..64ecb56d 100644 --- a/resources/views/fo/layouts/header.blade.php +++ b/resources/views/fo/layouts/header.blade.php @@ -9,7 +9,7 @@ {{-- Search BTN --}} - @include('fo.layouts.main-menu.search-btn', ['offcanvaId' => 'offcanvas-search']) + {{-- @include('fo.layouts.main-menu.search-btn', ['offcanvaId' => 'offcanvas-search']) --}} {{-- LINKS --}} @include('fo.layouts.main-menu.links', [ @@ -24,7 +24,7 @@ {{-- MENU DESKTOP (XL) --}}
    From 404b6416f37eadb70a37a9b82e8ad893d8632f5b Mon Sep 17 00:00:00 2001 From: Noah Lancien Date: Tue, 8 Oct 2024 11:41:50 +0200 Subject: [PATCH 05/23] fix: missing translation for nutritionnal values --- resources/lang/fr/validation.php | 1 + resources/views/bo/pages/products/form.blade.php | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 2f1888f2..689f710d 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -331,6 +331,7 @@ return [ 'picto_text' => 'texte du pictogramme', ], 'nutritionnal_values' => [ + 'label' => 'valeurs nutritionnelles', 'energy' => 'énergie', 'proteins' => 'protéines', 'carbohydrates' => 'glucides', diff --git a/resources/views/bo/pages/products/form.blade.php b/resources/views/bo/pages/products/form.blade.php index 298ebfcd..fd402efc 100644 --- a/resources/views/bo/pages/products/form.blade.php +++ b/resources/views/bo/pages/products/form.blade.php @@ -266,13 +266,13 @@ {{-- NUTRITIONNAL VALUES --}}
    - {{ Str::ucfirst(__('validation.custom.nutritionnal_values')) }} + {{ Str::ucfirst(__('validation.custom.nutritionnal_values.label')) }}
    @include('bo.partials.inputs.json-nutritionnal-values', [ 'id' => 'productNutritionnalValues', 'label' => __(':field :inter:model', [ - 'field' => str(__('validation.custom.nutritionnal_values'))->ucfirst(), + 'field' => str(__('validation.custom.nutritionnal_values.label'))->ucfirst(), 'inter' => __('validation.custom.of_the.male'), 'model' => __('models.classes.product'), ]), From 0a468f2f297d70e90ca8365b5e2e1e2676aff090 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Tue, 24 Sep 2024 16:48:16 +0200 Subject: [PATCH 06/23] feat: :sparkles: add sell items CRUD --- app/Console/Commands/TestMail.php | 2 +- .../Controllers/Bo/SellItemController.php | 176 ++++++++++++++++ .../Controllers/Club/DiscountController.php | 3 - .../Bo/SellItems/StoreSellItemRequest.php | 72 +++++++ .../Bo/SellItems/UpdateSellItemRequest.php | 18 ++ .../SearchCustomerCollectionRequest.php | 6 +- .../Club/Messages/MarkAsReadRequest.php | 2 +- .../Club/Messages/SendMessageRequest.php | 14 +- app/Lib/Helpers/FileStorageHelper.php | 2 - app/Listeners/CreateNotification.php | 4 +- app/Models/DepartaimantsCollection.php | 1 - app/Models/SellItem.php | 100 +++++++++ app/Policies/SellItemPolicy.php | 86 ++++++++ ...093926_alter_cookingtime_recipes_table.php | 2 +- ...2_02_141232_create_departaimants_table.php | 5 - ...024_12_09_112347_create_messages_table.php | 3 - ..._12_10_171912_create_block_lists_table.php | 2 - ...4_21_27_123905_create_sell_items_table.php | 39 ++++ resources/js/vendor/ckeditor/package.json | 1 - resources/lang/en/models.php | 2 + resources/lang/en/validation.php | 4 + resources/lang/fr/models.php | 1 + resources/lang/fr/validation.php | 5 +- resources/ts/bo/utilities/fontawesome.ts | 2 + .../ts/club/components/InputBirthDate.vue | 1 - resources/views/bo/layouts/sidemenu.blade.php | 26 ++- .../views/bo/pages/claims/create.blade.php | 2 +- .../bo/pages/sell_items/create.blade.php | 36 ++++ .../views/bo/pages/sell_items/edit.blade.php | 63 ++++++ .../views/bo/pages/sell_items/form.blade.php | 198 ++++++++++++++++++ .../bo/pages/sell_items/index-list.blade.php | 75 +++++++ .../views/bo/pages/sell_items/index.blade.php | 21 ++ .../views/bo/pages/sell_items/show.blade.php | 79 +++++++ .../bo/partials/inputs/int-number.blade.php | 3 +- routes/breadcrumbs-bo.php | 25 +++ routes/web-bo.php | 16 ++ 36 files changed, 1057 insertions(+), 40 deletions(-) create mode 100644 app/Http/Controllers/Bo/SellItemController.php create mode 100644 app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php create mode 100644 app/Http/Requests/Bo/SellItems/UpdateSellItemRequest.php create mode 100644 app/Models/SellItem.php create mode 100644 app/Policies/SellItemPolicy.php create mode 100644 database/migrations/2024_21_27_123905_create_sell_items_table.php create mode 100644 resources/views/bo/pages/sell_items/create.blade.php create mode 100644 resources/views/bo/pages/sell_items/edit.blade.php create mode 100644 resources/views/bo/pages/sell_items/form.blade.php create mode 100644 resources/views/bo/pages/sell_items/index-list.blade.php create mode 100644 resources/views/bo/pages/sell_items/index.blade.php create mode 100644 resources/views/bo/pages/sell_items/show.blade.php diff --git a/app/Console/Commands/TestMail.php b/app/Console/Commands/TestMail.php index a9bc768a..51dea7d9 100644 --- a/app/Console/Commands/TestMail.php +++ b/app/Console/Commands/TestMail.php @@ -31,6 +31,6 @@ class TestMail extends Command Mail::raw(sprintf('UWIL mail-test from %s %s', \config('app.name'), \config('app.url')), function ($msg) { $msg->to('equipe.web@ldc.fr')->subject('Test Email'); }); - $this->info('Mail send 👌'); + $this->info('Mail sent 👌'); } } diff --git a/app/Http/Controllers/Bo/SellItemController.php b/app/Http/Controllers/Bo/SellItemController.php new file mode 100644 index 00000000..778347a7 --- /dev/null +++ b/app/Http/Controllers/Bo/SellItemController.php @@ -0,0 +1,176 @@ +authorizeResource(SellItem::class); + } + + /** + * Display a listing of the resource. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Contracts\View\View + */ + public function index(Request $request): \Illuminate\Contracts\View\View + { + /** @var \Illuminate\Database\Eloquent\Builder $query */ + $query = SellItem::query(); + + /** @var string $search Search field */ + $search = $request->search; + if ($search) { + $this->searchQuery( + $query, + $search, + null, + 'name', + ); + } + $searchFields = \implode(', ', [ + trans('validation.attributes.name'), + ]); + + /** Sort columns with a query */ + $this->sortQuery($query); + + /** Custom pagination */ + $sellItemModels = $this->paginate($query); + + return view('bo.pages.sell_items.index', compact('sellItemModels', 'search', 'searchFields')); + } + + /** + * Show the specified resource. + * + * @param \App\Models\SellItem $sellItem + * @return \Illuminate\Contracts\View\View + */ + public function show(SellItem $sellItem): \Illuminate\Contracts\View\View + { + return view('bo.pages.sell_items.show', ['sellItemModel' => $sellItem]); + } + + /** + * Show the form for creating a new resource. + * + * @param \App\Models\SellItem $sellItem + * @return \Illuminate\Contracts\View\View + */ + public function create(SellItem $sellItem): \Illuminate\Contracts\View\View + { + return view('bo.pages.sell_items.create', ['sellItemModel' => $sellItem]); + } + + /** + * Store a newly created resource in storage. + * + * @param \App\Http\Requests\Bo\SellItems\StoreSellItemRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function store(StoreSellItemRequest $request): \Illuminate\Http\RedirectResponse + { + return DB::transaction(function () use ($request) { + $sellItemModel = new SellItem(); + $sellItemModel->fill($request->validated()); + + if ($sellItemModel->saveOrFail()) { + return redirect()->route('bo.sell_items.edit', $sellItemModel) + ->with('success', trans('crud.messages.has_been_created', [ + 'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)) + ])); + } + return redirect()->back() + ->with('error', trans('crud.messages.cannot_be_created', [ + 'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)) + ])); + }); + } + + /** + * Show the form for editing the specified resource. + * + * @param \App\Models\SellItem $sellItem + * @return \Illuminate\Contracts\View\View + */ + public function edit(SellItem $sellItem): \Illuminate\Contracts\View\View + { + return view('bo.pages.sell_items.edit', ['sellItemModel' => $sellItem]); + } + + /** + * Update the specified resource in storage. + * + * @param \App\Http\Requests\Bo\SellItems\UpdateSellItemRequest $request + * @param \App\Models\SellItem $sellItem + * @return \Illuminate\Http\RedirectResponse + */ + public function update(UpdateSellItemRequest $request, SellItem $sellItem): \Illuminate\Http\RedirectResponse + { + return DB::transaction(function () use ($request, $sellItem) { + $sellItem->fill($request->validated()); + + if ($sellItem->saveOrFail()) { + return redirect()->route('bo.sell_items.edit', $sellItem) + ->with('success', trans('crud.messages.has_been_updated', [ + 'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)) + ])); + } + return redirect()->route('bo.sell_items.edit', $sellItem) + ->with('error', trans('crud.messages.cannot_be_updated', [ + 'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)) + ])); + }); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\SellItem $sellItem + * @return \Illuminate\Http\RedirectResponse + */ + public function destroy(SellItem $sellItem): \Illuminate\Http\RedirectResponse + { + /** @var array */ + $previousQueries = []; + \parse_str(\parse_url(url()->previous(), \PHP_URL_QUERY), $previousQueries); + if ($sellItem->deleteOrFail()) { + return redirect()->route('bo.sell_items.index', $previousQueries) + ->with('success', trans('crud.messages.has_been_deleted', [ + 'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)) + ])); + } + return redirect()->back() + ->with('error', trans('crud.messages.cannot_be_deleted', [ + 'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)) + ])); + } + + /** + * Duplicate the specified resource. + * + * @param \App\Models\SellItem $sellItem + * @return \Illuminate\Contracts\View\View + */ + public function duplicate(SellItem $sellItem): \Illuminate\Contracts\View\View + { + return $this->create($sellItem->replicate()); + } +} diff --git a/app/Http/Controllers/Club/DiscountController.php b/app/Http/Controllers/Club/DiscountController.php index 63cdf369..1832bf20 100644 --- a/app/Http/Controllers/Club/DiscountController.php +++ b/app/Http/Controllers/Club/DiscountController.php @@ -55,7 +55,6 @@ class DiscountController extends Controller 'Content-Type' => 'application/pdf', 'Expires' => 'Sat, 26 Jul 1997 05:00:00 GMT', 'Last-Modified' => gmdate('D, d M Y H:i:s') . ' GMT', - // For glory. 'X-Generator' => 'mPDF' ]); } @@ -254,6 +253,4 @@ class DiscountController extends Controller return false; } //end try } - - // * STATIC Fetch BR } diff --git a/app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php b/app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php new file mode 100644 index 00000000..8f5826aa --- /dev/null +++ b/app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php @@ -0,0 +1,72 @@ +mergePicture('picture'); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + $rules = [ + 'name' => 'required|string|between:3,255', + 'price' => 'required|numeric|between:0.1,100', + 'picture_alt' => 'required|string|between:3,255', + 'picture_title' => 'required|string|between:3,255', + 'arcadia_id' => 'required|integer|between:0,1000', + 'arcadia_weight' => 'required|integer|between:0,100', + ]; + return \array_merge( + $rules, + $this->pictureRules('picture', 450, 450, 450, 450), + ); + } + + /** + * Get custom attributes for validator errors. + * + * @return array + */ + public function attributes(): array + { + return [ + 'name' => trans('validation.attributes.name'), + 'price' => trans('validation.attributes.price'), + 'picture' => trans('validation.attributes.image'), + 'picture_alt' => trans('validation.custom.attribute_alt'), + 'picture_title' => trans('validation.custom.attribute_title'), + 'arcadia_id' => trans('validation.custom.arcadia_id'), + 'arcadia_weight' => trans('validation.custom.arcadia_weight'), + ]; + } +} diff --git a/app/Http/Requests/Bo/SellItems/UpdateSellItemRequest.php b/app/Http/Requests/Bo/SellItems/UpdateSellItemRequest.php new file mode 100644 index 00000000..ec692479 --- /dev/null +++ b/app/Http/Requests/Bo/SellItems/UpdateSellItemRequest.php @@ -0,0 +1,18 @@ +route('sell_item')); + } +} diff --git a/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php b/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php index f6c5f3f7..28fba909 100644 --- a/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php +++ b/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php @@ -12,7 +12,7 @@ class SearchCustomerCollectionRequest extends CustomerCollectionRequest public function prepareForValidation(): void { $this->merge([ - 'pseudo' => $this->string('pseudo'), + 'pseudo' => $this->string('pseudo'), 'departaimant' => $this->string('departaimant') ]); parent::prepareForValidation(); @@ -28,9 +28,9 @@ class SearchCustomerCollectionRequest extends CustomerCollectionRequest return array_merge( parent::rules(), [ - 'pseudo' => 'nullable', + 'pseudo' => 'nullable', 'departaimant' => 'nullable', - 'page' => 'required|numeric|min:1' + 'page' => 'required|numeric|min:1' ] ); } diff --git a/app/Http/Requests/Club/Messages/MarkAsReadRequest.php b/app/Http/Requests/Club/Messages/MarkAsReadRequest.php index 2ecd7703..68afb837 100644 --- a/app/Http/Requests/Club/Messages/MarkAsReadRequest.php +++ b/app/Http/Requests/Club/Messages/MarkAsReadRequest.php @@ -24,7 +24,7 @@ class MarkAsReadRequest extends FormRequest public function rules(): array { return [ - 'messageList' => 'required|array', + 'messageList' => 'required|array', 'messageList.*' => 'numeric' ]; } diff --git a/app/Http/Requests/Club/Messages/SendMessageRequest.php b/app/Http/Requests/Club/Messages/SendMessageRequest.php index e268ea75..c872640c 100644 --- a/app/Http/Requests/Club/Messages/SendMessageRequest.php +++ b/app/Http/Requests/Club/Messages/SendMessageRequest.php @@ -30,7 +30,7 @@ class SendMessageRequest extends FormRequest { return [ 'message' => 'required|string|max:255|min:5', - 'to' => [ + 'to' => [ 'required', Rule::exists('customers', 'username'), // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed @@ -40,17 +40,17 @@ class SendMessageRequest extends FormRequest $customer = Customer::query()->where('username', $value)->firstOrFail(); if ( BlockList::query() - ->whereHas('customer', fn (Builder $q) => $q->where('id', $customer->id)) - ->whereHas('blocked', fn (Builder $q) => $q->where('id', $authCustomer->id)) - ->exists() + ->whereHas('customer', fn (Builder $q) => $q->where('id', $customer->id)) + ->whereHas('blocked', fn (Builder $q) => $q->where('id', $authCustomer->id)) + ->exists() ) { $fail(trans('Vous ne pouvez pas envoyer de message à cet utilisateur')); } if ( BlockList::query() - ->whereHas('customer', fn (Builder $q) => $q->where('id', $authCustomer->id)) - ->whereHas('blocked', fn (Builder $q) => $q->where('id', $customer->id)) - ->exists() + ->whereHas('customer', fn (Builder $q) => $q->where('id', $authCustomer->id)) + ->whereHas('blocked', fn (Builder $q) => $q->where('id', $customer->id)) + ->exists() ) { $fail(trans('Vous avez bloqué cet utilisateur')); } diff --git a/app/Lib/Helpers/FileStorageHelper.php b/app/Lib/Helpers/FileStorageHelper.php index 6a520555..20e7c89b 100644 --- a/app/Lib/Helpers/FileStorageHelper.php +++ b/app/Lib/Helpers/FileStorageHelper.php @@ -25,8 +25,6 @@ use Illuminate\Support\Str; * The final path will be storage/modelfiles/posts/10/04/19/5f/black-cat-under-red-car-286071690833400.png * * ! No limits of file per folder will be handled. - * - * @author Munsch Jérémy */ class FileStorageHelper { diff --git a/app/Listeners/CreateNotification.php b/app/Listeners/CreateNotification.php index 59f6a5ac..78de64a7 100644 --- a/app/Listeners/CreateNotification.php +++ b/app/Listeners/CreateNotification.php @@ -15,8 +15,8 @@ class CreateNotification public function handle(NewNotification $event) { $event->model->notifiable()->create([ - 'type' => $event->type, - 'content' => $event->content, + 'type' => $event->type, + 'content' => $event->content, 'customer_id' => $event->customer->id ?? null ]); } diff --git a/app/Models/DepartaimantsCollection.php b/app/Models/DepartaimantsCollection.php index c6d3ebdd..f4580221 100644 --- a/app/Models/DepartaimantsCollection.php +++ b/app/Models/DepartaimantsCollection.php @@ -26,7 +26,6 @@ use Illuminate\Database\Eloquent\Model; * @uses App\Enums\Departaimant * @uses App\Enums\DepartaimantStatus * @uses App\Enums\DepartaimantCollectionType - * @author Jérémy Munsch */ class DepartaimantsCollection extends Model { diff --git a/app/Models/SellItem.php b/app/Models/SellItem.php new file mode 100644 index 00000000..7624cbf9 --- /dev/null +++ b/app/Models/SellItem.php @@ -0,0 +1,100 @@ + + */ + protected $fillable = [ + 'name', + 'picture', + 'picture_alt', + 'picture_title', + 'price', + 'arcadia_id', + 'arcadia_weight', + ]; + + /** + * Perform any actions required after the model boots. + * + * @return void + */ + protected static function booted(): void + { + static::creating(function (self $model) { + self::setOrder($model); + $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); + }); + static::updating(function (self $model) { + $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); + }); + static::updated(function (self $model) { + FileStorageHelper::removeOldFile($model, 'picture'); + }); + static::deleted(function (self $model) { + FileStorageHelper::removeFile($model, 'picture'); + }); + } + + // * METHODS + + /** + * Set model's order after the last element of the list. + * + * @param self $mainSlide + * @return void + */ + private static function setOrder(self $mainSlide): void + { + $mainSlide->order = \intval(self::query()->max('order')) + 1; + } + + /** + * Getter html_name. + * + * @param mixed $value + * @return string + */ + public function getHtmlNameAttribute(): string + { + return nl2br(strip_tags($this->name)); + } + + /** + * Convert the model instance to an array. + * + * @return array> + */ + public function toArray(): array + { + return array_merge(parent::toArray(), [ + 'htmlName' => $this->htmlName + ]); + } +} diff --git a/app/Policies/SellItemPolicy.php b/app/Policies/SellItemPolicy.php new file mode 100644 index 00000000..ed6299ea --- /dev/null +++ b/app/Policies/SellItemPolicy.php @@ -0,0 +1,86 @@ +unsignedSmallInteger('cooking_time')->nullable(false); + $table->unsignedSmallInteger('cooking_time')->nullable(false)->change(); }); } }; diff --git a/database/migrations/2024_12_02_141232_create_departaimants_table.php b/database/migrations/2024_12_02_141232_create_departaimants_table.php index 7ee5431b..06f3d004 100644 --- a/database/migrations/2024_12_02_141232_create_departaimants_table.php +++ b/database/migrations/2024_12_02_141232_create_departaimants_table.php @@ -16,9 +16,7 @@ class CreateDepartaimantsTable extends Migration { Schema::create('departaimants', function (Blueprint $table) { $table->id(); - $table->smallInteger('type')->unsigned(); - /** * bigInt = 8 octets (64bits) * Donc à raison de 2 colonnes par départements @@ -31,12 +29,9 @@ class CreateDepartaimantsTable extends Migration $table->bigInteger('col2')->unsigned()->default(0); $table->bigInteger('col3')->unsigned()->default(0); $table->bigInteger('col4')->unsigned()->default(0); - $table->foreignId('customer_id'); $table->foreign('customer_id')->references('id')->on('customers')->onDelete('cascade'); - $table->timestamps(); - $table->unique(['type', 'customer_id']); }); } diff --git a/database/migrations/2024_12_09_112347_create_messages_table.php b/database/migrations/2024_12_09_112347_create_messages_table.php index 5e7ffd51..10cadf4f 100644 --- a/database/migrations/2024_12_09_112347_create_messages_table.php +++ b/database/migrations/2024_12_09_112347_create_messages_table.php @@ -16,16 +16,13 @@ class CreateMessagesTable extends Migration { Schema::create('messages', function (Blueprint $table) { $table->id(); - $table->string('message', 255); $table->boolean('hide_from')->default(false); $table->boolean('hide_to')->default(false); - $table->foreignId('from')->nullable(); $table->foreign('from')->references('id')->on('customers')->cascadeOnDelete(); $table->foreignId('to')->nullable(); $table->foreign('to')->references('id')->on('customers')->cascadeOnDelete(); - $table->timestamps(); }); } diff --git a/database/migrations/2024_12_10_171912_create_block_lists_table.php b/database/migrations/2024_12_10_171912_create_block_lists_table.php index 16a8fa2b..fdcc8d3a 100644 --- a/database/migrations/2024_12_10_171912_create_block_lists_table.php +++ b/database/migrations/2024_12_10_171912_create_block_lists_table.php @@ -16,12 +16,10 @@ class CreateBlockListsTable extends Migration { Schema::create('block_lists', function (Blueprint $table) { $table->id(); - $table->foreignId('customer_id')->nullable(); $table->foreign('customer_id')->references('id')->on('customers')->cascadeOnDelete(); $table->foreignId('blocked_id')->nullable(); $table->foreign('blocked_id')->references('id')->on('customers')->cascadeOnDelete(); - $table->timestamps(); }); } diff --git a/database/migrations/2024_21_27_123905_create_sell_items_table.php b/database/migrations/2024_21_27_123905_create_sell_items_table.php new file mode 100644 index 00000000..e18748e4 --- /dev/null +++ b/database/migrations/2024_21_27_123905_create_sell_items_table.php @@ -0,0 +1,39 @@ +id()->comment('Sell item id.'); + $table->string('name')->comment('Sell item name.'); + $table->string('picture')->comment('Sell item picture path.'); + $table->string('picture_alt')->comment('Picture alt attribute.'); + $table->string('picture_title')->comment('Picture title attribute.'); + $table->float('price')->comment('Sell item price.'); + $table->smallInteger('arcadia_weight')->default(0)->comment('Sell item arcadia weight.'); + $table->integer('arcadia_id')->unique()->comment('Sell item arcadia id.'); + $table->integer('order')->comment('Sell item order'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + Schema::dropIfExists('sell_items'); + } +}; diff --git a/resources/js/vendor/ckeditor/package.json b/resources/js/vendor/ckeditor/package.json index 6fdc992a..351d2d14 100644 --- a/resources/js/vendor/ckeditor/package.json +++ b/resources/js/vendor/ckeditor/package.json @@ -1,6 +1,5 @@ { "name": "ckeditor5-calliope-build", - "author": "Jeremy Munsch", "description": "Build spécial Calliope avec adaptateur Laravel File Manager", "version": "0.2.0", "license": "SEE LICENSE IN LICENSE.md", diff --git a/resources/lang/en/models.php b/resources/lang/en/models.php index e50c3762..78c754dc 100644 --- a/resources/lang/en/models.php +++ b/resources/lang/en/models.php @@ -29,6 +29,7 @@ return [ 'offer' => 'offer', 'testimonial' => 'testimonial', 'news' => 'news', + 'news_breeding' => 'news breeding|news breeding', 'news_corporate' => 'news of the compagny|news of the compagny', 'news_category' => 'category of the news|categories of the news', 'news_club' => 'news of the club|news of the club', @@ -37,5 +38,6 @@ return [ 'customer' => 'club user', 'breeder_map_component' => '\'Breeders map\' component', 'discount' => 'discount', + 'sell_item' => 'item on sale|items on sale', ] ]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index a8a5d10d..96555850 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -232,6 +232,9 @@ return [ ], 'activated' => 'activated', 'advice' => 'advice', + 'associated_page' => 'associated page|associated pages', + 'arcadiaId' => 'arcadia id', + 'arcadiaWeight' => 'arcadia weight', 'attribute_alt' => 'alt attribute', 'attribute_title' => 'title attribute', 'background' => 'background', @@ -279,6 +282,7 @@ return [ 'picto' => 'pictogram', 'preparation_time' => 'preparation time (in minutes)', 'preparation' => 'preparation', + 'price' => 'price', 'product_id' => 'product ID', 'publication' => 'publication', 'publish_at' => 'publish at', diff --git a/resources/lang/fr/models.php b/resources/lang/fr/models.php index deec2180..572afecf 100644 --- a/resources/lang/fr/models.php +++ b/resources/lang/fr/models.php @@ -38,5 +38,6 @@ return [ 'customer' => 'utilisateur du club', 'breeder_map_component' => 'composant \'Carte des éleveurs\'', 'discount' => 'réduction', + 'sell_item' => 'objet en vente|objets en vente', ] ]; diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 689f710d..4a9e391e 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -235,6 +235,8 @@ return [ 'activated' => 'activé', 'advice' => 'conseil', 'associated_page' => 'page associée|pages associées', + 'arcadiaId' => 'arcadia id', + 'arcadiaWeight' => 'arcadia poids', 'attribute_alt' => 'attribut alt', 'attribute_title' => 'attribut titre', 'background' => 'image de fond', @@ -287,6 +289,7 @@ return [ 'picto' => 'pictogramme', 'preparation_time' => 'temps de préparation (en minutes)', 'preparation' => 'préparation', + 'price' => 'prix', 'product_id' => 'ID du produit', 'publication' => 'publication', 'publish_at' => 'date de publication', @@ -324,8 +327,6 @@ return [ 'attachment' => 'pièce jointe', 'town' => 'ville', 'civility' => 'civilité', - - 'breeder_map_component' => [ 'main_text' => 'texte principal', 'picto_text' => 'texte du pictogramme', diff --git a/resources/ts/bo/utilities/fontawesome.ts b/resources/ts/bo/utilities/fontawesome.ts index 7c4287dd..a0333d59 100644 --- a/resources/ts/bo/utilities/fontawesome.ts +++ b/resources/ts/bo/utilities/fontawesome.ts @@ -18,6 +18,7 @@ import { faBackspace, faBan, faBars, + faBasketShopping, faBriefcase, faBuildingWheat, faChartSimple, @@ -171,5 +172,6 @@ library.add(faPeopleGroup); library.add(faChartSimple); library.add(faComments); library.add(faRug); +library.add(faBasketShopping); dom.watch(); diff --git a/resources/ts/club/components/InputBirthDate.vue b/resources/ts/club/components/InputBirthDate.vue index 655d2333..bae0dc7e 100644 --- a/resources/ts/club/components/InputBirthDate.vue +++ b/resources/ts/club/components/InputBirthDate.vue @@ -45,7 +45,6 @@ export default defineComponent({ cached_value: null, }; }, - computed: {}, mounted() { const json = String(this.$attrs.json ?? "{}"), data = JSON.parse(json); diff --git a/resources/views/bo/layouts/sidemenu.blade.php b/resources/views/bo/layouts/sidemenu.blade.php index d744488c..e9e5e190 100644 --- a/resources/views/bo/layouts/sidemenu.blade.php +++ b/resources/views/bo/layouts/sidemenu.blade.php @@ -977,19 +977,21 @@ 'fw-bold active' => request()->routeIs('bo.news_clubs.*') || request()->routeIs('bo.surveys_answers.*') || - request()->routeIs('bo.discounts.*'), + request()->routeIs('bo.discounts.*') || + request()->routeIs('bo.sell_items.*'), ])> request()->routeIs('bo.news_clubs.*') || request()->routeIs('bo.surveys_answers.*') || - request()->routeIs('bo.discounts.*'), + request()->routeIs('bo.discounts.*') || + request()->routeIs('bo.sell_items.*'), ])> {{ __('Club') }}
    - @if($newsClubModel->type->equals(\App\Enums\Club\NewsClubTypeEnum::survey)) + @if($newsClubModel->type->equals(\App\Enums\News\NewsClubTypeEnum::survey)) diff --git a/resources/views/bo/pages/news_clubs/index-list.blade.php b/resources/views/bo/pages/news_clubs/index-list.blade.php index 3a093437..690b05d1 100644 --- a/resources/views/bo/pages/news_clubs/index-list.blade.php +++ b/resources/views/bo/pages/news_clubs/index-list.blade.php @@ -24,7 +24,7 @@ @canAny(['show', 'duplicate', 'update', 'delete'], $newsClubModel) - @if($newsClubModel->type->equals(\App\Enums\Club\NewsClubTypeEnum::survey)) + @if($newsClubModel->type->equals(\App\Enums\News\NewsClubTypeEnum::survey)) diff --git a/resources/views/bo/pages/news_clubs/show.blade.php b/resources/views/bo/pages/news_clubs/show.blade.php index 87f63af0..04443081 100644 --- a/resources/views/bo/pages/news_clubs/show.blade.php +++ b/resources/views/bo/pages/news_clubs/show.blade.php @@ -17,7 +17,7 @@ @canAny(['duplicate', 'update', 'delete'], $newsClubModel) - @if($newsClubModel->type->equals(\App\Enums\Club\NewsClubTypeEnum::survey)) + @if($newsClubModel->type->equals(\App\Enums\News\NewsClubTypeEnum::survey)) diff --git a/resources/views/club/pages/surveys/show.blade.php b/resources/views/club/pages/surveys/show.blade.php index 481d8072..f16a49d1 100644 --- a/resources/views/club/pages/surveys/show.blade.php +++ b/resources/views/club/pages/surveys/show.blade.php @@ -46,11 +46,11 @@
    {{ $newsClubModel->title }}
    @switch($newsClubModel->type) - @case(\App\Enums\Club\NewsClubTypeEnum::news) + @case(\App\Enums\News\NewsClubTypeEnum::news) {!! clean($newsClubModel->content) !!} @break - @case(\App\Enums\Club\NewsClubTypeEnum::survey) + @case(\App\Enums\News\NewsClubTypeEnum::survey) @if (!$newsClubModel->answers->count())

    {{ __('Aucunes réponses possibles') }}

    @else diff --git a/routes/breadcrumbs-bo.php b/routes/breadcrumbs-bo.php index eb3ae7ec..6229c2f6 100644 --- a/routes/breadcrumbs-bo.php +++ b/routes/breadcrumbs-bo.php @@ -1,7 +1,7 @@ Date: Mon, 30 Sep 2024 15:12:27 +0200 Subject: [PATCH 08/23] fix: :truck: update icons name in club --- resources/views/club/icons/bag.blade.php | 4 ++++ .../icons/{cloche.blade.php => bell.blade.php} | 0 ...tete-poule.blade.php => chicken-head.blade.php} | 0 .../icons/{poule.blade.php => chicken.blade.php} | 0 .../{manette.blade.php => controller.blade.php} | 0 ...n-left.blade.php => herringbone-left.blade.php} | 0 .../{personnes.blade.php => persons.blade.php} | 0 .../icons/{coupe.blade.php => trophy.blade.php} | 0 resources/views/club/layouts/header.blade.php | 6 +++--- .../layouts/main-menu/offcanvas-menu.blade.php | 10 +++++----- .../views/club/pages/customers/index.blade.php | 14 +++++++------- .../views/club/pages/favorites/layout.blade.php | 2 +- resources/views/club/pages/games/index.blade.php | 2 +- resources/views/club/pages/home/homepage.blade.php | 6 +++--- .../views/club/pages/notifications/index.blade.php | 2 +- resources/views/club/pages/quests/index.blade.php | 2 +- 16 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 resources/views/club/icons/bag.blade.php rename resources/views/club/icons/{cloche.blade.php => bell.blade.php} (100%) rename resources/views/club/icons/{tete-poule.blade.php => chicken-head.blade.php} (100%) rename resources/views/club/icons/{poule.blade.php => chicken.blade.php} (100%) rename resources/views/club/icons/{manette.blade.php => controller.blade.php} (100%) rename resources/views/club/icons/{chevron-left.blade.php => herringbone-left.blade.php} (100%) rename resources/views/club/icons/{personnes.blade.php => persons.blade.php} (100%) rename resources/views/club/icons/{coupe.blade.php => trophy.blade.php} (100%) diff --git a/resources/views/club/icons/bag.blade.php b/resources/views/club/icons/bag.blade.php new file mode 100644 index 00000000..e32568db --- /dev/null +++ b/resources/views/club/icons/bag.blade.php @@ -0,0 +1,4 @@ + diff --git a/resources/views/club/icons/cloche.blade.php b/resources/views/club/icons/bell.blade.php similarity index 100% rename from resources/views/club/icons/cloche.blade.php rename to resources/views/club/icons/bell.blade.php diff --git a/resources/views/club/icons/tete-poule.blade.php b/resources/views/club/icons/chicken-head.blade.php similarity index 100% rename from resources/views/club/icons/tete-poule.blade.php rename to resources/views/club/icons/chicken-head.blade.php diff --git a/resources/views/club/icons/poule.blade.php b/resources/views/club/icons/chicken.blade.php similarity index 100% rename from resources/views/club/icons/poule.blade.php rename to resources/views/club/icons/chicken.blade.php diff --git a/resources/views/club/icons/manette.blade.php b/resources/views/club/icons/controller.blade.php similarity index 100% rename from resources/views/club/icons/manette.blade.php rename to resources/views/club/icons/controller.blade.php diff --git a/resources/views/club/icons/chevron-left.blade.php b/resources/views/club/icons/herringbone-left.blade.php similarity index 100% rename from resources/views/club/icons/chevron-left.blade.php rename to resources/views/club/icons/herringbone-left.blade.php diff --git a/resources/views/club/icons/personnes.blade.php b/resources/views/club/icons/persons.blade.php similarity index 100% rename from resources/views/club/icons/personnes.blade.php rename to resources/views/club/icons/persons.blade.php diff --git a/resources/views/club/icons/coupe.blade.php b/resources/views/club/icons/trophy.blade.php similarity index 100% rename from resources/views/club/icons/coupe.blade.php rename to resources/views/club/icons/trophy.blade.php diff --git a/resources/views/club/layouts/header.blade.php b/resources/views/club/layouts/header.blade.php index c77bcd3f..4d71fe40 100644 --- a/resources/views/club/layouts/header.blade.php +++ b/resources/views/club/layouts/header.blade.php @@ -10,13 +10,13 @@ @if (request()->routeIs('club.home.show'))
    - @include('club.icons.chevron-left') + @include('club.icons.herringbone-left') {{ __('Retour sur le Gaulois') }} @elseif (!empty($backButtonUrl)) - @include('club.icons.chevron-left') + @include('club.icons.herringbone-left') {{ !empty($backButtonText) ? $backButtonText : __('Retour') }} @endif @@ -80,7 +80,7 @@ {{-- --}} {{-- --}} diff --git a/resources/views/club/pages/customers/index.blade.php b/resources/views/club/pages/customers/index.blade.php index 835e4091..30c39386 100644 --- a/resources/views/club/pages/customers/index.blade.php +++ b/resources/views/club/pages/customers/index.blade.php @@ -16,7 +16,7 @@ @php $userPoints = 645; @endphp
    - @include('club.icons.tete-poule') + @include('club.icons.chicken-head')

    {{ __('Mon compte') }}

    @@ -60,7 +60,7 @@
  • - @include('club.icons.tete-poule') + @include('club.icons.chicken-head') {{ __('Informations personnelles') }}
  • @@ -74,14 +74,14 @@ {{--
  • - @include('club.icons.coupe') + @include('club.icons.trophy') {{ __('La Quête') }}
  • - @include('club.icons.personnes') + @include('club.icons.persons') {{ __('Parrainages') }}
  • --}} @@ -92,7 +92,7 @@
    - @include('club.icons.tete-poule') + @include('club.icons.chicken-head') {{ __('Informations personnelles') }} @@ -116,14 +116,14 @@ {{-- - @include('club.icons.coupe') + @include('club.icons.trophy') {{ __('La Quête') }} - @include('club.icons.personnes') + @include('club.icons.persons') {{ __('Parrainages') }} diff --git a/resources/views/club/pages/favorites/layout.blade.php b/resources/views/club/pages/favorites/layout.blade.php index 85288585..ba77a557 100644 --- a/resources/views/club/pages/favorites/layout.blade.php +++ b/resources/views/club/pages/favorites/layout.blade.php @@ -14,7 +14,7 @@ @section('content')
    - @include('club.icons.tete-poule') + @include('club.icons.chicken-head')

    @yield('title-page')

    diff --git a/resources/views/club/pages/games/index.blade.php b/resources/views/club/pages/games/index.blade.php index 479e4992..04bd520a 100644 --- a/resources/views/club/pages/games/index.blade.php +++ b/resources/views/club/pages/games/index.blade.php @@ -14,7 +14,7 @@ @section('content')
    - @include('club.icons.manette') + @include('club.icons.controller')

    {{ __('Les jeux') }}

    diff --git a/resources/views/club/pages/home/homepage.blade.php b/resources/views/club/pages/home/homepage.blade.php index 944eddf3..f4216fda 100644 --- a/resources/views/club/pages/home/homepage.blade.php +++ b/resources/views/club/pages/home/homepage.blade.php @@ -36,20 +36,20 @@ {{-- --}} diff --git a/resources/views/club/pages/notifications/index.blade.php b/resources/views/club/pages/notifications/index.blade.php index 0bb2a158..f5d69b15 100644 --- a/resources/views/club/pages/notifications/index.blade.php +++ b/resources/views/club/pages/notifications/index.blade.php @@ -15,7 +15,7 @@
    - @include('club.icons.cloche') + @include('club.icons.bell') @if (!empty($notifications_count)) {{ __('Nouvelles notifications') }} diff --git a/resources/views/club/pages/quests/index.blade.php b/resources/views/club/pages/quests/index.blade.php index 8b9aed9d..a6913029 100644 --- a/resources/views/club/pages/quests/index.blade.php +++ b/resources/views/club/pages/quests/index.blade.php @@ -14,7 +14,7 @@ @section('content')
    - @include('club.icons.coupe') + @include('club.icons.trophy')

    {{ __('La quête') }}

    From a20e627905dd725f07771419f826ae2fa814453d Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Mon, 30 Sep 2024 15:21:31 +0200 Subject: [PATCH 09/23] fix: :mag: update club meta tags --- resources/views/club/pages/customers/index.blade.php | 2 +- resources/views/club/pages/departaimants/index.blade.php | 2 +- resources/views/club/pages/discounts/index.blade.php | 2 +- resources/views/club/pages/favorites/products.blade.php | 4 ++-- resources/views/club/pages/favorites/recipes.blade.php | 4 ++-- resources/views/club/pages/home/guest.blade.php | 2 +- resources/views/club/pages/home/homepage.blade.php | 2 +- resources/views/club/pages/messages/index.blade.php | 2 +- resources/views/club/pages/notifications/index.blade.php | 2 +- resources/views/club/pages/shop/index.blade.php | 8 ++++---- resources/views/club/pages/surveys/show.blade.php | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/resources/views/club/pages/customers/index.blade.php b/resources/views/club/pages/customers/index.blade.php index 30c39386..5e7b5079 100644 --- a/resources/views/club/pages/customers/index.blade.php +++ b/resources/views/club/pages/customers/index.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', __('Mon compte')) -@section('description', __('Description site')) +@section('description', __('Informations concernant votre compte du club des Gaulois.')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) diff --git a/resources/views/club/pages/departaimants/index.blade.php b/resources/views/club/pages/departaimants/index.blade.php index bae01629..961b54d2 100644 --- a/resources/views/club/pages/departaimants/index.blade.php +++ b/resources/views/club/pages/departaimants/index.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', __('Départ’aimants')) -@section('description', __('Description site')) +@section('description', __('Bourse aux échanges des départ’aimants du club des Gaulois.')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) diff --git a/resources/views/club/pages/discounts/index.blade.php b/resources/views/club/pages/discounts/index.blade.php index a1290a98..cf624e29 100644 --- a/resources/views/club/pages/discounts/index.blade.php +++ b/resources/views/club/pages/discounts/index.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', __('Mes coupons')) -@section('description', __('Description site')) +@section('description', __('Retrouvez l’ensemble de vos coupons réductions à imprimer pour vos futurs achats en magasins !')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) diff --git a/resources/views/club/pages/favorites/products.blade.php b/resources/views/club/pages/favorites/products.blade.php index ed09f7e4..7e7a78fd 100644 --- a/resources/views/club/pages/favorites/products.blade.php +++ b/resources/views/club/pages/favorites/products.blade.php @@ -1,7 +1,7 @@ @extends('club.pages.favorites.layout') -@section('title', __('Mon compte')) -@section('description', __('Description site')) +@section('title', __('Mes produits favoris')) +@section('description', __('Retrouvez l’ensemble des produits que vous avez mis en favoris.')) @section('blade', 'fo.partials.product-card') @section('title-page', 'produits favoris') @section('text', 'Voici la liste de tous les produits que vous avez mis en favoris, cliquez sur une carte afin d\'accéder à son contenu.') diff --git a/resources/views/club/pages/favorites/recipes.blade.php b/resources/views/club/pages/favorites/recipes.blade.php index 9a73f627..7ca41217 100644 --- a/resources/views/club/pages/favorites/recipes.blade.php +++ b/resources/views/club/pages/favorites/recipes.blade.php @@ -1,7 +1,7 @@ @extends('club.pages.favorites.layout') -@section('title', __('Mon compte')) -@section('description', __('Description site')) +@section('title', __('Mes recettes favorites')) +@section('description', __('Retrouvez l’ensemble des recettes que vous avez mis en favoris.')) @section('blade', 'fo.partials.recipe-card') @section('title-page', 'recettes favoris') @section('text', 'Voici la liste de toutes les recettes que vous avez mis en favoris, cliquez sur une carte afin d\'accéder à son contenu.') diff --git a/resources/views/club/pages/home/guest.blade.php b/resources/views/club/pages/home/guest.blade.php index 231f49a0..243bdbf0 100644 --- a/resources/views/club/pages/home/guest.blade.php +++ b/resources/views/club/pages/home/guest.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', __('Accueil')) -@section('description', __('Description site')) +@section('description', __('Présentation du Club des Gaulois ainsi que ses nombreuses fonctionnalités !')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) diff --git a/resources/views/club/pages/home/homepage.blade.php b/resources/views/club/pages/home/homepage.blade.php index f4216fda..326029c9 100644 --- a/resources/views/club/pages/home/homepage.blade.php +++ b/resources/views/club/pages/home/homepage.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', __('Accueil')) -@section('description', __('Description site')) +@section('description', __('Présentation du Club des Gaulois ainsi que ses nombreuses fonctionnalités !')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) diff --git a/resources/views/club/pages/messages/index.blade.php b/resources/views/club/pages/messages/index.blade.php index d574e4f6..28c08621 100644 --- a/resources/views/club/pages/messages/index.blade.php +++ b/resources/views/club/pages/messages/index.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', __('Mes messages')) -@section('description', __('Description site')) +@section('description', __('Messagerie instantannée de la boutique du Club des Gaulois !')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) diff --git a/resources/views/club/pages/notifications/index.blade.php b/resources/views/club/pages/notifications/index.blade.php index f5d69b15..0d38f61f 100644 --- a/resources/views/club/pages/notifications/index.blade.php +++ b/resources/views/club/pages/notifications/index.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', __('Notifications')) -@section('description', __('Description site')) +@section('description', __('Retrouvez toutes vos notifications concernant le Club des Gaulois !')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) diff --git a/resources/views/club/pages/shop/index.blade.php b/resources/views/club/pages/shop/index.blade.php index a62f40e2..e02a216f 100644 --- a/resources/views/club/pages/shop/index.blade.php +++ b/resources/views/club/pages/shop/index.blade.php @@ -1,15 +1,15 @@ @extends('club.layout') -@section('title', __('Notifications')) -@section('description', __('Description site')) +@section('title', __('Boutique des Gaulois')) +@section('description', __('Boutique officielle du Club des Gaulois !')) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) @section('no-bottom-space', true) @section('page-class', 'shop') -@section('backbtn-url', route('club.home.show')) -@section('backbtn-txt', __('Retour sur le club')) +@section('backbtn-url', route('club.departaimants.index')) +@section('backbtn-txt', __('Retour sur les départ’aimants')) @section('content')
    diff --git a/resources/views/club/pages/surveys/show.blade.php b/resources/views/club/pages/surveys/show.blade.php index f16a49d1..e0e964f4 100644 --- a/resources/views/club/pages/surveys/show.blade.php +++ b/resources/views/club/pages/surveys/show.blade.php @@ -1,7 +1,7 @@ @extends('club.layout') @section('title', sprintf('%s du club', $newsClubModel->type->label())) -@section('description', __('Description site')) +@section('description', __('Infos du Club des Gaulois concernant ":label"', ['label' => $newsClubModel->type->label()])) @section('breadcrumb', request()->route()->getName()) @section('container-fluid', true) From bd9c7dbb5d43fb96040ab00da4cb1065b62fb2c9 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Mon, 30 Sep 2024 15:23:58 +0200 Subject: [PATCH 10/23] fix: :children_crossing: add warning message when javascript is disable --- resources/views/club/layout.blade.php | 1 + resources/views/club/pages/departaimants/index.blade.php | 4 ---- resources/views/club/partials/noscript-warning.blade.php | 3 +++ 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 resources/views/club/partials/noscript-warning.blade.php diff --git a/resources/views/club/layout.blade.php b/resources/views/club/layout.blade.php index 14684ee1..500bf0f8 100644 --- a/resources/views/club/layout.blade.php +++ b/resources/views/club/layout.blade.php @@ -16,6 +16,7 @@ !empty($__env->yieldContent('container-fluid')) ? 'container-fluid' : 'container', !empty($__env->yieldContent('no-bottom-space')) ? '' : 'pb-5 mb-5' ])> + @include('club.partials.noscript-warning')
    @include('modules.flash-messages') diff --git a/resources/views/club/pages/departaimants/index.blade.php b/resources/views/club/pages/departaimants/index.blade.php index 961b54d2..b3a75399 100644 --- a/resources/views/club/pages/departaimants/index.blade.php +++ b/resources/views/club/pages/departaimants/index.blade.php @@ -49,9 +49,5 @@ ]; @endphp
    -
    @endsection diff --git a/resources/views/club/partials/noscript-warning.blade.php b/resources/views/club/partials/noscript-warning.blade.php new file mode 100644 index 00000000..407502dc --- /dev/null +++ b/resources/views/club/partials/noscript-warning.blade.php @@ -0,0 +1,3 @@ + From 22139c17f7d23db33c3721826123f8f6e6b5089d Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Fri, 4 Oct 2024 16:48:38 +0200 Subject: [PATCH 11/23] fix: :bug: add enum type field on sell items --- app/Enums/Shop/SellItemsType.php | 41 +++++++++++++++++++ .../Bo/SellItems/StoreSellItemRequest.php | 4 ++ app/Models/SellItem.php | 13 +++++- ...21_27_123910_add_type_sell_items_table.php | 33 +++++++++++++++ .../views/bo/pages/sell_items/form.blade.php | 26 ++++++++++++ .../bo/pages/sell_items/index-list.blade.php | 2 + 6 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 app/Enums/Shop/SellItemsType.php create mode 100644 database/migrations/2024_21_27_123910_add_type_sell_items_table.php diff --git a/app/Enums/Shop/SellItemsType.php b/app/Enums/Shop/SellItemsType.php new file mode 100644 index 00000000..b650fc15 --- /dev/null +++ b/app/Enums/Shop/SellItemsType.php @@ -0,0 +1,41 @@ +name => 'Papier', + self::magnetic->name => 'Magnétique', + ]; + + /** + * Custom added color definition. + */ + private const COLOR = [ + self::paper->name => 'danger', + self::magnetic->name => 'warning', + ]; + + /** + * Get color. + * + * @return string + */ + public function color(): string + { + return self::COLOR[$this->name]; + } +} diff --git a/app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php b/app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php index 8f5826aa..03bd5b0c 100644 --- a/app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php +++ b/app/Http/Requests/Bo/SellItems/StoreSellItemRequest.php @@ -2,10 +2,12 @@ namespace App\Http\Requests\Bo\SellItems; +use App\Enums\Shop\SellItemsType; use App\Models\SellItem; use App\Traits\Requests\HasPicture; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Gate; +use Illuminate\Validation\Rules\Enum; class StoreSellItemRequest extends FormRequest { @@ -40,6 +42,7 @@ class StoreSellItemRequest extends FormRequest { $rules = [ 'name' => 'required|string|between:3,255', + 'type' => ['required', new Enum(SellItemsType::class)], 'price' => 'required|numeric|between:0.1,100', 'picture_alt' => 'required|string|between:3,255', 'picture_title' => 'required|string|between:3,255', @@ -61,6 +64,7 @@ class StoreSellItemRequest extends FormRequest { return [ 'name' => trans('validation.attributes.name'), + 'type' => trans('validation.custom.type'), 'price' => trans('validation.attributes.price'), 'picture' => trans('validation.attributes.image'), 'picture_alt' => trans('validation.custom.attribute_alt'), diff --git a/app/Models/SellItem.php b/app/Models/SellItem.php index 7624cbf9..e0884f3f 100644 --- a/app/Models/SellItem.php +++ b/app/Models/SellItem.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Enums\Shop\SellItemsType; use App\Lib\Helpers\FileStorageHelper; use App\Traits\Models\ActivityLog; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -17,6 +18,7 @@ use Illuminate\Database\Eloquent\Model; * @property integer $arcadia_weight Sell item arcadia weight. * @property integer $arcadia_id Sell item arcadia id. * @property integer $order Sell item order. + * @property \App\Enums\Shop\SellItemsType $type Sell item type. * @property-read \Illuminate\Support\Carbon $created_at Created date. * @property-read \Illuminate\Support\Carbon $updated_at Updated date. */ @@ -32,6 +34,7 @@ class SellItem extends Model */ protected $fillable = [ 'name', + 'type', 'picture', 'picture_alt', 'picture_title', @@ -40,6 +43,15 @@ class SellItem extends Model 'arcadia_weight', ]; + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'type' => SellItemsType::class, + ]; + /** * Perform any actions required after the model boots. * @@ -78,7 +90,6 @@ class SellItem extends Model /** * Getter html_name. * - * @param mixed $value * @return string */ public function getHtmlNameAttribute(): string diff --git a/database/migrations/2024_21_27_123910_add_type_sell_items_table.php b/database/migrations/2024_21_27_123910_add_type_sell_items_table.php new file mode 100644 index 00000000..4623c47b --- /dev/null +++ b/database/migrations/2024_21_27_123910_add_type_sell_items_table.php @@ -0,0 +1,33 @@ +tinyInteger('type')->comment('Sell item type.')->default(SellItemsType::paper)->after('order'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + Schema::table('sell_items', function (Blueprint $table) { + $table->dropColumn('type'); + }); + } +}; diff --git a/resources/views/bo/pages/sell_items/form.blade.php b/resources/views/bo/pages/sell_items/form.blade.php index c143c5f3..ecc16128 100644 --- a/resources/views/bo/pages/sell_items/form.blade.php +++ b/resources/views/bo/pages/sell_items/form.blade.php @@ -35,6 +35,32 @@
    + {{-- TYPE --}} +
    +
    + {{ str(__('validation.custom.type'))->ucfirst() }} +
    +
    + @include('bo.partials.inputs.tinyint-enum', [ + 'id' => 'sellItemType', + 'label' => __(':field :inter:model', [ + 'field' => str(__('validation.custom.type'))->ucFirst(), + 'inter' => __('validation.custom.of_the.vowel'), + 'model' => trans_choice('models.classes.sell_item', 1), + ]), + 'name' => 'type', + 'model' => $sellItemModel ?? null, + 'required' => true, + 'value' => $sellItemModel->type, + 'associatedModels' => \App\Enums\Shop\SellItemsType::toArray(), + 'helper' => __('crud.minicrud.select_entity', [ + 'entity' => sprintf('un seul et unique %s', __('validation.custom.type')), + ]), + ]) +
    +
    +
    +
    {{-- PRICE --}}
    diff --git a/resources/views/bo/pages/sell_items/index-list.blade.php b/resources/views/bo/pages/sell_items/index-list.blade.php index 6513f5fb..088f7792 100644 --- a/resources/views/bo/pages/sell_items/index-list.blade.php +++ b/resources/views/bo/pages/sell_items/index-list.blade.php @@ -4,6 +4,7 @@ @include('bo.modules.table-col-sorter', [ 'cols' => [ 'name' => str(__('validation.attributes.name'))->ucfirst(), + 'type' => str(__('validation.custom.type'))->ucfirst(), 'price' => str(__('validation.custom.price'))->ucfirst(), 'picture' => str(__('validation.attributes.image'))->ucfirst(), 'updated_at' => str(__('validation.attributes.updated_at'))->ucfirst(), @@ -14,6 +15,7 @@ @foreach ($sellItemModels as $sellItemModel) {{ $sellItemModel->name }} + {{ $sellItemModel->type->label() }} @money($sellItemModel->price) Date: Fri, 4 Oct 2024 17:03:04 +0200 Subject: [PATCH 12/23] fix: :wheelchair: add more details in some php prototypes --- app/Console/Kernel.php | 4 +- .../ActivityLogs/ActivityLogsEventEnum.php | 1 - app/Enums/Breedings/BreedingTypeEnum.php | 2 +- app/Http/Controllers/Bo/ProductController.php | 5 +- .../Bo/SurveysAnswerController.php | 6 +- .../Club/Auth/VerificationController.php | 4 +- app/Http/Controllers/Fo/BreederController.php | 19 ++---- app/Http/Controllers/Fo/ExportController.php | 1 - app/Http/Middleware/Authenticate.php | 3 +- app/Http/Middleware/HtmlSanitizer.php | 8 ++- .../Middleware/RedirectIfAuthenticated.php | 16 ++--- app/Http/Middleware/SecureHeaders.php | 13 ++-- .../Club/Bourse/CustomerCollectionRequest.php | 2 +- .../Bourse/SaveCustomerCollectionRequest.php | 2 +- .../SearchCustomerCollectionRequest.php | 2 +- .../Club/Customers/StoreCustomerRequest.php | 8 +-- .../Club/Customers/UpdateCustomerRequest.php | 2 +- .../Club/Customers/UpdatePasswordRequest.php | 6 +- .../Club/Messages/BlockCustomerRequest.php | 4 +- .../Club/Messages/DeleteMessagesRequest.php | 4 +- .../Club/Messages/SendMessageRequest.php | 4 +- .../Club/Surveys/StoreSurveyAnswerRequest.php | 6 +- app/Jobs/FetchDigitalRecruiterOffers.php | 1 - app/Lib/Definitions/MenuNode.php | 6 +- app/Lib/Helpers/CollectionHelper.php | 30 +++++---- app/Lib/Helpers/ExceptionsHelper.php | 15 +++-- app/Lib/Helpers/ToolboxHelper.php | 49 ++++++++------- app/Lib/Link.php | 24 ++----- app/Lib/Utils.php | 6 +- app/Listeners/CreateNotification.php | 2 +- app/Listeners/PasswordHasReset.php | 2 +- app/Models/ActivityLog.php | 1 - app/Models/BrandAdvantage.php | 2 +- app/Models/ConsumptionMoment.php | 2 +- app/Models/Customer.php | 47 +++++++------- app/Models/DemarcheSlide.php | 2 +- app/Models/DepartaimantsCollection.php | 46 +++++++------- app/Models/GeneralSetting.php | 14 ++--- app/Models/HistoricalMilestone.php | 2 +- app/Models/KeyNumber.php | 2 +- app/Models/MainSlide.php | 6 +- app/Models/Meat.php | 6 +- app/Models/MenuNodeData.php | 2 +- app/Models/Message.php | 10 +-- app/Models/News.php | 2 +- app/Models/NewsBreeding.php | 8 +-- app/Models/NewsCategory.php | 4 +- app/Models/NewsClub.php | 2 +- app/Models/NewsCorporate.php | 12 ++-- app/Models/Product.php | 4 +- app/Models/ProductType.php | 2 +- app/Models/Range.php | 6 +- app/Models/Recipe.php | 6 +- app/Models/StaticPage.php | 10 +-- app/Models/Submeat.php | 2 +- app/Models/Subrange.php | 2 +- app/Models/Testimonial.php | 4 +- app/Models/Video.php | 2 +- .../Customer/DestroyCustomer.php | 10 +-- .../Customer/DestroyedCustomer.php | 14 +---- app/Notifications/Customer/ResetPassword.php | 2 +- app/Notifications/Customer/UpdateEmail.php | 10 +-- app/Notifications/Customer/UpdatePassword.php | 10 +-- app/Notifications/Customer/VerifyEmail.php | 2 +- app/Policies/SellItemPolicy.php | 1 + app/Providers/CrmApiServiceProvider.php | 2 +- app/Providers/EventServiceProvider.php | 2 +- app/Providers/MesBrApiServiceProvider.php | 2 +- app/Providers/RouteServiceProvider.php | 2 +- app/Providers/ViewServiceProvider.php | 62 +++++-------------- app/Rules/Hex.php | 2 +- app/Rules/IsValidVimeoId.php | 2 +- app/Rules/IsValidYoutubeId.php | 2 +- .../Controllers/UpdateModelPublished.php | 2 +- app/Traits/Models/IsCachedAsCollection.php | 10 +-- app/Traits/Models/MiniCrudModel.php | 16 ++--- app/Traits/Requests/HasPicture.php | 14 ++--- .../Fo/Story/HistoricalMilestoneComponent.php | 7 +-- app/View/Components/Fo/Story/WhoWeAre.php | 3 +- 79 files changed, 280 insertions(+), 362 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index a888e4bf..10562210 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -16,7 +16,7 @@ class Kernel extends ConsoleKernel * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ - protected function schedule(Schedule $schedule) + protected function schedule(Schedule $schedule): void { $schedule->job(FetchDigitalRecruiterOffers::class)->daily(); $schedule->job(DeleteOldMessages::class)->dailyAt('14:15'); @@ -28,7 +28,7 @@ class Kernel extends ConsoleKernel * * @return void */ - protected function commands() + protected function commands(): void { $this->load(__DIR__ . '/Commands'); diff --git a/app/Enums/ActivityLogs/ActivityLogsEventEnum.php b/app/Enums/ActivityLogs/ActivityLogsEventEnum.php index df947592..864edaec 100644 --- a/app/Enums/ActivityLogs/ActivityLogsEventEnum.php +++ b/app/Enums/ActivityLogs/ActivityLogsEventEnum.php @@ -25,7 +25,6 @@ enum ActivityLogsEventEnum: int self::deleted->name => 'Suppression', ]; - /** * Custom added classes definition */ diff --git a/app/Enums/Breedings/BreedingTypeEnum.php b/app/Enums/Breedings/BreedingTypeEnum.php index b618d269..f6b4933b 100644 --- a/app/Enums/Breedings/BreedingTypeEnum.php +++ b/app/Enums/Breedings/BreedingTypeEnum.php @@ -25,7 +25,7 @@ enum BreedingTypeEnum: int self::breedingHealth->name => 'La santé des volailles', ]; - /** + /** * Get all breeding pages. * * @return array diff --git a/app/Http/Controllers/Bo/ProductController.php b/app/Http/Controllers/Bo/ProductController.php index ac311278..86a4e882 100644 --- a/app/Http/Controllers/Bo/ProductController.php +++ b/app/Http/Controllers/Bo/ProductController.php @@ -185,7 +185,10 @@ class ProductController extends Controller public function update(UpdateProductRequest $request, Product $product): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $product) { - $product->fill(Arr::except($request->validated(), ['labels', 'productTypes', 'claims', 'nutritionnal_values'])); + $product->fill(Arr::except( + $request->validated(), + ['labels', 'productTypes', 'claims', 'nutritionnal_values'] + )); $product->labels()->sync(collect($request->validated()['labels'] ?? [])->pluck('id')); $product->productTypes()->sync(collect($request->validated()['productTypes'] ?? [])->pluck('id')); $product->claims()->sync(collect($request->validated()['claims'] ?? [])->pluck('id')); diff --git a/app/Http/Controllers/Bo/SurveysAnswerController.php b/app/Http/Controllers/Bo/SurveysAnswerController.php index c2f6b3bf..ddf27f9b 100644 --- a/app/Http/Controllers/Bo/SurveysAnswerController.php +++ b/app/Http/Controllers/Bo/SurveysAnswerController.php @@ -242,10 +242,12 @@ class SurveysAnswerController extends Controller return back()->with('error', trans('crud.messages.order_not_changed')); } return DB::transaction(function () use ($request, $className, $model) { + /** @var \App\Models\NewsClub $newsClubModel */ + $newsClubModel = request()->route()->parameter('news_club'); /** @var \Illuminate\Database\Eloquent\Model|null */ $tmp = $className::query() - ->when(request()->route()->parameter('news_club'), function (Builder $q) { - $q->where('news_club_id', request()->route()->parameter('news_club')->getKey()); + ->when($newsClubModel, function (Builder $q) use ($newsClubModel) { + $q->where('news_club_id', $newsClubModel->getKey()); }) ->where('order', $request->direction ? '<' : '>', $model->getOriginal('order')) ->orderBy('order', $request->direction ? 'DESC' : 'ASC') diff --git a/app/Http/Controllers/Club/Auth/VerificationController.php b/app/Http/Controllers/Club/Auth/VerificationController.php index 9812b429..a8ee8ad8 100644 --- a/app/Http/Controllers/Club/Auth/VerificationController.php +++ b/app/Http/Controllers/Club/Auth/VerificationController.php @@ -104,7 +104,7 @@ class VerificationController extends Controller } /** - * Get the post register / login redirect path. + * Get the post register/login redirect path. * * @return string */ @@ -114,7 +114,7 @@ class VerificationController extends Controller } /** - * Set Crm Customer active + * Set crm customer active. * * @param \App\Models\Customer $customer * @return void diff --git a/app/Http/Controllers/Fo/BreederController.php b/app/Http/Controllers/Fo/BreederController.php index c91654e2..29b4bf8c 100644 --- a/app/Http/Controllers/Fo/BreederController.php +++ b/app/Http/Controllers/Fo/BreederController.php @@ -26,10 +26,7 @@ class BreederController extends Controller return File::json(base_path('/public/departments.geojson')); } ); - - return response()->json( - [$departmentGeoJson] - ); + return response()->json([$departmentGeoJson]); } /** @@ -39,7 +36,7 @@ class BreederController extends Controller */ public function getBreederCountPerDepartment(): \Illuminate\Http\JsonResponse { - // TODO: mettre à jour le cache lors de l'édition/ajout/suppression d'un éleveur + // TODO: mettre à jour le cache lors de l'édition/ajout/suppression d'un éleveur. $breederCountPerDepartment = Cache::rememberForever( 'breederCountPerDepartment', function () { @@ -50,10 +47,7 @@ class BreederController extends Controller ->get()->toArray(); } ); - - return response()->json( - $breederCountPerDepartment - ); + return response()->json($breederCountPerDepartment); } /** @@ -65,7 +59,7 @@ class BreederController extends Controller public function getDepartmentBreeders(Request $request): \Illuminate\Http\JsonResponse { // TODO: checker si le departement existe. - // TODO: mettre à jour le cache lors de l'édition/ajout/suppression d'un éleveur + // TODO: mettre à jour le cache lors de l'édition/ajout/suppression d'un éleveur. $breeders = Cache::rememberForever( sprintf('departmentBreeders%s', $request->DEPARTMENT), function () use ($request) { @@ -76,10 +70,7 @@ class BreederController extends Controller ->get()->toArray(); } ); - - return response()->json( - $breeders - ); + return response()->json($breeders); } /** diff --git a/app/Http/Controllers/Fo/ExportController.php b/app/Http/Controllers/Fo/ExportController.php index ab2495c2..4a37b67f 100644 --- a/app/Http/Controllers/Fo/ExportController.php +++ b/app/Http/Controllers/Fo/ExportController.php @@ -9,7 +9,6 @@ class ExportController extends Controller /** * Contact page. * - * @param \App\Models\StaticPage $staticPageModel * @return \Illuminate\Contracts\View\View */ public function nl(): \Illuminate\Contracts\View\View diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 74bb08ff..74241783 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -18,7 +18,7 @@ class Authenticate extends Middleware { $logins = [ 'backend' => route('bo.login'), - 'club' => route('club.login') + 'club' => route('club.login') ]; if (!$request->expectsJson()) { // * Notify must login @@ -34,7 +34,6 @@ class Authenticate extends Middleware } return route('login'); } - return null; } } diff --git a/app/Http/Middleware/HtmlSanitizer.php b/app/Http/Middleware/HtmlSanitizer.php index 857ca84f..c7324fd5 100644 --- a/app/Http/Middleware/HtmlSanitizer.php +++ b/app/Http/Middleware/HtmlSanitizer.php @@ -4,7 +4,6 @@ namespace App\Http\Middleware; use App\Lib\Helpers\ToolboxHelper; use Illuminate\Http\Request; -use Symfony\Component\HttpFoundation\Response; class HtmlSanitizer { @@ -16,8 +15,11 @@ class HtmlSanitizer * @param string|array ...$params * @return \Symfony\Component\HttpFoundation\Response */ - public function handle(Request $request, \Closure $next, string|array ...$params): Response - { + public function handle( + Request $request, + \Closure $next, + string|array ...$params + ): \Symfony\Component\HttpFoundation\Response { $inputs = $request->all(); /** @var callable|null */ $cleanInput = null; diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index 864e8e64..697c2a91 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -3,25 +3,26 @@ namespace App\Http\Middleware; use Illuminate\Http\Request; -use Symfony\Component\HttpFoundation\Response; class RedirectIfAuthenticated { /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next - * @param string|null ...$guards + * @param \Illuminate\Http\Request $request + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + * @param string|null ...$guards * @return \Symfony\Component\HttpFoundation\Response * @throws \RuntimeException If guard is unhandled. * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint */ - public function handle(Request $request, \Closure $next, ...$guards): Response - { + public function handle( + Request $request, + \Closure $next, + string|null ...$guards + ): \Symfony\Component\HttpFoundation\Response { // phpcs:enable phpcs:disable $guards = empty($guards) ? [null] : $guards; - foreach ($guards as $guard) { if (auth($guard)->check()) { switch ($guard) { @@ -37,7 +38,6 @@ class RedirectIfAuthenticated } } } - return $next($request); } } diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php index e2f3e887..4fc3de4a 100644 --- a/app/Http/Middleware/SecureHeaders.php +++ b/app/Http/Middleware/SecureHeaders.php @@ -2,12 +2,10 @@ namespace App\Http\Middleware; -use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\Vite; -use Symfony\Component\HttpFoundation\Response; class SecureHeaders { @@ -26,14 +24,12 @@ class SecureHeaders /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + * @param \Illuminate\Http\Request $request + * @param \Closure $next * @return \Symfony\Component\HttpFoundation\Response - * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint */ - public function handle(Request $request, Closure $next): Response + public function handle(Request $request, \Closure $next): \Symfony\Component\HttpFoundation\Response { - // phpcs:enable // * For Vite DEV $host = \parse_url(\config('app.url'), \PHP_URL_HOST); View::share('nonce', $nonce = Vite::useCspNonce()); @@ -105,7 +101,6 @@ class SecureHeaders config('app.debug') ? "https://{$host}:4443" : '', ]) . ';' ]; - $response->headers->set( 'Content-Security-Policy', implode(' ', $cspPolicies) . $reportUri @@ -115,7 +110,7 @@ class SecureHeaders } /** - * Remove unwanted headers + * Remove unwanted headers. * * @param array $headerList * @return void diff --git a/app/Http/Requests/Club/Bourse/CustomerCollectionRequest.php b/app/Http/Requests/Club/Bourse/CustomerCollectionRequest.php index c03252dd..228419a1 100644 --- a/app/Http/Requests/Club/Bourse/CustomerCollectionRequest.php +++ b/app/Http/Requests/Club/Bourse/CustomerCollectionRequest.php @@ -49,7 +49,7 @@ abstract class CustomerCollectionRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ 'state' => [ diff --git a/app/Http/Requests/Club/Bourse/SaveCustomerCollectionRequest.php b/app/Http/Requests/Club/Bourse/SaveCustomerCollectionRequest.php index 2dccbbb7..9a0a676b 100644 --- a/app/Http/Requests/Club/Bourse/SaveCustomerCollectionRequest.php +++ b/app/Http/Requests/Club/Bourse/SaveCustomerCollectionRequest.php @@ -12,7 +12,7 @@ class SaveCustomerCollectionRequest extends CustomerCollectionRequest * * @return array */ - public function rules() + public function rules(): array { $idEnumRule = ''; return array_merge( diff --git a/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php b/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php index 28fba909..c8f7f351 100644 --- a/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php +++ b/app/Http/Requests/Club/Bourse/SearchCustomerCollectionRequest.php @@ -23,7 +23,7 @@ class SearchCustomerCollectionRequest extends CustomerCollectionRequest * * @return array */ - public function rules() + public function rules(): array { return array_merge( parent::rules(), diff --git a/app/Http/Requests/Club/Customers/StoreCustomerRequest.php b/app/Http/Requests/Club/Customers/StoreCustomerRequest.php index 4db8ec96..a167a761 100644 --- a/app/Http/Requests/Club/Customers/StoreCustomerRequest.php +++ b/app/Http/Requests/Club/Customers/StoreCustomerRequest.php @@ -23,7 +23,7 @@ class StoreCustomerRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return Auth::guard('club')->check(); } @@ -33,7 +33,7 @@ class StoreCustomerRequest extends FormRequest * * @return void */ - public function prepareForValidation() + public function prepareForValidation(): void { try { $this->currentCountry = Country::make(\intval($this->country)); @@ -52,7 +52,7 @@ class StoreCustomerRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { $countryList = implode(',', Country::getValidIsoAplha2Codes()); return [ @@ -97,7 +97,7 @@ class StoreCustomerRequest extends FormRequest * * @return array */ - public function attributes() + public function attributes(): array { return [ 'lastname' => trans('validation.attributes.first_name'), diff --git a/app/Http/Requests/Club/Customers/UpdateCustomerRequest.php b/app/Http/Requests/Club/Customers/UpdateCustomerRequest.php index 09eb211b..3ca3382b 100644 --- a/app/Http/Requests/Club/Customers/UpdateCustomerRequest.php +++ b/app/Http/Requests/Club/Customers/UpdateCustomerRequest.php @@ -23,7 +23,7 @@ class UpdateCustomerRequest extends StoreCustomerRequest * * @return void */ - public function prepareForValidation() + public function prepareForValidation(): void { parent::prepareForValidation(); $this->merge([ diff --git a/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php b/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php index 9b8abdfb..33304fa6 100644 --- a/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php +++ b/app/Http/Requests/Club/Customers/UpdatePasswordRequest.php @@ -13,7 +13,7 @@ class UpdatePasswordRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('club')->check(); } @@ -23,7 +23,7 @@ class UpdatePasswordRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { /** @var \LDC\LDCCRM\Models\Customer $crmCustomer */ $crmCustomer = \auth('club')->user()->api_data; @@ -44,7 +44,7 @@ class UpdatePasswordRequest extends FormRequest * * @return array */ - public function attributes() + public function attributes(): array { return [ 'old_password' => trans('validation.custom.old_password'), diff --git a/app/Http/Requests/Club/Messages/BlockCustomerRequest.php b/app/Http/Requests/Club/Messages/BlockCustomerRequest.php index e5ded674..33bff942 100644 --- a/app/Http/Requests/Club/Messages/BlockCustomerRequest.php +++ b/app/Http/Requests/Club/Messages/BlockCustomerRequest.php @@ -12,7 +12,7 @@ class BlockCustomerRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return Auth::guard('club')->check(); } @@ -22,7 +22,7 @@ class BlockCustomerRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ 'username' => 'required|exists:customers,username' diff --git a/app/Http/Requests/Club/Messages/DeleteMessagesRequest.php b/app/Http/Requests/Club/Messages/DeleteMessagesRequest.php index 76b35d6a..bd949b2e 100644 --- a/app/Http/Requests/Club/Messages/DeleteMessagesRequest.php +++ b/app/Http/Requests/Club/Messages/DeleteMessagesRequest.php @@ -14,7 +14,7 @@ class DeleteMessagesRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return Auth::guard('club')->check(); } @@ -24,7 +24,7 @@ class DeleteMessagesRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ 'message' => [ diff --git a/app/Http/Requests/Club/Messages/SendMessageRequest.php b/app/Http/Requests/Club/Messages/SendMessageRequest.php index c872640c..4fe2e09c 100644 --- a/app/Http/Requests/Club/Messages/SendMessageRequest.php +++ b/app/Http/Requests/Club/Messages/SendMessageRequest.php @@ -16,7 +16,7 @@ class SendMessageRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return Auth::guard('club')->check(); } @@ -26,7 +26,7 @@ class SendMessageRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ 'message' => 'required|string|max:255|min:5', diff --git a/app/Http/Requests/Club/Surveys/StoreSurveyAnswerRequest.php b/app/Http/Requests/Club/Surveys/StoreSurveyAnswerRequest.php index fea23481..35943106 100644 --- a/app/Http/Requests/Club/Surveys/StoreSurveyAnswerRequest.php +++ b/app/Http/Requests/Club/Surveys/StoreSurveyAnswerRequest.php @@ -13,7 +13,7 @@ class StoreSurveyAnswerRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return Auth::guard('club')->check(); } @@ -38,7 +38,7 @@ class StoreSurveyAnswerRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ 'news_club_id' => 'required|integer|exists:news_clubs,id', @@ -64,7 +64,7 @@ class StoreSurveyAnswerRequest extends FormRequest * * @return array */ - public function attributes() + public function attributes(): array { return [ 'news_club_id' => trans_choice('models.classes.news_club', 1), diff --git a/app/Jobs/FetchDigitalRecruiterOffers.php b/app/Jobs/FetchDigitalRecruiterOffers.php index 9903f216..b30a7119 100644 --- a/app/Jobs/FetchDigitalRecruiterOffers.php +++ b/app/Jobs/FetchDigitalRecruiterOffers.php @@ -37,7 +37,6 @@ class FetchDigitalRecruiterOffers config('services.digital_recruiter.url') )); } - $this->parseDigitalRecruiterOffers(\collect($response->object()->ads)); } diff --git a/app/Lib/Definitions/MenuNode.php b/app/Lib/Definitions/MenuNode.php index 7c21ea55..6d7e85db 100644 --- a/app/Lib/Definitions/MenuNode.php +++ b/app/Lib/Definitions/MenuNode.php @@ -15,13 +15,13 @@ use App\Lib\Link; class MenuNode extends \stdClass { /** - * Get property + * Get property. * * @param string $name * @return mixed * @throws \TypeError If prop is undefined. */ - public function __get(string $name) + public function __get(string $name): mixed { if (in_array($name, ['type', 'title', 'link', 'published'])) { return $this->{$name}; @@ -62,7 +62,7 @@ class MenuNode extends \stdClass * @return void * @throws \RuntimeException If $type is wrong. */ - public static function assertTypeIsCorrect(int $type) + public static function assertTypeIsCorrect(int $type): void { try { $type = MenuNodeType::make($type); diff --git a/app/Lib/Helpers/CollectionHelper.php b/app/Lib/Helpers/CollectionHelper.php index b9e9ecda..bbb51aba 100644 --- a/app/Lib/Helpers/CollectionHelper.php +++ b/app/Lib/Helpers/CollectionHelper.php @@ -10,13 +10,13 @@ use Illuminate\Support\Collection; class CollectionHelper { /** - * Paginate a collection + * Paginate a collection. * * @param \Illuminate\Support\Collection $results * @param integer $pageSize * @return \Illuminate\Pagination\LengthAwarePaginator */ - public static function paginate(Collection $results, int $pageSize): LengthAwarePaginator + public static function paginate(Collection $results, int $pageSize): \Illuminate\Pagination\LengthAwarePaginator { $page = Paginator::resolveCurrentPage('page'); @@ -24,15 +24,18 @@ class CollectionHelper } /** - * Paginate a collection + * Paginate a collection. * * @param \Illuminate\Support\Collection $results * @param integer $pageSize * @param integer $page * @return \Illuminate\Pagination\LengthAwarePaginator */ - public static function paginateManually(Collection $results, int $pageSize, int $page = 1): LengthAwarePaginator - { + public static function paginateManually( + Collection $results, + int $pageSize, + int $page = 1 + ): \Illuminate\Pagination\LengthAwarePaginator { $total = $results->count(); return self::paginator($results->forPage($page, $pageSize), $total, $pageSize, $page, [ @@ -51,14 +54,19 @@ class CollectionHelper * @param array $options * @return \Illuminate\Pagination\LengthAwarePaginator */ - protected static function paginator(Collection $items, int $total, int $perPage, int $currentPage, array $options) - { + protected static function paginator( + Collection $items, + int $total, + int $perPage, + int $currentPage, + array $options + ): \Illuminate\Pagination\LengthAwarePaginator { return Container::getInstance()->makeWith(LengthAwarePaginator::class, [ - 'items' => $items, - 'total' => $total, - 'perPage' => $perPage, + 'items' => $items, + 'total' => $total, + 'perPage' => $perPage, 'currentPage' => $currentPage, - 'options' => $options + 'options' => $options ]); } } diff --git a/app/Lib/Helpers/ExceptionsHelper.php b/app/Lib/Helpers/ExceptionsHelper.php index 30deb548..3c46130c 100644 --- a/app/Lib/Helpers/ExceptionsHelper.php +++ b/app/Lib/Helpers/ExceptionsHelper.php @@ -5,7 +5,7 @@ namespace App\Lib\Helpers; class ExceptionsHelper { /** - * Handle sentry event + * Handle sentry event. * * @param \Sentry\Event $event * @return null|\Sentry\Event @@ -26,7 +26,7 @@ class ExceptionsHelper } /** - * Anonimize Sentry Exception bag + * Anonimize Sentry Exception bag. * * @param \Sentry\ExceptionDataBag $exceptionDataBag * @return \Sentry\ExceptionDataBag @@ -42,7 +42,7 @@ class ExceptionsHelper } /** - * Anonymise sentry stacktrace + * Anonymise sentry stacktrace. * * @param \Sentry\Stacktrace $stackTrace * @return \Sentry\Stacktrace @@ -70,7 +70,7 @@ class ExceptionsHelper } /** - * Get anonymized sentry params + * Get anonymized sentry params. * * @param mixed[] $params * @return string[] @@ -103,9 +103,8 @@ class ExceptionsHelper return $params; } - /** - * Anonymize at least Sql queries + * Anonymize at least Sql queries. * * @param string $message * @return string @@ -120,7 +119,7 @@ class ExceptionsHelper } /** - * Anonymize stack trace + * Anonymize stack trace. * * @param \Throwable $e * @return string @@ -159,7 +158,7 @@ class ExceptionsHelper } /** - * Handle Args + * Handle Args. * * @param array $stack * @return string diff --git a/app/Lib/Helpers/ToolboxHelper.php b/app/Lib/Helpers/ToolboxHelper.php index eb2c9e7e..562e4517 100644 --- a/app/Lib/Helpers/ToolboxHelper.php +++ b/app/Lib/Helpers/ToolboxHelper.php @@ -22,7 +22,7 @@ use Symfony\Component\Finder\SplFileInfo; class ToolboxHelper { /** - * Censor string + * Censor string. * * @param string $string * @return string @@ -38,8 +38,9 @@ class ToolboxHelper } return $censor->censorString($string, true)['clean']; } + /** - * Run a terminal command and gives the output + * Run a terminal command and gives the output. * * @param array|string $command The command to execute on terminal. * @param boolean $throw Wether to throw en esception on failure or not. @@ -53,7 +54,7 @@ class ToolboxHelper * @throws \LogicException * @throws \RuntimeException If the command fails. */ - public static function runConsoleCommand(array|string $command, bool $throw = true): string | false + public static function runConsoleCommand(array|string $command, bool $throw = true): string|false { // phpcs:enable $process = \Illuminate\Support\Facades\Process::command($command)->run(); @@ -69,6 +70,8 @@ class ToolboxHelper } /** + * Return array merge recursive distinct. + * * @param array $array1 * @param array $array2 * @@ -89,13 +92,13 @@ class ToolboxHelper } /** - * Validate recaptcha + * Validate recaptcha. * * @param \Illuminate\Http\Request $request * @param boolean $isV3 * @return void */ - public static function validateRecaptcha(Request $request, bool $isV3 = true) + public static function validateRecaptcha(Request $request, bool $isV3 = true): void { Validator::validate($request->all(), [ 'g-recaptcha-response' => [ @@ -147,7 +150,7 @@ class ToolboxHelper * Only embed allowed are for MP4 self hosted videos right now * * https is force by ckeditor MediaElements which natively supports - * only cloud hosted medias (youtube, spotify etc..) + * only cloud hosted medias (youtube, spotify etc..). * * @param string $input * @return string @@ -159,7 +162,7 @@ class ToolboxHelper } /** - * Assert That no Back Office url is present on txt + * Assert That no Back Office url is present on txt. * * @param string $field * @param string $text @@ -202,7 +205,7 @@ class ToolboxHelper } /** - * Assert That only external url is present on txt + * Assert That only external url is present on txt. * * @param string $field * @param string $text @@ -245,7 +248,7 @@ class ToolboxHelper } /** - * Mutltibyte string replace + * Mutltibyte string replace. * * @param array|string $search * @param array|string $replace @@ -289,7 +292,7 @@ class ToolboxHelper } /** - * Asserts that the field is unique + * Asserts that the field is unique. * * @param string $table * @param string $field @@ -305,7 +308,7 @@ class ToolboxHelper string|int|float|bool|null|array $value, ?int $id = null, ?callable $query = null - ) { + ): void { if (!$query) { Validator::make([$field => $value], [ self::mbReplace('.', '\.', $field) => Rule::unique($table, $field)->ignore($id), @@ -326,7 +329,7 @@ class ToolboxHelper } /** - * Get original polyfill with autotranslate behavior + * Get original polyfill with autotranslate behavior. * * @param \Illuminate\Database\Eloquent\Model $model * @param string $attribute @@ -352,7 +355,7 @@ class ToolboxHelper } /** - * Dynamic model query + * Dynamic model query. * * @param string $defaultLocale * @param \Illuminate\Contracts\Database\Eloquent\Builder $q @@ -365,7 +368,7 @@ class ToolboxHelper Builder $q, string $column, string $value - ): Builder { + ): \Illuminate\Contracts\Database\Eloquent\Builder { $currentLocale = app()->currentLocale(); $locales = collect(config('app.locales')) ->mapWithKeys(fn (string $locale) => [$locale => $locale]); @@ -393,7 +396,7 @@ class ToolboxHelper } /** - * Generates an array from a dot separated string + * Generates an array from a dot separated string. * * @param string $path * @param mixed $value @@ -412,7 +415,7 @@ class ToolboxHelper } /** - * Convert deeply an object to array + * Convert deeply an object to array. * * @param mixed $input * @return array @@ -434,7 +437,7 @@ class ToolboxHelper } /** - * Convert deeply an array to object + * Convert deeply an array to object. * * @param mixed $input * @return object @@ -456,7 +459,7 @@ class ToolboxHelper } /** - * Validate picture + * Validate picture. * * @param string $attribute * @param string|null $value @@ -513,7 +516,7 @@ class ToolboxHelper } /** - * Get the file full path + * Get the file full path. * * @param string $value * @param boolean $useStorage @@ -527,19 +530,19 @@ class ToolboxHelper } /** - * Get the file mimetype + * Get the file mimetype. * * @param string $value * @param boolean $useStorage * @return string|false */ - private static function getUploadedFileMimeType(string $value, bool $useStorage) + private static function getUploadedFileMimeType(string $value, bool $useStorage): string|false { return !$useStorage ? File::mimeType($value) : Storage::mimeType($value); } /** - * Fetch class list from a specific namespace + * Fetch class list from a specific namespace. * * @param string $namespace * @return array An array of classe namespaces @@ -553,7 +556,7 @@ class ToolboxHelper } /** - * Get all classes from a specific namespace that implement a specific interface + * Get all classes from a specific namespace that implement a specific interface. * * @param string $namespace * @param string $interface diff --git a/app/Lib/Link.php b/app/Lib/Link.php index a8526313..6f0d255e 100644 --- a/app/Lib/Link.php +++ b/app/Lib/Link.php @@ -11,10 +11,10 @@ use Stringable; * * @package App\Lib */ -class Link implements Jsonable, Arrayable, \JsonSerializable, Stringable +class Link implements Jsonable, Arrayable, Stringable { /** - * Link + * Link. * * @param null|string $url A valid url. * @param null|string $routeName A valid route name. @@ -77,9 +77,9 @@ class Link implements Jsonable, Arrayable, \JsonSerializable, Stringable /** * Get the instance as an array. * - * @return array<'url'|'routeName',string|null> + * @return array<'url'|'routeName', string|null> */ - public function toArray() + public function toArray(): array { return ['url' => $this->url, 'routeName' => $this->routeName]; } @@ -91,26 +91,14 @@ class Link implements Jsonable, Arrayable, \JsonSerializable, Stringable * @return string * @phpcs:disable Squiz.Commenting.FunctionComment.ScalarTypeHintMissing */ - public function toJson($options = 0) + public function toJson($options = 0): string { // phpcs:enable - return \json_encode($this->jsonSerialize(), $options); - } - - /** - * Convert the object into something JSON serializable. - * - * @return array - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - return $this->toArray(); + return \json_encode($this->toArray(), $options); } /** * @return string - * * @throws \RuntimeException If the link cannot be converted to string. */ public function __toString() diff --git a/app/Lib/Utils.php b/app/Lib/Utils.php index 54e2de77..4dcf94b0 100644 --- a/app/Lib/Utils.php +++ b/app/Lib/Utils.php @@ -6,7 +6,7 @@ use App\Models\Customer; use Illuminate\Support\Str; /** - * Some utilities methods + * Some utilities methods. */ // phpcs:disable Generic.Files.LineLength.TooLong class Utils @@ -111,7 +111,7 @@ class Utils } /** - * Multibyte strtr + * Multibyte strtr. * * @param string $str * @param string|array $from @@ -131,7 +131,7 @@ class Utils } /** - * Generate an unique pseudo + * Generate an unique pseudo. * * @param string $firstname * @param string $lastname diff --git a/app/Listeners/CreateNotification.php b/app/Listeners/CreateNotification.php index 78de64a7..3862b6d9 100644 --- a/app/Listeners/CreateNotification.php +++ b/app/Listeners/CreateNotification.php @@ -12,7 +12,7 @@ class CreateNotification * @param \App\Events\NewNotification $event * @return void */ - public function handle(NewNotification $event) + public function handle(NewNotification $event): void { $event->model->notifiable()->create([ 'type' => $event->type, diff --git a/app/Listeners/PasswordHasReset.php b/app/Listeners/PasswordHasReset.php index ef397fd4..acd848bc 100644 --- a/app/Listeners/PasswordHasReset.php +++ b/app/Listeners/PasswordHasReset.php @@ -15,7 +15,7 @@ class PasswordHasReset * @param \Illuminate\Auth\Events\PasswordReset $event * @return void */ - public function handle(PasswordReset $event) + public function handle(PasswordReset $event): void { /** @var \App\Models\Customer */ $customer = $event->user; diff --git a/app/Models/ActivityLog.php b/app/Models/ActivityLog.php index b7eb30e6..8932a01f 100644 --- a/app/Models/ActivityLog.php +++ b/app/Models/ActivityLog.php @@ -117,7 +117,6 @@ class ActivityLog extends Model }; } - /** * Get a value type as a string * ! Use this for display purpose only diff --git a/app/Models/BrandAdvantage.php b/app/Models/BrandAdvantage.php index dcda11ef..db1e6a92 100644 --- a/app/Models/BrandAdvantage.php +++ b/app/Models/BrandAdvantage.php @@ -136,7 +136,7 @@ class BrandAdvantage extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedBrandAdvantagesOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/ConsumptionMoment.php b/app/Models/ConsumptionMoment.php index 72e77091..8b7594cc 100644 --- a/app/Models/ConsumptionMoment.php +++ b/app/Models/ConsumptionMoment.php @@ -91,7 +91,7 @@ class ConsumptionMoment extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('consumptionMomentsOrderedBySlug'); self::getOrderedBySlug(); diff --git a/app/Models/Customer.php b/app/Models/Customer.php index a1e54c27..361a3144 100644 --- a/app/Models/Customer.php +++ b/app/Models/Customer.php @@ -100,7 +100,7 @@ class Customer extends Authenticatable implements MustVerifyEmail // * METHODS /** - * Asserts using validation that the email is unique + * Asserts using validation that the email is unique. * * @param mixed $id * @param mixed $email @@ -113,7 +113,7 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * Asserts that the field is unique + * Asserts that the field is unique. * * @param mixed $id * @param string $field @@ -134,7 +134,7 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * Get conversations with messages sorted by time + * Get conversations with messages sorted by time. * * @return array */ @@ -218,7 +218,7 @@ class Customer extends Authenticatable implements MustVerifyEmail * * @return void */ - public function sendEmailVerificationNotification() + public function sendEmailVerificationNotification(): void { $this->deleteIfDoesNotExistsInCrm(); $this->notify(new VerifyEmail()); @@ -230,7 +230,7 @@ class Customer extends Authenticatable implements MustVerifyEmail * @param mixed $token * @return void */ - public function sendPasswordResetNotification(mixed $token) + public function sendPasswordResetNotification(mixed $token): void { $this->deleteIfDoesNotExistsInCrm(); /** @var string $token */ @@ -296,7 +296,7 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * Get api_data attribute, the crm Data of a customer + * Get api_data attribute, the crm Data of a customer. * * @return \Illuminate\Database\Eloquent\Casts\Attribute */ @@ -348,7 +348,7 @@ class Customer extends Authenticatable implements MustVerifyEmail // * CRM CACHE /** - * Clear cached apiData + * Clear cached apiData. * * @return void */ @@ -360,24 +360,21 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * Put customer crm part in cache + * Put customer crm part in cache. * - * @template T - * @param string $uuid The customer uuid. - * @param string $part_name The part name for the cache path. - * @param \Closure(void):T $part The part to cache. - * @param integer $ttl Time to live in seconds for the cache part. - * @return T - * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint + * @param string $uuid The customer uuid. + * @param string $part_name The part name for the cache path. + * @param \Closure $part The part to cache. + * @param integer $ttl Time to live in seconds for the cache part. + * @return mixed */ - public static function cacheCrm(string $uuid, string $part_name, \Closure $part, int $ttl = 60 * 60) + public static function cacheCrm(string $uuid, string $part_name, \Closure $part, int $ttl = 60 * 60): mixed { - // phpcs:enable return Cache::remember("customers.{$uuid}.{$part_name}", $ttl, $part); } /** - * Clear customer crm cache part or totally + * Clear customer crm cache part or totally. * * @param string $uuid * @param string $part_name @@ -395,11 +392,11 @@ class Customer extends Authenticatable implements MustVerifyEmail /** * This mutate Customer attributes to array * including only non critical properties and crm values - * (One that can be send to front office without security breach) + * (One that can be send to front office without security breach). * * @return array */ - public function toArray() + public function toArray(): array { if ($this->hashcode) { return collect(array_merge( @@ -427,7 +424,7 @@ class Customer extends Authenticatable implements MustVerifyEmail // * RELATIONSHIPS /** - * Get all of the departaimant collections for the Customer + * Get all of the departaimant collections for the Customer. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ @@ -437,7 +434,7 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * The notifications that belong to the Customer + * The notifications that belong to the Customer. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ @@ -447,7 +444,7 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * The read notifications that belong to the Customer + * The read notifications that belong to the Customer. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ @@ -457,7 +454,7 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * Get all of the messages for the Customer + * Get all of the messages for the Customer. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ @@ -467,7 +464,7 @@ class Customer extends Authenticatable implements MustVerifyEmail } /** - * Get all of the sentMessages for the Customer + * Get all of the sentMessages for the Customer. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ diff --git a/app/Models/DemarcheSlide.php b/app/Models/DemarcheSlide.php index 32f4f451..1fd86251 100644 --- a/app/Models/DemarcheSlide.php +++ b/app/Models/DemarcheSlide.php @@ -189,7 +189,7 @@ class DemarcheSlide extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedDemarcheSlidesOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/DepartaimantsCollection.php b/app/Models/DepartaimantsCollection.php index f4580221..d8833eb0 100644 --- a/app/Models/DepartaimantsCollection.php +++ b/app/Models/DepartaimantsCollection.php @@ -13,7 +13,7 @@ use Illuminate\Database\Eloquent\Model; /** * Departaimants Model - * Has functions to store departaimants on multiple statuses + * Has functions to store departaimants on multiple statuses. * * @property \App\Enums\Departaimants\DepartaimantCollectionType $type * @property integer $customer_id @@ -66,21 +66,21 @@ class DepartaimantsCollection extends Model ]; /** - * Columns prefix + * Columns prefix. * * @var string */ private static $columnTableNamePrefix = 'col'; /** - * Le prefix d'un table departaimant + * Le prefix d'un table departaimant. * * @var integer */ private static $tableFields = 4; /** - * Le nombre de colonnes des departaimants + * Le nombre de colonnes des departaimants. * * * La largeur en bits d'un départaimant * * to be set in construct @@ -130,7 +130,7 @@ class DepartaimantsCollection extends Model // * RELATIONSHIPS /** - * Get the customer that owns the DepartaimantsCollection + * Get the customer that owns the DepartaimantsCollection. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -142,7 +142,7 @@ class DepartaimantsCollection extends Model // * METHODS /** - * Add a Departaiment to this collection + * Add a Departaiment to this collection. * * @param \App\Enums\Departaimants\IDepartaimant $departaimant * @return void @@ -153,7 +153,7 @@ class DepartaimantsCollection extends Model } /** - * Removes a Departaime from this collection + * Removes a Departaime from this collection. * * @param \App\Enums\Departaimants\IDepartaimant $departaimant * @return void @@ -164,7 +164,7 @@ class DepartaimantsCollection extends Model } /** - * Checks if this collection has a Departaimant + * Checks if this collection has a Departaimant. * * @param \App\Enums\Departaimants\IDepartaimant $departaimant * @return boolean @@ -175,7 +175,7 @@ class DepartaimantsCollection extends Model } /** - * Set the Departaimant to a specific status + * Set the Departaimant to a specific status. * * @param \App\Enums\Departaimants\IDepartaimant $departaimant * @param \App\Enums\Departaimants\DepartaimantStatus $status @@ -191,7 +191,7 @@ class DepartaimantsCollection extends Model } /** - * Test the Departaimant status + * Test the Departaimant status. * * @param \App\Enums\Departaimants\IDepartaimant $departaimant * @param \App\Enums\Departaimants\DepartaimantStatus $status @@ -212,7 +212,7 @@ class DepartaimantsCollection extends Model } /** - * Get all Customer which has their departaimant with a status + * Get all Customer which has their departaimant with a status. * * @param \App\Enums\Departaimants\DepartaimantCollectionType $depColtype * @param \App\Enums\Departaimants\IDepartaimant $departaimant @@ -240,7 +240,7 @@ class DepartaimantsCollection extends Model } /** - * Get all Customer which has their departaimant with a status + * Get all Customer which has their departaimant with a status. * * @param array $departaimants * @param \App\Enums\Departaimants\DepartaimantStatus $status @@ -278,7 +278,7 @@ class DepartaimantsCollection extends Model } /** - * Get the Departaimant status + * Get the Departaimant status. * * @param \App\Enums\Departaimants\IDepartaimant $departaimant * @return \App\Enums\Departaimants\DepartaimantStatus @@ -298,7 +298,7 @@ class DepartaimantsCollection extends Model } /** - * Get a list of all the departaimants and their status + * Get a list of all the departaimants and their status. * * @uses \App\Enums\Departaimants\IDepartaimant * @uses \App\Enums\Departaimants\DepartaimantStatus @@ -322,7 +322,7 @@ class DepartaimantsCollection extends Model } /** - * Get a list of all the departaimants and their status + * Get a list of all the departaimants and their status. * * @param \App\Enums\Departaimants\DepartaimantCollectionType $depColtype * @param \App\Enums\Departaimants\DepartaimantStatus $status @@ -352,7 +352,7 @@ class DepartaimantsCollection extends Model } /** - * Set the Departaimant column to 0 + * Set the Departaimant column to 0. * * @param \App\Enums\Departaimants\IDepartaimant $departaimant * @return void @@ -367,7 +367,7 @@ class DepartaimantsCollection extends Model /** * Donne la 'table' (colonne SQL) dans laquelle se trouve - * le département + * le département. * * @param \App\Enums\Departaimants\DepartaimantCollectionType $depColtype * @param \App\Enums\Departaimants\IDepartaimant $dep @@ -386,7 +386,7 @@ class DepartaimantsCollection extends Model /** * Donne la colonne (binaire) dans laquelle se trouve le département - * Dans sa 'table' (colonne SQL) + * Dans sa 'table' (colonne SQL). * * @param \App\Enums\Departaimants\DepartaimantCollectionType $depColtype * @param \App\Enums\Departaimants\IDepartaimant $dep @@ -407,7 +407,7 @@ class DepartaimantsCollection extends Model } /** - * Donne la valeur (masque binaire) d'un département + * Donne la valeur (masque binaire) d'un département. * * @param \App\Enums\Departaimants\IDepartaimant $dep * @return integer @@ -418,7 +418,7 @@ class DepartaimantsCollection extends Model } /** - * Genère la liste des departements avec leur masques + * Genère la liste des departements avec leur masques. * * @param \App\Enums\Departaimants\DepartaimantCollectionType $depColtype * @return array @@ -439,7 +439,7 @@ class DepartaimantsCollection extends Model /** * Get the with in bit length for a column - * that can be used to store data + * that can be used to store data. * * @return float */ @@ -450,7 +450,7 @@ class DepartaimantsCollection extends Model } /** - * Get departaimant enum values + * Get departaimant enum values. * * @param \App\Enums\Departaimants\DepartaimantCollectionType $depColtype * @return array @@ -462,7 +462,7 @@ class DepartaimantsCollection extends Model } /** - * Get a departaiment enum from a collection type + * Get a departaiment enum from a collection type. * * @param \App\Enums\Departaimants\DepartaimantCollectionType $depColtype * @return string diff --git a/app/Models/GeneralSetting.php b/app/Models/GeneralSetting.php index bca9e942..a3c4f2dc 100644 --- a/app/Models/GeneralSetting.php +++ b/app/Models/GeneralSetting.php @@ -93,7 +93,7 @@ class GeneralSetting extends Model * * @return mixed */ - public function getRouteKey() + public function getRouteKey(): mixed { /** @var \App\Enums\StaticPageType */ $enum = $this->getAttribute($this->getRouteKeyName()); @@ -115,11 +115,11 @@ class GeneralSetting extends Model // * GETTERS /** - * Mutator for 'value' attribute + * Mutator for 'value' attribute. * * @return \Illuminate\Database\Eloquent\Casts\Attribute */ - public function value(): Attribute + public function value(): \Illuminate\Database\Eloquent\Casts\Attribute { return Attribute::make( get: fn($value): array => self::valueFromJson($this->type, $value), @@ -170,7 +170,7 @@ class GeneralSetting extends Model } /** - * Unserialize setting value + * Unserialize setting value. * * @param \App\Enums\Settings\SettingsType $type * @param string $json @@ -197,7 +197,7 @@ class GeneralSetting extends Model * @param \App\Enums\Settings\SettingsType $type * @return void */ - private static function resetCache(SettingsType $type) + private static function resetCache(SettingsType $type): void { Cache::forget(sprintf('%sGeneralSetting', $type->name)); self::getCachedGeneralSetting($type); @@ -207,9 +207,9 @@ class GeneralSetting extends Model * Get cached general setting associated to a given type. * * @param \App\Enums\Settings\SettingsType $type - * @return \App\Models\StaticPage + * @return mixed */ - public static function getCachedGeneralSetting(SettingsType $type) + public static function getCachedGeneralSetting(SettingsType $type): mixed { return Cache::rememberForever( sprintf('%sGeneralSetting', $type->name), diff --git a/app/Models/HistoricalMilestone.php b/app/Models/HistoricalMilestone.php index e860d75c..3c0109c6 100644 --- a/app/Models/HistoricalMilestone.php +++ b/app/Models/HistoricalMilestone.php @@ -117,7 +117,7 @@ class HistoricalMilestone extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedHistoricalMilestonesOrdered'); self::getPublishedOrdered(); diff --git a/app/Models/KeyNumber.php b/app/Models/KeyNumber.php index fa619bd5..4eb9fe09 100644 --- a/app/Models/KeyNumber.php +++ b/app/Models/KeyNumber.php @@ -84,7 +84,7 @@ class KeyNumber extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('5publishedKeyNumbersOrderedByOrder'); self::get5PublishedOrdered(); diff --git a/app/Models/MainSlide.php b/app/Models/MainSlide.php index 6bb9325e..0c5e440f 100644 --- a/app/Models/MainSlide.php +++ b/app/Models/MainSlide.php @@ -177,7 +177,7 @@ class MainSlide extends Model } /** - * Adjusts mainSlide status using current status and publish dates + * Adjusts mainSlide status using current status and publish dates. * * @param self $mainSlide * @return void @@ -201,7 +201,7 @@ class MainSlide extends Model } /** - * Getter the current status following planification dates planificated_status + * Getter the current status following planification dates planificated_status. * * @return boolean */ @@ -239,7 +239,7 @@ class MainSlide extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedMainSlidesOrderedByOrderWithApproaches'); self::getPublishedOrderedWithApproaches(); diff --git a/app/Models/Meat.php b/app/Models/Meat.php index b70cd7bf..8d6bff60 100644 --- a/app/Models/Meat.php +++ b/app/Models/Meat.php @@ -127,14 +127,14 @@ class Meat extends Model } /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * * @param string|null $label * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If a meat label already exists. */ - private static function assertLabelIsUnique(string|null $label, ?int $id = null) + private static function assertLabelIsUnique(string|null $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -157,7 +157,7 @@ class Meat extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedMeatsOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/MenuNodeData.php b/app/Models/MenuNodeData.php index 6c538179..3063114d 100644 --- a/app/Models/MenuNodeData.php +++ b/app/Models/MenuNodeData.php @@ -116,7 +116,7 @@ class MenuNodeData extends Model // * METHODS /** - * Deny Handling some of the MenuNodeData + * Deny Handling some of the MenuNodeData. * * @param self $model * @return void diff --git a/app/Models/Message.php b/app/Models/Message.php index c2d89390..fc058649 100644 --- a/app/Models/Message.php +++ b/app/Models/Message.php @@ -32,7 +32,7 @@ class Message extends Model implements INotifiable // * RELATIONSHIPS /** - * BelongsTo customer relation + * BelongsTo customer relation. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -42,7 +42,7 @@ class Message extends Model implements INotifiable } /** - * BelongsTo customer relation + * BelongsTo customer relation. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -52,7 +52,7 @@ class Message extends Model implements INotifiable } /** - * MorphOne notification relation + * MorphOne notification relation. * * @return \Illuminate\Database\Eloquent\Relations\MorphOne */ @@ -64,7 +64,7 @@ class Message extends Model implements INotifiable // * METHODS /** - * created_at_nice_date attribute + * created_at_nice_date attribute. * * @return \Illuminate\Database\Eloquent\Casts\Attribute */ @@ -76,7 +76,7 @@ class Message extends Model implements INotifiable } /** - * Get MessagesOlderThan attribute + * Get MessagesOlderThan attribute. * * @param integer $days * @return \Illuminate\Contracts\Database\Eloquent\Builder diff --git a/app/Models/News.php b/app/Models/News.php index 4e6d3f81..7629bfdc 100644 --- a/app/Models/News.php +++ b/app/Models/News.php @@ -222,7 +222,7 @@ class News extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedNewsWithCategories'); self::getPublishedWithNewsCategory(); diff --git a/app/Models/NewsBreeding.php b/app/Models/NewsBreeding.php index 0666082a..d023cb57 100644 --- a/app/Models/NewsBreeding.php +++ b/app/Models/NewsBreeding.php @@ -121,7 +121,7 @@ class NewsBreeding extends Model } /** - * Adjusts breedingNews status using current status and publish dates + * Adjusts breedingNews status using current status and publish dates. * * @param self $model * @return void @@ -145,7 +145,7 @@ class NewsBreeding extends Model } /** - * Asserts using validation that the title is unique + * Asserts using validation that the title is unique. * * @param string|null $title * @param integer|null $id @@ -161,7 +161,7 @@ class NewsBreeding extends Model /** - * Getter the current status following planification dates planificated_status + * Getter the current status following planification dates planificated_status. * * @return boolean */ @@ -189,7 +189,7 @@ class NewsBreeding extends Model * @param \App\Enums\StaticPageType $type * @return void */ - private static function resetCache(StaticPageType $type) + private static function resetCache(StaticPageType $type): void { Cache::forget(sprintf('%sPublishedNewsBreedingOrderedByOrder', $type->name)); self::getPublishedOrderedForType($type); diff --git a/app/Models/NewsCategory.php b/app/Models/NewsCategory.php index 8802345c..07dd9366 100644 --- a/app/Models/NewsCategory.php +++ b/app/Models/NewsCategory.php @@ -101,7 +101,7 @@ class NewsCategory extends Model } /** - * Asserts using validation that the title is unique + * Asserts using validation that the title is unique. * * @param string|null $title * @param integer|null $id @@ -120,7 +120,7 @@ class NewsCategory extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedNewsCategoriesOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/NewsClub.php b/app/Models/NewsClub.php index bd77f949..a06c874c 100644 --- a/app/Models/NewsClub.php +++ b/app/Models/NewsClub.php @@ -96,7 +96,7 @@ class NewsClub extends Model } /** - * Asserts using validation that the title is unique + * Asserts using validation that the title is unique. * * @param string|null $title * @param integer|null $id diff --git a/app/Models/NewsCorporate.php b/app/Models/NewsCorporate.php index ac4e8510..6e47129f 100644 --- a/app/Models/NewsCorporate.php +++ b/app/Models/NewsCorporate.php @@ -85,7 +85,7 @@ class NewsCorporate extends Model // * METHODS /** - * Adjusts newsCorporate status using current status and publish dates + * Adjusts newsCorporate status using current status and publish dates. * * @param self $newsCorporate * @return void @@ -109,7 +109,7 @@ class NewsCorporate extends Model } /** - * Getter the current status following planification dates planificated_status + * Getter the current status following planification dates planificated_status. * * @return boolean */ @@ -136,7 +136,7 @@ class NewsCorporate extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('9publishedNewsCorporateOrderedByUpdatedAt'); self::get9PublishedOrderedByUpdatedAt(); @@ -150,11 +150,7 @@ class NewsCorporate extends Model public static function get9PublishedOrderedByUpdatedAt(): \Illuminate\Database\Eloquent\Collection { return Cache::rememberForever('9publishedNewsCorporateOrderedByUpdatedAt', function () { - return self::query() - ->where('published', true) - ->orderByDesc('updated_at') - ->limit(9) - ->get(); + return self::query()->where('published', true)->orderByDesc('updated_at')->limit(9)->get(); }); } } diff --git a/app/Models/Product.php b/app/Models/Product.php index cf892ff4..e2c8d909 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -150,7 +150,7 @@ class Product extends Model implements SeoInterface * @return void * @throws \Illuminate\Validation\ValidationException If a range label already exists. */ - private static function assertLabelIsUnique(string|null $label, ?int $id = null) + private static function assertLabelIsUnique(string|null $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -200,7 +200,7 @@ class Product extends Model implements SeoInterface * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedDiscoveredProducts'); self::getPublishedDiscovered(); diff --git a/app/Models/ProductType.php b/app/Models/ProductType.php index f0e1a808..71ce48e1 100644 --- a/app/Models/ProductType.php +++ b/app/Models/ProductType.php @@ -79,7 +79,7 @@ class ProductType extends Model // * METHODS /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * * @param string|null $label * @param integer|null $id diff --git a/app/Models/Range.php b/app/Models/Range.php index bc4dc913..5e6c0206 100644 --- a/app/Models/Range.php +++ b/app/Models/Range.php @@ -132,14 +132,14 @@ class Range extends Model } /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * * @param string|null $label * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If a range label already exists. */ - private static function assertLabelIsUnique(string|null $label, ?int $id = null) + private static function assertLabelIsUnique(string|null $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -162,7 +162,7 @@ class Range extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedRangesOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/Recipe.php b/app/Models/Recipe.php index 60806c9d..8100ab8c 100644 --- a/app/Models/Recipe.php +++ b/app/Models/Recipe.php @@ -127,14 +127,14 @@ class Recipe extends Model implements SeoInterface } /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * * @param string|null $title * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If a range title already exists. */ - private static function assertTitleIsUnique(string|null $title, ?int $id = null) + private static function assertTitleIsUnique(string|null $title, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id); @@ -198,7 +198,7 @@ class Recipe extends Model implements SeoInterface * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedFirstHighlightedRecipe'); self::getFirstHighlighted(); diff --git a/app/Models/StaticPage.php b/app/Models/StaticPage.php index 88934219..95935263 100644 --- a/app/Models/StaticPage.php +++ b/app/Models/StaticPage.php @@ -96,7 +96,7 @@ class StaticPage extends Model * * @return mixed */ - public function getRouteKey() + public function getRouteKey(): mixed { /** @var \App\Enums\StaticPageType */ $enum = $this->getAttribute($this->getRouteKeyName()); @@ -137,7 +137,7 @@ class StaticPage extends Model /** * Asserts using validation that the title is unique * - * @param string|null $seo_title + * @param string|null $title * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If an actu seo_title already exists. @@ -157,7 +157,7 @@ class StaticPage extends Model * @param \App\Enums\StaticPageType $type * @return void */ - private static function resetCache(StaticPageType $type) + private static function resetCache(StaticPageType $type): void { Cache::forget(sprintf('%sStaticPage', $type->name)); self::getCachedStaticPage($type); @@ -173,7 +173,7 @@ class StaticPage extends Model * @param \App\Enums\StaticPageType $type * @return \App\Models\StaticPage */ - public static function getCachedStaticPage(StaticPageType $type) + public static function getCachedStaticPage(StaticPageType $type): \App\Models\StaticPage { return Cache::rememberForever( sprintf('%sStaticPage', $type->name), @@ -186,7 +186,7 @@ class StaticPage extends Model * * @return \Illuminate\Database\Eloquent\Collection */ - public static function getCachedBreedingStaticPages() + public static function getCachedBreedingStaticPages(): \Illuminate\Database\Eloquent\Collection { return Cache::rememberForever( 'breedingStaticPages', diff --git a/app/Models/Submeat.php b/app/Models/Submeat.php index 9662b818..8c003cce 100644 --- a/app/Models/Submeat.php +++ b/app/Models/Submeat.php @@ -133,7 +133,7 @@ class Submeat extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedSubmeatsOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/Subrange.php b/app/Models/Subrange.php index a9558e05..e37f92fc 100644 --- a/app/Models/Subrange.php +++ b/app/Models/Subrange.php @@ -132,7 +132,7 @@ class Subrange extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedSubrangesOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/Testimonial.php b/app/Models/Testimonial.php index 79b787ec..4e09f2cf 100644 --- a/app/Models/Testimonial.php +++ b/app/Models/Testimonial.php @@ -115,7 +115,7 @@ class Testimonial extends Model * @param integer $max * @return void */ - private static function checkPublishedCount(self $model, int $max) + private static function checkPublishedCount(self $model, int $max): void { Validator::make(['published' => $model->published], [ 'published' => Rule::prohibitedIf( @@ -137,7 +137,7 @@ class Testimonial extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('publishedTestimonialsOrderedByOrder'); self::getPublishedOrdered(); diff --git a/app/Models/Video.php b/app/Models/Video.php index eb637122..223b9511 100644 --- a/app/Models/Video.php +++ b/app/Models/Video.php @@ -87,7 +87,7 @@ class Video extends Model * * @return void */ - private static function resetCache() + private static function resetCache(): void { Cache::forget('9publishedHomeVideosOrderedByOrderWithProducts'); self::get9PublishedHomeVideosOrderedWithProducts(); diff --git a/app/Notifications/Customer/DestroyCustomer.php b/app/Notifications/Customer/DestroyCustomer.php index db830229..95799ca7 100644 --- a/app/Notifications/Customer/DestroyCustomer.php +++ b/app/Notifications/Customer/DestroyCustomer.php @@ -10,13 +10,10 @@ class DestroyCustomer extends Notification /** * Get the notification's delivery channels. * - * @param object $notifiable * @return array - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function via(object $notifiable): array + public function via(): array { - // phpcs:enable return ['mail']; } @@ -28,15 +25,12 @@ class DestroyCustomer extends Notification */ public function toMail(object $notifiable): \Illuminate\Notifications\Messages\MailMessage { - /** @var string $firstname */ - $firstname = $notifiable->username; - return (new MailMessage()) ->template('notifications::email-club') ->subject(trans('Supression du compte - :site_name', [ 'site_name' => config('app.name') ])) - ->greeting(trans('Bonjour :name', ['name' => $firstname])) + ->greeting(trans('Bonjour :name', ['name' => $notifiable->username])) ->line(trans( "Votre compte :site_name a été marqué pour suppression, il sera définitivement effacé au bout de 1 semaine. diff --git a/app/Notifications/Customer/DestroyedCustomer.php b/app/Notifications/Customer/DestroyedCustomer.php index 5a4eec54..50e43778 100644 --- a/app/Notifications/Customer/DestroyedCustomer.php +++ b/app/Notifications/Customer/DestroyedCustomer.php @@ -10,26 +10,20 @@ class DestroyedCustomer extends Notification /** * Get the notification's delivery channels. * - * @param object $notifiable * @return array - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function via(object $notifiable): array + public function via(): array { - // phpcs:enable return ['mail']; } /** * Build the mail representation of the notification. * - * @param object $notifiable * @return \Illuminate\Notifications\Messages\MailMessage - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function toMail(object $notifiable): \Illuminate\Notifications\Messages\MailMessage + public function toMail(): \Illuminate\Notifications\Messages\MailMessage { - // phpcs:enable return (new MailMessage()) ->template('notifications::email-club') ->subject(trans('Votre compte est suprimé - :site_name', [ @@ -40,9 +34,7 @@ class DestroyedCustomer extends Notification "Votre compte :site_name a été définitivement supprimé ainsi ques les données associés, si vous aviez effectué une commande elle sera bien sûr toujours honorée. Les commandes associés a votre compte continueront d'exister mais les données de votre compte ont bien été supprimées.", - [ - 'site_name' => config('app.name') - ] + ['site_name' => config('app.name')] )); } } diff --git a/app/Notifications/Customer/ResetPassword.php b/app/Notifications/Customer/ResetPassword.php index dc25a310..14ed5bee 100644 --- a/app/Notifications/Customer/ResetPassword.php +++ b/app/Notifications/Customer/ResetPassword.php @@ -9,7 +9,7 @@ use Illuminate\Support\Facades\URL; class ResetPassword extends NotificationsResetPassword { /** - * ResetPassword + * Reset password. * * @param string $token * @return void diff --git a/app/Notifications/Customer/UpdateEmail.php b/app/Notifications/Customer/UpdateEmail.php index 01ec44a9..31864fdd 100644 --- a/app/Notifications/Customer/UpdateEmail.php +++ b/app/Notifications/Customer/UpdateEmail.php @@ -10,13 +10,10 @@ class UpdateEmail extends Notification /** * Get the notification's delivery channels. * - * @param object $notifiable * @return array - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function via(object $notifiable): array + public function via(): array { - // phpcs:enable return ['mail']; } @@ -28,15 +25,12 @@ class UpdateEmail extends Notification */ public function toMail(object $notifiable): \Illuminate\Notifications\Messages\MailMessage { - /** @var string $firstname */ - $firstname = $notifiable->username; - return (new MailMessage()) ->template('notifications::email-club') ->subject(trans("Mise à jour de l'email - :site_name", [ 'site_name' => config('app.name') ])) - ->greeting(trans('Bonjour :name', ['name' => $firstname])) + ->greeting(trans('Bonjour :name', ['name' => $notifiable->username])) ->line(trans("L'email associé à votre compte :site_name vient d'être modifié.", [ 'site_name' => config('app.name') ])); diff --git a/app/Notifications/Customer/UpdatePassword.php b/app/Notifications/Customer/UpdatePassword.php index 5dc6b402..a3d0d7e2 100644 --- a/app/Notifications/Customer/UpdatePassword.php +++ b/app/Notifications/Customer/UpdatePassword.php @@ -10,13 +10,10 @@ class UpdatePassword extends Notification /** * Get the notification's delivery channels. * - * @param object $notifiable * @return array - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function via(object $notifiable): array + public function via(): array { - // phpcs:enable return ['mail']; } @@ -28,15 +25,12 @@ class UpdatePassword extends Notification */ public function toMail(object $notifiable): \Illuminate\Notifications\Messages\MailMessage { - /** @var string $firstname */ - $firstname = $notifiable->username; - return (new MailMessage()) ->template('notifications::email-club') ->subject(trans("Mise à jour du mot de passe - :site_name", [ 'site_name' => config('app.name') ])) - ->greeting(trans('Bonjour :name', ['name' => $firstname])) + ->greeting(trans('Bonjour :name', ['name' => $notifiable->username])) ->line(trans("Le mot de passe associé à votre compte :site_name vient d'être modifié.", [ 'site_name' => config('app.name') ])); diff --git a/app/Notifications/Customer/VerifyEmail.php b/app/Notifications/Customer/VerifyEmail.php index 870079da..15135f98 100644 --- a/app/Notifications/Customer/VerifyEmail.php +++ b/app/Notifications/Customer/VerifyEmail.php @@ -11,7 +11,7 @@ use Illuminate\Support\Facades\URL; class VerifyEmail extends NotificationsVerifyEmail { /** - * VerifyEmail + * Verify email. * * @return void */ diff --git a/app/Policies/SellItemPolicy.php b/app/Policies/SellItemPolicy.php index ed6299ea..ed08159a 100644 --- a/app/Policies/SellItemPolicy.php +++ b/app/Policies/SellItemPolicy.php @@ -11,6 +11,7 @@ class SellItemPolicy /** * Determine whether the user can view any models. * + * @param \App\Models\User $authUser * @return boolean */ public function viewAny(User $authUser): bool diff --git a/app/Providers/CrmApiServiceProvider.php b/app/Providers/CrmApiServiceProvider.php index 20732fce..5c161492 100644 --- a/app/Providers/CrmApiServiceProvider.php +++ b/app/Providers/CrmApiServiceProvider.php @@ -13,7 +13,7 @@ class CrmApiServiceProvider extends ServiceProvider * * @return void */ - public function boot() + public function boot(): void { App::singleton('crmAPI', function () { return new CrmApiV4( diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index c4eee026..71a08fab 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -50,7 +50,7 @@ class EventServiceProvider extends ServiceProvider * * @return void */ - public function boot() + public function boot(): void { Event::listen('Slides\Saml2\Events\SignedIn', function (SignedIn $event) { $messageId = $event->getAuth()->getLastMessageId(); diff --git a/app/Providers/MesBrApiServiceProvider.php b/app/Providers/MesBrApiServiceProvider.php index 6a9a0564..c0abe219 100644 --- a/app/Providers/MesBrApiServiceProvider.php +++ b/app/Providers/MesBrApiServiceProvider.php @@ -13,7 +13,7 @@ class MesBrApiServiceProvider extends ServiceProvider * * @return void */ - public function boot() + public function boot(): void { App::singleton('mesBrAPI', function () { return new MesBr( diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 7cc7e92d..23dc8497 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -144,7 +144,7 @@ class RouteServiceProvider extends ServiceProvider * * @return void */ - private function cspReportRoute() + private function cspReportRoute(): void { // * CSP REPORT URI, Please add /csp-report to VerifyCsrfToken $except middleware Route::post('/csp-report', function () { diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php index 6de03d6c..d7818efc 100644 --- a/app/Providers/ViewServiceProvider.php +++ b/app/Providers/ViewServiceProvider.php @@ -96,6 +96,7 @@ class ViewServiceProvider extends ServiceProvider }); // * Inject some data for the bo menu. + // @phpcs:disable Generic.Files.LineLength.TooLong collect([ ['name' => 'customerModelsCount', 'value' => Customer::query()->count()], ['name' => 'firstMeat', 'value' => Meat::query()->first()], @@ -104,62 +105,27 @@ class ViewServiceProvider extends ServiceProvider ['name' => 'mainMenuMeatModels', 'value' => Meat::getPublishedOrdered()], ['name' => 'homeStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::home)], ['name' => 'storyStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::story)], - [ - 'name' => 'recruitmentStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::recruitment) - ], + ['name' => 'recruitmentStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::recruitment)], ['name' => 'sagaStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::saga)], - [ - 'name' => 'recipesStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::recipes) - ], - [ - 'name' => 'recipeStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::recipe) - ], - [ - 'name' => 'productsStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::products) - ], + ['name' => 'recipesStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::recipes)], + ['name' => 'recipeStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::recipe)], + ['name' => 'productsStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::products)], ['name' => 'legalsStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::legals)], - [ - 'name' => 'confidentialityStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::confidentiality) - ], - [ - 'name' => 'sellingStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::selling) - ], - [ - 'name' => 'accessibilityStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::accessibility) - ], - [ - 'name' => 'productStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::product) - ], - [ - 'name' => 'breedingPoultryStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingPoultry) - ], - [ - 'name' => 'breedingJobStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingJob) - ], - [ - 'name' => 'breedingFoodStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingFood) - ], - [ - 'name' => 'breedingHealthStaticPageModel', - 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingHealth) - ], + ['name' => 'confidentialityStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::confidentiality)], + ['name' => 'sellingStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::selling)], + ['name' => 'accessibilityStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::accessibility)], + ['name' => 'productStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::product)], + ['name' => 'breedingPoultryStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingPoultry)], + ['name' => 'breedingJobStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingJob)], + ['name' => 'breedingFoodStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingFood)], + ['name' => 'breedingHealthStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingHealth)], ['name' => 'newsStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::news)], ])->map(function ($array) { View::share($array['name'], (function () use ($array) { return $array['value'] ?: null; })()); }); + // phpcs:enable } //end if } } diff --git a/app/Rules/Hex.php b/app/Rules/Hex.php index 3ad3239a..199be1a8 100755 --- a/app/Rules/Hex.php +++ b/app/Rules/Hex.php @@ -69,7 +69,7 @@ class Hex implements ValidationRule * * @return string */ - public function message() + public function message(): string { return 'The hex code is not valid'; } diff --git a/app/Rules/IsValidVimeoId.php b/app/Rules/IsValidVimeoId.php index 4a91da6e..6cf03f67 100644 --- a/app/Rules/IsValidVimeoId.php +++ b/app/Rules/IsValidVimeoId.php @@ -31,7 +31,7 @@ class IsValidVimeoId implements ValidationRule } /** - * Validate a value + * Validate a value. * * @param mixed $value * @return boolean diff --git a/app/Rules/IsValidYoutubeId.php b/app/Rules/IsValidYoutubeId.php index 1a410091..b4c3634b 100644 --- a/app/Rules/IsValidYoutubeId.php +++ b/app/Rules/IsValidYoutubeId.php @@ -32,7 +32,7 @@ class IsValidYoutubeId implements ValidationRule } /** - * Validate a value + * Validate a value. * * @param mixed $value * @return boolean diff --git a/app/Traits/Controllers/UpdateModelPublished.php b/app/Traits/Controllers/UpdateModelPublished.php index ae43ef88..7b0c9e33 100644 --- a/app/Traits/Controllers/UpdateModelPublished.php +++ b/app/Traits/Controllers/UpdateModelPublished.php @@ -17,7 +17,7 @@ trait UpdateModelPublished * @param \Illuminate\Database\Eloquent\Model $model * @return \Illuminate\Http\RedirectResponse */ - public function changePublished(Model $model) + public function changePublished(Model $model): \Illuminate\Http\RedirectResponse { $model->update(['published' => !$model->getOriginal('published')]); return redirect()->back()->with('success', trans('crud.messages.publish_status_saved')); diff --git a/app/Traits/Models/IsCachedAsCollection.php b/app/Traits/Models/IsCachedAsCollection.php index 4bbb536c..aec7e468 100644 --- a/app/Traits/Models/IsCachedAsCollection.php +++ b/app/Traits/Models/IsCachedAsCollection.php @@ -36,7 +36,7 @@ trait IsCachedAsCollection } /** - * Remove cached elements + * Remove cached elements. * * @return void */ @@ -63,7 +63,7 @@ trait IsCachedAsCollection } /** - * Change query for cached elements + * Change query for cached elements. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder @@ -74,7 +74,7 @@ trait IsCachedAsCollection } /** - * Change query for cached elements + * Change query for cached elements. * * @param \Illuminate\Support\Collection $results * @return \Illuminate\Support\Collection @@ -85,7 +85,7 @@ trait IsCachedAsCollection } /** - * Get the class basename + * Get the class basename. * * @return string */ @@ -95,7 +95,7 @@ trait IsCachedAsCollection } /** - * Get the class basename + * Get the class basename. * * @return string */ diff --git a/app/Traits/Models/MiniCrudModel.php b/app/Traits/Models/MiniCrudModel.php index e73fefa6..2593f830 100644 --- a/app/Traits/Models/MiniCrudModel.php +++ b/app/Traits/Models/MiniCrudModel.php @@ -27,7 +27,7 @@ trait MiniCrudModel } /** - * Apply function on data typed text while on save event + * Apply function on data typed text while on save event. * * @return void */ @@ -47,7 +47,7 @@ trait MiniCrudModel } /** - * Apply function on data typed text while on update event + * Apply function on data typed text while on update event. * * @return void */ @@ -57,7 +57,7 @@ trait MiniCrudModel } /** - * Apply function on data typed text while on updated event + * Apply function on data typed text while on updated event. * * @return void */ @@ -78,7 +78,7 @@ trait MiniCrudModel } /** - * Apply function on data typed text while on deleted event + * Apply function on data typed text while on deleted event. * * @return void */ @@ -95,7 +95,7 @@ trait MiniCrudModel } /** - * Set a specific prop + * Set a specific prop. * * @param array $data * @return void @@ -110,7 +110,7 @@ trait MiniCrudModel } /** - * Set a specific prop + * Set a specific prop. * * @param array $value * @return void @@ -124,7 +124,7 @@ trait MiniCrudModel } /** - * Set a specific prop + * Set a specific prop. * * @param string|null $data * @return array @@ -135,7 +135,7 @@ trait MiniCrudModel } /** - * Serialize properties + * Serialize properties. * * @param array $data * @return array diff --git a/app/Traits/Requests/HasPicture.php b/app/Traits/Requests/HasPicture.php index aa72cad8..23a6bf34 100644 --- a/app/Traits/Requests/HasPicture.php +++ b/app/Traits/Requests/HasPicture.php @@ -38,7 +38,7 @@ trait HasPicture private $maxHeight = 1800; /** - * Image rules + * Image rules. * * @param string $name * @param integer|null $minWidth @@ -85,7 +85,7 @@ trait HasPicture } /** - * Images rules + * Images rules. * * @param string $name * @param integer|null $minWidth @@ -108,9 +108,9 @@ trait HasPicture bool $nullable = false ): array { $sizes = (object)[ - 'minWidth' => $minWidth ?? $this->minWidth, + 'minWidth' => $minWidth ?? $this->minWidth, 'minHeight' => $minHeight ?? $this->minHeight, - 'maxWidth' => $maxWidth ?? $this->maxWidth, + 'maxWidth' => $maxWidth ?? $this->maxWidth, 'maxHeight' => $maxHeight ?? $this->maxHeight, ]; return [ @@ -126,7 +126,7 @@ trait HasPicture } /** - * Merges products pictures fields with request data + * Merges products pictures fields with request data. * * @param string $name * @return void @@ -153,7 +153,7 @@ trait HasPicture $this->merge([ $name => $changedPicture ]); -// le else if sert a gerer le cas ou l'image de la bannière produit est nulle + // FIXME: patch because of component return. } elseif (is_null($picturePath)) { $this->merge([$name => null]); return; @@ -161,7 +161,7 @@ trait HasPicture } /** - * Merges products pictures fields with request data + * Merges products pictures fields with request data. * * @param string $name * @return void diff --git a/app/View/Components/Fo/Story/HistoricalMilestoneComponent.php b/app/View/Components/Fo/Story/HistoricalMilestoneComponent.php index cb27e729..ae383f80 100644 --- a/app/View/Components/Fo/Story/HistoricalMilestoneComponent.php +++ b/app/View/Components/Fo/Story/HistoricalMilestoneComponent.php @@ -3,7 +3,6 @@ namespace App\View\Components\Fo\Story; use Closure; -use Illuminate\Contracts\View\View; use Illuminate\View\Component; use App\Models\StaticPage; use App\Enums\StaticPageType; @@ -23,7 +22,7 @@ class HistoricalMilestoneComponent extends Component public function __construct() { $this->staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::story); - $this->historicalMilestoneModels = HistoricalMilestone::getPublishedOrderedByYear(); + $this->historicalMilestoneModels = HistoricalMilestone::getPublishedOrdered(); } /** @@ -31,10 +30,10 @@ class HistoricalMilestoneComponent extends Component * * @return \Illuminate\Contracts\View\View */ - public function render(): View|Closure|string + public function render(): \Illuminate\Contracts\View\View|Closure|string { return view('components.fo.story.historical-milestone-component', [ - 'staticPageModel' => $this->staticPageModel, + 'staticPageModel' => $this->staticPageModel, 'historicalMilestoneModels' => $this->historicalMilestoneModels ]); } diff --git a/app/View/Components/Fo/Story/WhoWeAre.php b/app/View/Components/Fo/Story/WhoWeAre.php index 7dd717a8..33e6e0e1 100644 --- a/app/View/Components/Fo/Story/WhoWeAre.php +++ b/app/View/Components/Fo/Story/WhoWeAre.php @@ -3,7 +3,6 @@ namespace App\View\Components\Fo\Story; use Closure; -use Illuminate\Contracts\View\View; use Illuminate\View\Component; use App\Models\StaticPage; use App\Enums\StaticPageType; @@ -32,7 +31,7 @@ class WhoWeAre extends Component * * @return \Illuminate\Contracts\View\View */ - public function render(): View|Closure|string + public function render(): \Illuminate\Contracts\View\View|Closure|string { return view('components.fo.story.who-we-are', [ 'staticPageModel' => $this->staticPageModel, From 34eb725b29d7812c5c391b27c5e8d490debf4b55 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Fri, 4 Oct 2024 17:09:31 +0200 Subject: [PATCH 13/23] feat: :sparkles: complete shop club with mercanet & arcadia --- .env.example | 5 + app/Enums/Arcadia/ArcadiaOrderType.php | 13 + app/Enums/Mercanet/PaymentResponse.php | 42 + app/Enums/Mercanet/RedirectionStatusCode.php | 35 + app/Enums/Mercanet/TransactionResponse.php | 37 + app/Enums/Shop/ContactFormCivility.php | 23 + app/Enums/Shop/OrderStatus.php | 29 + app/Enums/Shop/OrderType.php | 23 + app/Exceptions/CBPayementError.php | 11 + app/Http/Controllers/Club/ShopController.php | 443 ++++++- app/Http/Kernel.php | 1 - app/Http/Middleware/EnsureEmailIsVerified.php | 59 + app/Http/Middleware/XssSanitizer.php | 35 + .../Requests/Club/Shop/ShopBuyRequest.php | 110 ++ app/Jobs/Arcadia/SendHasOrderedAnItemMail.php | 51 + app/Jobs/Arcadia/SendOrderToArcadia.php | 65 + app/Jobs/Shop/SendShopMail.php | 54 + app/Lib/Arcadia/HasOrderedAnItemData.php | 145 +++ app/Lib/Mercanet/Mercanet.php | 1131 +++++++++++++++++ app/Mail/Arcadia/HasOrderedAnItem.php | 102 ++ app/Models/DeliveryAddress.php | 58 + app/Models/Notification.php | 51 +- app/Models/Order.php | 116 ++ app/Models/OrderSellItem.php | 9 + app/Notifications/Shop/NewOrder.php | 118 ++ app/Traits/Enums/BaseEnum.php | 2 +- composer.json | 1 + composer.lock | 270 +++- config/mercanet.php | 8 + config/robots-txt.php | 1 + .../2024_21_27_123906_create_orders_table.php | 45 + ...27_123907_create_order_sell_item_table.php | 32 + ...123908_create_delivery_addresses_table.php | 36 + package-lock.json | 6 +- .../club/conditions_generales_de_vente.pdf | Bin 0 -> 266882 bytes resources/assets/fonts/BourtonBase.ttf | Bin 0 -> 50564 bytes resources/assets/images/club/shop/order.jpg | Bin 0 -> 136622 bytes resources/assets/images/club/shop/padlock.png | Bin 0 -> 553 bytes .../sass/club/partials/_card-club-home.scss | 2 +- .../components/club/boutique/choose.vue.save | 140 -- .../components/club/boutique/recap.vue.save | 369 ------ .../components/club/boutique/shop.vue.save | 27 - .../components/club/shop/ChooseComponent.vue | 270 ++++ .../components/club/shop/RecapComponent.vue | 622 +++++++++ .../club/shop/ShopRouterComponent.vue | 161 +++ resources/ts/club/utilities/fontawesome.ts | 10 + resources/ts/index.d.ts | 26 + resources/ts/modules/asset.ts | 2 +- .../views/club/pages/shop/error.blade.php | 38 + .../views/club/pages/shop/index.blade.php | 127 +- .../views/club/pages/shop/recap.blade.php | 80 -- .../pages/shop/redirectMercanet.blade.php | 29 + .../pages/shop/template-pdf-order.blade.php | 206 +++ .../views/club/pages/shop/validated.blade.php | 46 + .../views/modules/flash-messages.blade.php | 2 +- .../views/modules/script-constants.blade.php | 2 +- .../views/modules/script-routes.blade.php | 2 +- routes/web-club.php | 57 +- vite.config.ts | 2 + 59 files changed, 4617 insertions(+), 770 deletions(-) create mode 100644 app/Enums/Arcadia/ArcadiaOrderType.php create mode 100644 app/Enums/Mercanet/PaymentResponse.php create mode 100644 app/Enums/Mercanet/RedirectionStatusCode.php create mode 100644 app/Enums/Mercanet/TransactionResponse.php create mode 100644 app/Enums/Shop/ContactFormCivility.php create mode 100644 app/Enums/Shop/OrderStatus.php create mode 100644 app/Enums/Shop/OrderType.php create mode 100644 app/Exceptions/CBPayementError.php create mode 100644 app/Http/Middleware/EnsureEmailIsVerified.php create mode 100644 app/Http/Middleware/XssSanitizer.php create mode 100644 app/Http/Requests/Club/Shop/ShopBuyRequest.php create mode 100644 app/Jobs/Arcadia/SendHasOrderedAnItemMail.php create mode 100644 app/Jobs/Arcadia/SendOrderToArcadia.php create mode 100644 app/Jobs/Shop/SendShopMail.php create mode 100644 app/Lib/Arcadia/HasOrderedAnItemData.php create mode 100644 app/Lib/Mercanet/Mercanet.php create mode 100644 app/Mail/Arcadia/HasOrderedAnItem.php create mode 100644 app/Models/DeliveryAddress.php create mode 100644 app/Models/Order.php create mode 100644 app/Models/OrderSellItem.php create mode 100644 app/Notifications/Shop/NewOrder.php create mode 100644 config/mercanet.php create mode 100644 database/migrations/2024_21_27_123906_create_orders_table.php create mode 100644 database/migrations/2024_21_27_123907_create_order_sell_item_table.php create mode 100644 database/migrations/2024_21_27_123908_create_delivery_addresses_table.php create mode 100644 resources/assets/documents/club/conditions_generales_de_vente.pdf create mode 100644 resources/assets/fonts/BourtonBase.ttf create mode 100644 resources/assets/images/club/shop/order.jpg create mode 100644 resources/assets/images/club/shop/padlock.png delete mode 100644 resources/ts/club/components/club/boutique/choose.vue.save delete mode 100644 resources/ts/club/components/club/boutique/recap.vue.save delete mode 100644 resources/ts/club/components/club/boutique/shop.vue.save create mode 100644 resources/ts/club/components/club/shop/ChooseComponent.vue create mode 100644 resources/ts/club/components/club/shop/RecapComponent.vue create mode 100644 resources/ts/club/components/club/shop/ShopRouterComponent.vue create mode 100644 resources/views/club/pages/shop/error.blade.php delete mode 100644 resources/views/club/pages/shop/recap.blade.php create mode 100644 resources/views/club/pages/shop/redirectMercanet.blade.php create mode 100644 resources/views/club/pages/shop/template-pdf-order.blade.php create mode 100644 resources/views/club/pages/shop/validated.blade.php diff --git a/.env.example b/.env.example index 0937081a..40622e7f 100644 --- a/.env.example +++ b/.env.example @@ -73,3 +73,8 @@ SAML2_CONTACT_SUPPORT_EMAIL= GOOGLE_RECAPTCHA_PUBLIC= GOOGLE_RECAPTCHA_PRIVATE= GOOGLE_RECAPTCHA_VERSION= + +## MERCANET +MERCANET_SECRET= +MERCANET_MERCHAND_ID= +MERCANET_ENV= diff --git a/app/Enums/Arcadia/ArcadiaOrderType.php b/app/Enums/Arcadia/ArcadiaOrderType.php new file mode 100644 index 00000000..96dc70a4 --- /dev/null +++ b/app/Enums/Arcadia/ArcadiaOrderType.php @@ -0,0 +1,13 @@ +name => 'Situation normale suivie du processus normal d\'affichage des pages de paiement.', + self::invalidIds->name => 'L’identifiant commerçant ou le contrat acquéreur sont invalides.', + self::invalidParameters->name => 'Les paramètres de la transaction sont invalides. Vérifiez les paramètres de la requête.', + self::canceled->name => 'Transaction annulée', + self::invalidRequestFormat->name => 'Le format de la requête est invalide.', + self::securityIssue->name => 'Problème de sécurité, par ex. le sceau calculé est incorrect.', + self::transactionAlreadyExists->name => 'La transaction existe déjà.', + self::expired->name => 'Délais expiré', + self::unreachableService->name => 'Service temporairement indisponible', + self::internalIssue->name => 'Erreur interne, eg: probleme appel CURL' + ]; + //phpcs:enable +} diff --git a/app/Enums/Mercanet/RedirectionStatusCode.php b/app/Enums/Mercanet/RedirectionStatusCode.php new file mode 100644 index 00000000..d50358da --- /dev/null +++ b/app/Enums/Mercanet/RedirectionStatusCode.php @@ -0,0 +1,35 @@ +name => 'Redirection Acceptée', + self::requestError03->name => 'Problème de request code 03', + self::requestError12->name => 'Problème de request code 12', + self::requestError30->name => 'Problème de request code 30', + self::requestError34->name => 'Problème de request code 34', + self::referenceAlreadyUsed->name => 'La référence de transaction à déja été utilisée', + self::serviceDisponibiltyIssue->name => 'Problème de disponibilité du service de paiement', + self::internalIssue->name => 'Erreur interne, eg: probleme appel CURL' + ]; +} diff --git a/app/Enums/Mercanet/TransactionResponse.php b/app/Enums/Mercanet/TransactionResponse.php new file mode 100644 index 00000000..a60429d8 --- /dev/null +++ b/app/Enums/Mercanet/TransactionResponse.php @@ -0,0 +1,37 @@ +name => 'Paiement accepté', + self::refused->name => 'Paiement refusé', + self::canceled->name => 'Paiement annulé', + self::fraud->name => 'Paiement refusé pour fraude', + self::maxReached->name => 'Paiement refusé pour nombre max essais atteint', + self::technicalIssue->name => 'Paiement refusé pour problème technique', + self::duplicate->name => 'Transaction dupliquée', + self::expired->name => 'Paiement expiré', + self::internalIssue->name => 'Erreur interne, eg: probleme appel CURL' + ]; +} diff --git a/app/Enums/Shop/ContactFormCivility.php b/app/Enums/Shop/ContactFormCivility.php new file mode 100644 index 00000000..768a4977 --- /dev/null +++ b/app/Enums/Shop/ContactFormCivility.php @@ -0,0 +1,23 @@ +name => 'M', + self::mme->name => 'Mme', + ]; +} diff --git a/app/Enums/Shop/OrderStatus.php b/app/Enums/Shop/OrderStatus.php new file mode 100644 index 00000000..7e884f46 --- /dev/null +++ b/app/Enums/Shop/OrderStatus.php @@ -0,0 +1,29 @@ +name => 'En attente', + self::failed->name => 'Échec', + self::payed->name => 'Réglée', + self::waitingCheck->name => 'En attente du chèque bancaire', + self::sentCheck->name => 'Envoi du chèque bancaire', + ]; +} diff --git a/app/Enums/Shop/OrderType.php b/app/Enums/Shop/OrderType.php new file mode 100644 index 00000000..b3eca52c --- /dev/null +++ b/app/Enums/Shop/OrderType.php @@ -0,0 +1,23 @@ +name => 'Carte Bancaire', + self::check->name => 'Chèque', + ]; +} diff --git a/app/Exceptions/CBPayementError.php b/app/Exceptions/CBPayementError.php new file mode 100644 index 00000000..d1b48a2c --- /dev/null +++ b/app/Exceptions/CBPayementError.php @@ -0,0 +1,11 @@ + 2020) + */ +class CBPayementError extends Exception {} diff --git a/app/Http/Controllers/Club/ShopController.php b/app/Http/Controllers/Club/ShopController.php index 11f19492..c9a20e15 100644 --- a/app/Http/Controllers/Club/ShopController.php +++ b/app/Http/Controllers/Club/ShopController.php @@ -2,30 +2,455 @@ namespace App\Http\Controllers\Club; +use App\Enums\Customers\Civility; +use App\Enums\Mercanet\PaymentResponse; +use App\Enums\Mercanet\RedirectionStatusCode; +use App\Enums\Mercanet\TransactionResponse; +use App\Enums\Shop\OrderStatus; +use App\Enums\Shop\OrderType; +use App\Exceptions\CBPayementError; use App\Http\Controllers\Controller; +use App\Http\Requests\Club\Shop\ShopBuyRequest; +use App\Jobs\Arcadia\SendOrderToArcadia; +use App\Jobs\Shop\SendShopMail; +use App\Lib\Mercanet\Mercanet; +use App\Models\DeliveryAddress; +use App\Models\Notification; +use App\Models\Order; +use App\Models\SellItem; +use Exception; +use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Database\QueryException; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; class ShopController extends Controller { /** - * Show index page + * Shop index. * * @return \Illuminate\Contracts\View\View */ public function index(): \Illuminate\Contracts\View\View { - return view('club.pages.shop.index'); + $sellItemModels = SellItem::all(); + return view('club.pages.shop.index', compact('sellItemModels')); } /** - * Show index page + * Ajax service to validate transaction details. * - * @return \Illuminate\Contracts\View\View + * @param \App\Http\Requests\Club\Shop\ShopBuyRequest $request + * @return \Illuminate\Http\JsonResponse + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh */ - public function create(): \Illuminate\Contracts\View\View + public function validateBuy(ShopBuyRequest $request): \Illuminate\Http\JsonResponse { - /** @var \App\Models\Customer $customerModel */ - $customerModel = auth('club')->user(); - $crmCustomer = $customerModel->api_data; - return view('club.pages.shop.recap', compact('crmCustomer')); + // phpcs:enable + /** @var \App\Models\Customer */ + $customerModel = auth('club')->user(); + $items = []; + $orderTotalPrice = 0; + foreach ($request->cart as $item) { + $sellItem = SellItem::query()->where('id', $item['item']['id'])->firstOrFail(); + $items[] = [ + 'id' => $sellItem->id, + 'name' => $sellItem->name, + 'quantity' => $item['count'], + 'unitPrice' => $sellItem->price, + 'totalPrice' => $item['count'] * $sellItem->price, + 'subject' => $sellItem->arcadia_id + ]; + $orderTotalPrice += $item['count'] * $sellItem->price; + } + + // * Pseudo mutex let database fail (unique ref) to check if order has already been processed + try { + $order = new Order(); + $order->ref = str_replace('-', '', $request->ref); + $order->civility = Civility::make(intval($request->civility)); + $order->payementType = OrderType::make(intval($request->payementMethod)); + $order->status = OrderStatus::waiting; + $order->customer_id = $customerModel->getKey(); + $order->fill($request->coords); + $order->saveOrFail(); + } catch (QueryException $e) { + $order = Order::query()->where('ref', str_replace('-', '', $request->ref))->firstOrFail(); + if ($order->payementType->equals(OrderType::check)) { + return response()->json(['redirect' => route( + 'club.shop.validated', + compact('order') + )]); + } + // FIXME: uncomment when mercanet cb is ready. + // if ($order->payementType->equals(OrderType::cb)) { + // return response()->json(['redirect' => route( + // 'club.shop.payementCB', + // compact('order') + // )]); + // } + abort(500, sprintf('Order already exists but type is unkown %d', $order->id)); + } //end try + + $order->customer()->associate($customerModel); + + foreach ($items as $item) { + $order->sellItems()->withTimestamps()->attach($item['id'], ['quantity' => $item['quantity']]); + } + $order->saveOrFail(); + + if ($request->shipping) { + $shipping = new DeliveryAddress(); + $shipping->fill($request->shipping); + $shipping->order()->associate($order); + $shipping->saveOrFail(); + } + + switch ($request->payementMethod) { + // FIXME: uncomment when mercanet cb is ready. + // case OrderType::cb->value(): + // \session()->put(sprintf('shop.order.%d.time', $order->id), \time()); + // \session()->save(); + // return response()->json(['redirect' => route('club.shop.payementCB', compact('order'))]); + case OrderType::check->value(): + try { + \session()->put(sprintf('shop.order.%d.time', $order->id), \time()); + \session()->save(); + SendOrderToArcadia::dispatch($order); + SendShopMail::dispatch($order); + $order->status = OrderStatus::waitingCheck; + $order->saveOrFail(); + } catch (Exception $e) { + report($e); + Log::critical(sprintf( + 'Could not end customer transaction (save and send mail) in shop for order %d, %s', + $order->id, + $e->getMessage() + )); + } finally { + return response()->json(['redirect' => route('club.shop.validated', compact('order'))]); + } + break; + // * not used + default: + abort(422); + } //end switch + } + + /** + * Redirection After Ajax validate. + * + * @param \App\Models\Order $order + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Contracts\View\View + */ + public function validatedBuy(Order $order): \Illuminate\Http\RedirectResponse|\Illuminate\Contracts\View\View + { + Notification::getNotifications(); + $time = session()->get(sprintf('shop.order.%d.time', $order->id), 0); + if (!($order->status->equals(OrderStatus::payed) || $order->status->equals(OrderStatus::waitingCheck))) { + return response()->redirectToRoute('club.shop.index'); + } + // 4 minutes + if (($time + (60 * 4)) < \time()) { + return response()->redirectToRoute('club.shop.index'); + } + + return view('club.pages.shop.validated'); + } + + /** + * Pay with CB. + * + * @param \App\Models\Order $order + * @return \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse + * @throws \App\Exceptions\CBPayementError Error response from Mercanet Lib. + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh + */ + public function payWithCb(Order $order): \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse + { + // phpcs:enable + Notification::getNotifications(); + try { + $time = session()->get(sprintf('shop.order.%d.time', $order->id), 0); + if ($order->status->equals(OrderStatus::failed)) { + return view('club.pages.shop.error') + ->with('error', trans('Commande annulée, veuillez réessayer')); + } + + // 4 minutes + if (($time + (60 * 4)) < \time()) { + return view('club.pages.shop.error') + ->with('error', trans('Délai d\'attente expiré, veuillez réessayer')); + } + + $totalToPay = $order->sellItems->map(function ($sellItem) { + return $sellItem->pivot->quantity * $sellItem->price; + })->sum(); + + // * Convert total in cents + $totalToPay = (int)(\number_format((float)$totalToPay, 2) * 100); + + $mercanet = $this->getMercanet($order); + + $payment = $mercanet->QuickPayment($totalToPay, $order->ref); + + switch ($payment->code) { + case RedirectionStatusCode::redirect->value(): + return view('club.pages.shop.redirectMercanet', [ + 'url' => $payment->url, + 'data' => $payment->data, + 'version' => $payment->version + ]); + case RedirectionStatusCode::referenceAlreadyUsed: + return response()->redirectToRoute('club.shop.index'); + case RedirectionStatusCode::requestError03->value(): + case RedirectionStatusCode::requestError12->value(): + case RedirectionStatusCode::requestError30->value(): + case RedirectionStatusCode::requestError34->value(): + case RedirectionStatusCode::serviceDisponibiltyIssue->value(): + $order->status = OrderStatus::failed; + $order->save(); + throw new CBPayementError(sprintf( + "Error response from Mercanet Lib : %s\n %s", + RedirectionStatusCode::make(intval($payment->code))->label(), + json_encode($payment) + )); + default: + $order->status = OrderStatus::failed; + $order->save(); + throw new CBPayementError(sprintf( + 'Un handled response from Mercanet Lib %s', + json_encode($payment) + )); + } //end switch + } catch (ModelNotFoundException | CBPayementError $e) { + report($e); + Log::critical(sprintf( + 'Could not end customer transaction in boutique for order %d, %s', + $order->id, + $e->getMessage() + )); + return view('club.pages.shop.error') + ->with('error', trans('La commande que vous venez de passer n\'a pu aboutir, veuillez réessayer')); + } //end try + } + + /** + * Pas de validate ou custom request sur la réponse de mercanet, + * c'est la Lib mercanet qui fait. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\Order $order + * @return \Illuminate\Http\Response|\Illuminate\Contracts\Routing\ResponseFactory + * @throws \App\Exceptions\CBPayementError Data were altered from response. + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh + */ + public function confirmCbFromMercanet( + Request $request, + Order $order + ): \Illuminate\Http\Response|\Illuminate\Contracts\Routing\ResponseFactory { + // phpcs:enable + try { + \extract($this->getMercanetData($request)); + + /** @var \App\Models\Order */ + $order = Order::query()->where('ref', $ref)->firstOrFail(); + + $mercanet = $this->getMercanet($order); + $mercanet->setResponse($request->post()); + + if (!$mercanet->isValid()) { + $order->status = OrderStatus::failed; + $order->save(); + throw new CBPayementError('Data were altered from response'); + } + + switch ($responseCode) { + case TransactionResponse::accepted: + $order->status = OrderStatus::payed; + $order->save(); + SendOrderToArcadia::dispatch($order); + SendShopMail::dispatch($order); + break; + case TransactionResponse::canceled: + case TransactionResponse::expired: + case TransactionResponse::refused: + case TransactionResponse::fraud: + case TransactionResponse::duplicate: + case TransactionResponse::maxReached: + if ( + !$order->confirmMailSent and + !$order->status->equals(OrderStatus::payed) + ) { + $order->status = OrderStatus::failed; + $order->save(); + } + break; + case TransactionResponse::technicalIssue: + throw new CBPayementError(sprintf( + 'Error from Mercanet Server %s on ref %s, %s', + $responseCode, + $ref, + json_encode($returnDatas) + )); + default: + // * ERROR + if ( + !$order->confirmMailSent and + !$order->status->equals(OrderStatus::payed) + ) { + $order->status = OrderStatus::failed; + $order->save(); + } + throw new CBPayementError(sprintf( + 'Un handled response from Mercanet Server %s on ref %s', + $responseCode, + $ref, + json_encode($returnDatas) + )); + } //end switch + } catch (ModelNotFoundException | CBPayementError | \Exception $e) { + report($e); + Log::critical(sprintf( + 'Could not end customer transaction in boutique for order %d, %s', + $order->id, + $e->getMessage() + )); + } finally { + return response('', 200); + } //end try + } + + /** + * + * Pas de validate ou custom request sur la réponse de mercanet, + * c'est la Lib mercanet qui fait. + * + * @param Request $request + * @param Order $order + * @return \Illuminate\Contracts\View\View + * @throws \App\Exceptions\CBPayementError Data were altered from response. + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh + */ + public function confirmCb(Request $request, Order $order): \Illuminate\Contracts\View\View + { + // phpcs:enable + Notification::getNotifications(); + try { + if ($order->status->equals(OrderStatus::failed)) { + return view('club.pages.shop.error'); + } + if ($order->status->equals(OrderStatus::payed)) { + return view('club.pages.shop.validated'); + } + + $mercanet = $this->getMercanet($order); + $mercanet->setResponse($request->post()); + + if (!$mercanet->isValid()) { + try { + $order->status = OrderStatus::failed; + $order->saveOrFail(); + } finally { + throw new CBPayementError("Data were altered from response"); + } + } + + \extract($this->getMercanetData($request)); + + switch ($responseCode) { + case PaymentResponse::ok: + try { + $status = $order->status; + $order->status = OrderStatus::payed; + $order->saveOrFail(); + + if ($status->equals(OrderStatus::waiting)) { + SendOrderToArcadia::dispatch($order); + SendShopMail::dispatch($order); + } + } catch (Exception $e) { + report($e); + Log::critical(sprintf( + 'Could not end customer transaction (save and send mail) in boutique for order %d, %s', + $order->id, + $e->getMessage() + )); + } finally { + return view('club.pages.shop.validated'); + } + case PaymentResponse::canceled: + $order->status = OrderStatus::failed; + $order->saveOrFail(); + return view('club.pages.shop.error'); + case PaymentResponse::invalidIds: + case PaymentResponse::invalidRequestFormat: + case PaymentResponse::invalidParameters: + case PaymentResponse::unreachableService: + case PaymentResponse::securityIssue: + case PaymentResponse::transactionAlreadyExists: + case PaymentResponse::expired: + case PaymentResponse::internalIssue: + $order->status = OrderStatus::failed; + $order->saveOrFail(); + throw new CBPayementError(sprintf( + "Error response from Mercanet Lib : %s\n %s", + PaymentResponse::make($responseCode)->label, + json_encode($returnDatas) + )); + default: + $order->status = OrderStatus::failed; + $order->save(); + throw new CBPayementError(sprintf( + 'Un handled response from Mercanet Lib %s', + json_encode($returnDatas) + )); + } //end switch + } catch (ModelNotFoundException | CBPayementError $e) { + report($e); + Log::critical(sprintf( + 'Could not end customer transaction in boutique for order %d, %s', + $order->id, + $e->getMessage() + )); + return view('club.pages.shop.error'); + } //end try + } + + /** + * Get initialized Mercanet object. + * + * @param \App\Models\Order $order + * @return \App\Lib\Mercanet\Mercanet + */ + private function getMercanet(Order $order): \App\Lib\Mercanet\Mercanet + { + return new Mercanet( + config('mercanet.secret'), + config('mercanet.merchantId'), + config('mercanet.env'), + route('club.shop.reglement.payementConfirmCB', $order), + route('club.shop.reglement.payementConfirmCBServ', $order) + ); + } + + /** + * Get Mercanet ref and responseCode for request. + * + * @param \Illuminate\Http\Request $request + * @return array array['ref' => 'value', 'responseCode' => 'value'] + */ + private function getMercanetData(Request $request): array + { + $formDatas = []; + $returnDatas = explode("|", $request->post('Data')); + foreach ($returnDatas as $item) { + $tmp = explode("=", $item); + $formDatas[$tmp[0]] = $tmp[1]; + } + + $ref = $formDatas['transactionReference']; + $responseCode = $formDatas['responseCode']; + return compact('ref', 'responseCode', 'returnDatas'); } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index b0e39a22..5a266747 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -70,7 +70,6 @@ class Kernel extends HttpKernel 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'htmlsanitize' => \App\Http\Middleware\HtmlSanitizer::class, ]; } diff --git a/app/Http/Middleware/EnsureEmailIsVerified.php b/app/Http/Middleware/EnsureEmailIsVerified.php new file mode 100644 index 00000000..23c9f6dd --- /dev/null +++ b/app/Http/Middleware/EnsureEmailIsVerified.php @@ -0,0 +1,59 @@ +user(); + + if ($customerModel instanceof MustVerifyEmail) { + $crmCustomer = CrmCustomer::findWithEmail($customerModel->email); + // Check there is a crm customer. + if (!$crmCustomer) { + $customerModel->delete(); + } else { + // Check the status of crm customer & customer model. + if ($crmCustomer->status !== $customerModel->hasVerifiedEmail()) { + $customerModel->email_verified_at = $crmCustomer->status ? Carbon::now() : null; + $customerModel->saveOrFail(); + } + if (!$crmCustomer->status && !$customerModel->hasVerifiedEmail()) { + return $request->expectsJson() + ? abort(403, 'Your email address is not verified.') + : Redirect::guest(URL::route($redirectToRoute ?: 'club.verification.notice')); + } + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/XssSanitizer.php b/app/Http/Middleware/XssSanitizer.php new file mode 100644 index 00000000..a034761a --- /dev/null +++ b/app/Http/Middleware/XssSanitizer.php @@ -0,0 +1,35 @@ +all(); + array_walk_recursive($inputs, function (&$input, $name) use ($params) { + if (in_array($name, $params)) { + $input = clean($input); + $input = ToolboxHelper::assertNoInternalUrls($name, $input); + } else { + $input = strip_tags($input); + } + }); + $request->merge($inputs); + return $next($request); + } +} diff --git a/app/Http/Requests/Club/Shop/ShopBuyRequest.php b/app/Http/Requests/Club/Shop/ShopBuyRequest.php new file mode 100644 index 00000000..2b7b2f21 --- /dev/null +++ b/app/Http/Requests/Club/Shop/ShopBuyRequest.php @@ -0,0 +1,110 @@ +ajax() ? true : false; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'ref' => 'required|string|uuid|unique:orders,ref', + 'coords' => 'required|array', + 'coords.civility' => ['required', new Enum(ContactFormCivility::class)], + 'coords.firstname' => 'required|string|between:3,255', + 'coords.lastname' => 'required|string|between:3,255', + 'coords.address' => 'required|string|between:3,255', + 'coords.postcode' => 'required|postal_code:FR', + 'coords.city' => 'required|string|between:3,255', + 'coords.phone' => 'nullable|phone:FR|max:255', + 'coords.email' => 'required|email:rfc,strict,dns,spoof,filter', + 'shipping' => 'sometimes|array', + 'shipping.civility' => ['required_with:shipping', new Enum(ContactFormCivility::class)], + 'shipping.firstname' => 'required_with:shipping|string|between:3,255', + 'shipping.lastname' => 'required_with:shipping|string|between:3,255', + 'shipping.address' => 'required_with:shipping|string|between:3,255', + 'shipping.postcode' => 'required_with:shipping|postal_code:FR', + 'shipping.city' => 'required_with:shipping|string|between:3,255', + 'shipping.phone' => 'nullable|phone:FR|max:255', + 'cart' => 'required|array', + 'cart.*' => 'required|distinct|min:1', + 'cart.*.count' => 'required|numeric|min:1', + 'cart.*.item.id' => 'required|numeric|exists:sell_items,id', + 'payementMethod' => ['required', new Enum(OrderType::class)] + ]; + } + + /** + * Get custom attributes for validator errors. + * + * @return array + */ + public function attributes(): array + { + return [ + 'coords' => trans('vos coordonnées'), + 'coords.civility' => trans('civilité dans vos coordonnées'), + 'coords.firstname' => trans('prénom dans vos coordonnées'), + 'coords.lastname' => trans('nom dans vos coordonnées'), + 'coords.address' => trans('adresse dans vos coordonnées'), + 'coords.postcode' => trans('code postal dans vos coordonnées'), + 'coords.phone' => trans('téléphone dans vos coordonnées'), + 'coords.city' => trans('ville dans vos coordonnées'), + 'coords.email' => trans('e-mail dans vos coordonnées'), + 'shipping' => trans('votre adresse de livraison'), + 'shipping.civility' => trans('civilité dans votre adresse de livraison'), + 'shipping.firstname' => trans('prénom dans votre adresse de livraison'), + 'shipping.lastname' => trans('nom dans votre adresse de livraison'), + 'shipping.address' => trans('adresse dans votre adresse de livraison'), + 'shipping.postcode' => trans('code postal dans votre adresse de livraison'), + 'shipping.phone' => trans('téléphone dans votre adresse de livraison'), + 'shipping.city' => trans('ville dans votre adresse de livraison'), + 'cart' => trans('panier'), + 'cart.*' => trans('panier'), + 'cart.*.count' => trans('nombre d\'éléments dans le panier'), + 'cart.*.item.id' => trans('élément dans le panier'), + ]; + } + + /** + * Get custom messages for validator errors. + * + * @return array + */ + public function messages(): array + { + return [ + 'coords.postcode.postal_code' => trans( + 'Le champ :attribute accepte les codes postaux des pays suivants :countries (exemple: :examples).' + ), + 'shipping.postcode.postal_code' => trans( + 'Le champ :attribute accepte les codes postaux des pays suivants :countries (exemple: :examples).' + ), + 'coords.phone.phone' => trans( + 'Le champ :attribute est invalide, il accepte les numéros des pays suivants France.' + ), + 'shipping.phone.phone' => trans( + 'Le champ :attribute est invalide, il accepte les numéros des pays suivants France.' + ) + ]; + } +} diff --git a/app/Jobs/Arcadia/SendHasOrderedAnItemMail.php b/app/Jobs/Arcadia/SendHasOrderedAnItemMail.php new file mode 100644 index 00000000..1024c8b1 --- /dev/null +++ b/app/Jobs/Arcadia/SendHasOrderedAnItemMail.php @@ -0,0 +1,51 @@ +itemData = $itemData; + } + + /** + * Execute the job. + * + * @return void + * @throws \RuntimeException If no config email is set. + */ + public function handle(): void + { + $emailTo = \config('arcadia.item_ordered_email_to'); + if (empty($emailTo)) { + throw new \RuntimeException('Empty arcadia.item_ordered_email_to config, could not send mail'); + } + Mail::queueOn('database', (new HasOrderedAnItem($this->itemData))->to($emailTo)); + } +} diff --git a/app/Jobs/Arcadia/SendOrderToArcadia.php b/app/Jobs/Arcadia/SendOrderToArcadia.php new file mode 100644 index 00000000..384c56fa --- /dev/null +++ b/app/Jobs/Arcadia/SendOrderToArcadia.php @@ -0,0 +1,65 @@ +order = $order; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(): void + { + /** @var \App\Models\Order|\App\Models\DeliveryAddress */ + $deliver = $this->order->deliveryAddress()->exists() ? $this->order->deliveryAddress : $this->order; + $this->order->sellItems->each(function (SellItem $sellItem) use ($deliver) { + for ($i = 0; $i < $sellItem->pivot->quantity; $i++) { + \dispatch(new SendHasOrderedAnItemMail( + new HasOrderedAnItemData( + $this->order, + $sellItem, + $deliver->firstname, + $deliver->lastname, + $deliver->address, + null, + $deliver->city, + $deliver->postcode, + $deliver->phone + ) + ))->onConnection('database')->onQueue('database'); + } //end for + }); + + Log::debug(sprintf('Order %d sent to arcadia', $this->order->id)); + } +} diff --git a/app/Jobs/Shop/SendShopMail.php b/app/Jobs/Shop/SendShopMail.php new file mode 100644 index 00000000..eecd71bb --- /dev/null +++ b/app/Jobs/Shop/SendShopMail.php @@ -0,0 +1,54 @@ +order = $order; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(): void + { + if (!$this->order->confirmMailSent) { + /** @var \App\Models\Customer $customerModel */ + $customerModel = $this->order->customer; + $customerModel->notify(new NewOrder($this->order)); + + $this->order->confirmMailSent = true; + $this->order->saveOrFail(); + Log::debug('Shop mail is sent', $this->order->toArray()); + } else { + Log::debug('Shop mail is already sent', $this->order->toArray()); + } + } +} diff --git a/app/Lib/Arcadia/HasOrderedAnItemData.php b/app/Lib/Arcadia/HasOrderedAnItemData.php new file mode 100644 index 00000000..17494771 --- /dev/null +++ b/app/Lib/Arcadia/HasOrderedAnItemData.php @@ -0,0 +1,145 @@ +properties)) { + return $this->data[$name]; + } + throw new \Error("Cannot access property {$name} it dos not exists"); + } + + /** + * Has ordered an item data. + * + * @param \App\Models\Order $order + * @param \App\Models\SellItem $sellItem + * @param string $firstname + * @param string $lastname + * @param string $address + * @param string|null $address2 + * @param string $city + * @param string $postcode + * @param string|null $phone + * @return void + */ + public function __construct( + Order $order, + SellItem $sellItem, + string $firstname, + string $lastname, + string $address, + ?string $address2, + string $city, + string $postcode, + ?string $phone + ) { + $this->data = [ + 'operation' => \intval(env('BOUTIQUE_ARCADIA_OP_CODE', 16)), + 'support_code' => $sellItem->arcadia_id, + 'label_type_support' => $sellItem->name, + 'order_date' => $order->created_at, + 'order_num' => $order->id, + 'state_order' => ArcadiaOrderType::check->value(), + // FIXME: uncomment when mercanet cb is ready. + // 'state_order' => $order->payementType->equals(OrderType::cb) ? + // ArcadiaOrderType::cb->value() : ArcadiaOrderType::check->value(), + 'package_unit_weight' => $sellItem->arcadia_weight, + 'email' => $order->email, + 'firstname' => $firstname, + 'lastname' => $lastname, + 'address' => $address, + 'address2' => $address2, + 'city' => $city, + 'postcode' => $postcode, + 'phone' => $phone + ]; + } + + /** + * Convert the object to its JSON representation. + * + * @param integer $options + * @return string + * @phpcs:disable Squiz.Commenting.FunctionComment.ScalarTypeHintMissing + */ + public function toJson($options = 0): string + { + // phpcs:enable + return \json_encode($this->toArray(), $options); + } + + /** + * Get the instance as an array. + * + * @return array + */ + public function toArray(): array + { + return $this->data; + } +} diff --git a/app/Lib/Mercanet/Mercanet.php b/app/Lib/Mercanet/Mercanet.php new file mode 100644 index 00000000..9ed355ee --- /dev/null +++ b/app/Lib/Mercanet/Mercanet.php @@ -0,0 +1,1131 @@ + */ + private $brandsmap = [ + 'ACCEPTGIRO' => 'CREDIT_TRANSFER', + 'AMEX' => 'CARD', + 'BCMC' => 'CARD', + 'BUYSTER' => 'CARD', + 'BANK CARD' => 'CARD', + 'CB' => 'CARD', + 'IDEAL' => 'CREDIT_TRANSFER', + 'INCASSO' => 'DIRECT_DEBIT', + 'MAESTRO' => 'CARD', + 'MASTERCARD' => 'CARD', + 'MASTERPASS' => 'CARD', + 'MINITIX' => 'OTHER', + 'NETBANKING' => 'CREDIT_TRANSFER', + 'PAYPAL' => 'CARD', + 'PAYLIB' => 'CARD', + 'REFUND' => 'OTHER', + 'SDD' => 'DIRECT_DEBIT', + 'SOFORT' => 'CREDIT_TRANSFER', + 'VISA' => 'CARD', + 'VPAY' => 'CARD', + 'VISA ELECTRON' => 'CARD', + 'CBCONLINE' => 'CREDIT_TRANSFER', + 'KBCONLINE' => 'CREDIT_TRANSFER' + ]; + + private $secretKey; + + private $env; + + /** @var string $returnUrl */ + private $returnUrl; + + /** @var boolean|string */ + private $automaticUrl = false; + + private $pspURL = self::DEVELOPMENT; + + /** @var string */ + private $responseData; + + /** @var array */ + private $parameters = []; + + /** @var array */ + private $pspFields = [ + 'amount', + 'cardExpiryDate', + 'cardNumber', + 'cardCSCValue', + 'currencyCode', + 'merchantId', + 'interfaceVersion', + 'sealAlgorithm', + 'transactionReference', + 'keyVersion', + 'paymentMeanBrand', + 'customerLanguage', + 'billingAddress.city', + 'billingAddress.company', + 'billingAddress.country', + 'billingAddress', + 'billingAddress.postBox', + 'billingAddress.state', + 'billingAddress.street', + 'billingAddress.streetNumber', + 'billingAddress.zipCode', + 'billingContact.email', + 'billingContact.firstname', + 'billingContact.gender', + 'billingContact.lastname', + 'billingContact.mobile', + 'billingContact.phone', + 'customerAddress', + 'customerAddress.city', + 'customerAddress.company', + 'customerAddress.country', + 'customerAddress.postBox', + 'customerAddress.state', + 'customerAddress.street', + 'customerAddress.streetNumber', + 'customerAddress.zipCode', + 'customerEmail', + 'customerContact', + 'customerContact.email', + 'customerContact.firstname', + 'customerContact.gender', + 'customerContact.lastname', + 'customerContact.mobile', + 'customerContact.phone', + 'customerContact.title', + 'expirationDate', + 'automaticResponseUrl', + 'templateName', + 'paymentMeanBrandList', + 'instalmentData.number', + 'instalmentData.datesList', + 'instalmentData.transactionReferencesList', + 'instalmentData.amountsList', + 'paymentPattern', + 'captureDay', + 'captureMode', + 'merchantTransactionDateTime', + 'fraudData.bypass3DS', + 'seal', + 'orderChannel', + 'orderId', + 'returnContext', + 'transactionOrigin', + 'merchantWalletId', + 'paymentMeanId' + ]; + + /** @var array */ + private $requiredFields = [ + 'amount', + 'currencyCode', + 'interfaceVersion', + 'keyVersion', + 'merchantId', + 'normalReturnUrl', + 'orderChannel', + 'transactionReference' + ]; + + /** @var array */ + public $allowedlanguages = [ + 'nl', + 'fr', + 'de', + 'it', + 'es', + 'cy', + 'en' + ]; + + /** @var array */ + private static $currencies = [ + 'EUR' => '978', + 'USD' => '840', + 'CHF' => '756', + 'GBP' => '826', + 'CAD' => '124', + 'JPY' => '392', + 'MXP' => '484', + 'TRY' => '949', + 'AUD' => '036', + 'NZD' => '554', + 'NOK' => '578', + 'BRC' => '986', + 'ARP' => '032', + 'KHR' => '116', + 'TWD' => '901', + 'SEK' => '752', + 'DKK' => '208', + 'KRW' => '410', + 'SGD' => '702', + 'XPF' => '953', + 'XOF' => '952' + ]; + + public function __construct($secret, $MerchantId, $env, $returnUrl, $automaticUrl = false) + { + $this->secretKey = $secret; + $this->parameters['merchantId'] = $MerchantId; + $this->env = $env; + $this->returnUrl = $returnUrl; + if ($automaticUrl !== false) { + $this->automaticUrl = $automaticUrl; + } + + switch ($this->env) { + case 'DEVELOPMENT': + $this->setUrl(Mercanet::DEVELOPMENT); + break; + case 'PRODUCTION': + $this->setUrl(Mercanet::PRODUCTION); + break; + } + } + + public static function convertCurrencyToCurrencyCode($currency) + { + if (!in_array($currency, array_keys(self::$currencies))) { + throw new InvalidArgumentException("Unknown currencyCode $currency."); + } + return self::$currencies[$currency]; + } + + public static function convertCurrencyCodeToCurrency($code) + { + if (!in_array($code, array_values(self::$currencies))) { + throw new InvalidArgumentException("Unknown Code $code."); + } + return array_search($code, self::$currencies); + } + + /** + * Get currencies. + * + * @return array + */ + public static function getCurrencies(): array + { + return self::$currencies; + } + + /** + * Sha compose. + * + * @param array $parameters + * @return string + */ + public function shaCompose(array $parameters): string + { + $shaString = ''; + foreach ($parameters as $key => $value) { + if ($key != 'keyVersion' && $key != 'sealAlgorithm') { + $shaString .= (is_array($value)) ? implode('', $value) : $value; + } + } + return $shaString; + } + + /** + * Get sha sign. + * + * @return string + */ + public function getShaSign(): string + { + $this->validate(); + return hash_hmac('sha256', utf8_encode($this->shaCompose($this->toArray())), $this->secretKey); + } + + /** + * Get url. + * + * @return string + */ + public function getUrl(): string + { + return $this->pspURL; + } + + /** + * Set url. + * + * @param string $pspUrl + * @return void + */ + public function setUrl(string $pspUrl): void + { + $this->validateUri($pspUrl); + $this->pspURL = $pspUrl; + } + + /** + * Set normal return url. + * + * @param string $url + * @return void + */ + public function setNormalReturnUrl(string $url): void + { + $this->validateUri($url); + $this->parameters['normalReturnUrl'] = $url; + } + + /** + * Set automatic response url. + * + * @param string $url + * @return void + */ + public function setAutomaticResponseUrl(string $url): void + { + $this->validateUri($url); + $this->parameters['automaticResponseUrl'] = $url; + } + + /** + * Set automatic response url. + * + * @param string $url + * @return void + */ + public function setTransactionReference(string $transactionReference): void + { + if (preg_match('/[^a-zA-Z0-9_-]/', $transactionReference)) { + throw new \InvalidArgumentException("TransactionReference cannot contain special characters"); + } + $this->parameters['transactionReference'] = $transactionReference; + } + + /** + * Set amount in cents, eg EUR 12.34 is written as 1234. + * + * @param mixed $amount + * @return void + */ + public function setAmount(mixed $amount): void + { + if (!is_int($amount)) { + throw new InvalidArgumentException("Integer expected. Amount is always in cents"); + } + if ($amount <= 0) { + throw new InvalidArgumentException("Amount must be a positive number"); + } + $this->parameters['amount'] = "$amount"; + } + + /** + * Set currency. + * + * @param string $currency + * @return void + */ + public function setCurrency(string $currency): void + { + if (!array_key_exists(strtoupper($currency), self::getCurrencies())) { + throw new InvalidArgumentException("Unknown currency"); + } + $this->parameters['currencyCode'] = self::convertCurrencyToCurrencyCode($currency); + } + + /** + * Set language. + * + * @param string $language + * @return void + */ + public function setLanguage(string $language): void + { + if (!in_array($language, $this->allowedlanguages)) { + throw new InvalidArgumentException("Invalid language locale"); + } + $this->parameters['customerLanguage'] = $language; + } + + /** + * Set customer email. + * + * @param string $email + * @return void + */ + public function setCustomerEmail(string $email): void + { + $this->parameters['customerEmail'] = $email; + } + + /** + * Set payment brands. + * + * @param array $brands + * @return void + */ + public function setPaymentBrands(array $brands): void + { + $this->parameters['paymentMeanBrandList'] = ''; + foreach ($brands as $brand) { + if (!array_key_exists(strtoupper($brand), $this->brandsmap)) { + throw new InvalidArgumentException("Unknown Brand [$brand]."); + } + } + $this->parameters['paymentMeanBrandList'] = $brands; + } + + /** + * Set billing contacte email. + * + * @param string $email + * @return void + */ + public function setBillingContactEmail(string $email): void + { + if (strlen($email) > 50) { + throw new InvalidArgumentException("Email is too long"); + } + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + throw new InvalidArgumentException("Email is invalid"); + } + $this->parameters['billingContact.email'] = $email; + } + + /** + * Set billing address street. + * + * @param string $street + * @return void + */ + public function setBillingAddressStreet(string $street): void + { + if (strlen($street) > 35) { + throw new InvalidArgumentException("street is too long"); + } + $this->parameters['billingAddress.street'] = Normalizer::normalize($street); + } + + /** + * Set billing address street number. + * + * @param string $nr + * @return void + */ + public function setBillingAddressStreetNumber(string $nr): void + { + if (strlen($nr) > 10) { + throw new InvalidArgumentException("streetNumber is too long"); + } + $this->parameters['billingAddress.streetNumber'] = Normalizer::normalize($nr); + } + + /** + * Set billing address zip code. + * + * @param string $zipCode + * @return void + */ + public function setBillingAddressZipCode(string $zipCode): void + { + if (strlen($zipCode) > 10) { + throw new InvalidArgumentException("zipCode is too long"); + } + $this->parameters['billingAddress.zipCode'] = Normalizer::normalize($zipCode); + } + + /** + * Set billing address city. + * + * @param string $city + * @return void + */ + public function setBillingAddressCity(string $city): void + { + if (strlen($city) > 25) { + throw new InvalidArgumentException("city is too long"); + } + $this->parameters['billingAddress.city'] = Normalizer::normalize($city); + } + + /** + * Set billing contact phone. + * + * @param string $phone + * @return void + */ + public function setBillingContactPhone(string $phone): void + { + if (strlen($phone) > 30) { + throw new InvalidArgumentException("phone is too long"); + } + $this->parameters['billingContact.phone'] = $phone; + } + + /** + * Set billing contact firstname. + * + * @param string $firstname + * @return void + */ + public function setBillingContactFirstname(string $firstname): void + { + // replace quotes + $this->parameters['billingContact.firstname'] = str_replace( + array("'", '"'), + '', + Normalizer::normalize($firstname) + ); + } + + /** + * Set billing contact lastname. + * + * @param string $lastname + * @return void + */ + public function setBillingContactLastname(string $lastname): void + { + // replace quotes + $this->parameters['billingContact.lastname'] = str_replace( + array("'", '"'), + '', + Normalizer::normalize($lastname) + ); + } + + /** + * Set capture day. + * + * @param string $number + * @return void + */ + public function setCaptureDay(string $number): void + { + if (strlen($number) > 2) { + throw new InvalidArgumentException("captureDay is too long"); + } + $this->parameters['captureDay'] = $number; + } + + /** + * Set capture mode. + * + * @param string $value + * @return void + */ + public function setCaptureMode(string $value): void + { + if (strlen($value) > 20) { + throw new InvalidArgumentException("captureMode is too long"); + } + $this->parameters['captureMode'] = $value; + } + + /** + * Set merchant transaction date time. + * + * @param string $value + * @return void + */ + public function setMerchantTransactionDateTime(string $value): void + { + if (strlen($value) > 25) { + throw new InvalidArgumentException("merchantTransactionDateTime is too long"); + } + $this->parameters['merchantTransactionDateTime'] = $value; + } + + /** + * Set interface version. + * + * @param string $value + * @return void + */ + public function setInterfaceVersion(string $value): void + { + $this->parameters['interfaceVersion'] = $value; + } + + /** + * setkeyVersion method + * + * @param string $version + * @return void + */ + public function setKeyVersion(string $version): void + { + $this->parameters['keyVersion'] = $version; + } + + /** + * Set seal algorithm. + * + * @param string $value + * @return void + */ + public function setSealAlgorithm(string $value): void + { + $this->parameters['sealAlgorithm'] = $value; + } + + /** + * Set seal algorithm. + * + * @param string $value + * @return void + */ + public function setOrderChannel(string $value): void + { + if (strlen($value) > 20) { + throw new InvalidArgumentException("orderChannel is too long"); + } + $this->parameters['orderChannel'] = $value; + } + + /** + * Set order id. + * + * @param string $value + * @return void + */ + public function setOrderId(string $value): void + { + if (strlen($value) > 32) { + throw new InvalidArgumentException("orderId is too long"); + } + $this->parameters['orderId'] = $value; + } + + /** + * Set return context. + * + * @param string $value + * @return void + */ + public function setReturnContext(string $value): void + { + if (strlen($value) > 255) { + throw new InvalidArgumentException("returnContext is too long"); + } + $this->parameters['returnContext'] = $value; + } + + /** + * Set transaction origin. + * + * @param string $value + * @return void + */ + public function setTransactionOrigin(string $value): void + { + if (strlen($value) > 20) { + throw new InvalidArgumentException("transactionOrigin is too long"); + } + $this->parameters['transactionOrigin'] = $value; + } + + /** + * Set card number. + * + * @param string $value + * @return void + */ + public function setCardNumber(string $number): void + { + if (strlen($number) > 19) { + throw new InvalidArgumentException("cardNumber is too long"); + } + if (strlen($number) < 12) { + throw new InvalidArgumentException("cardNumber is too short"); + } + $this->parameters['cardNumber'] = $number; + } + + /** + * Set card expiry date. + * + * @param string $value + * @return void + */ + public function setCardExpiryDate(string $date): void + { + if (strlen($date) != 6) { + throw new InvalidArgumentException("cardExpiryDate value is invalid"); + } + $this->parameters['cardExpiryDate'] = $date; + } + + /** + * Set card csc value. + * + * @param string $value + * @return void + */ + public function setCardCscValue(string $value): void + { + if (strlen($value) > 4) { + throw new InvalidArgumentException("cardCSCValue value is invalid"); + } + $this->parameters['cardCSCValue'] = $value; + } + + /** + * Set fraud data bypass3ds. + * + * @param string $value + * @return void + */ + public function setFraudDataBypass3ds(string $value): void + { + if (strlen($value) > 128) { + throw new InvalidArgumentException("fraudData.bypass3DS is too long"); + } + $this->parameters['fraudData.bypass3DS'] = $value; + } + + /** + * Set merchant wallet id. + * + * @param string $value + * @return void + */ + public function setMerchantWalletId(string $wallet): void + { + if (strlen($wallet) > 21) { + throw new InvalidArgumentException("merchantWalletId is too long"); + } + $this->parameters['merchantWalletId'] = $wallet; + } + + /** + * Set payment mean id. + * + * @param string $value + * @return void + */ + public function setPaymentMeanId(string $value): void + { + if (strlen($value) > 6) { + throw new InvalidArgumentException("paymentMeanId is too long"); + } + $this->parameters['paymentMeanId'] = $value; + } + + /** + * Set instalment data number. + * + * @param string $value + * @return void + */ + public function setInstalmentDataNumber(string $number): void + { + if (strlen($number) > 2) { + throw new InvalidArgumentException("instalmentData.number is too long"); + } + if (($number < 2) || ($number > 50)) { + throw new InvalidArgumentException( + "instalmentData.number invalid value : value must be set between 2 and 50" + ); + } + $this->parameters['instalmentData.number'] = $number; + } + + /** + * Set instalment dates list. + * + * @param string $value + * @return void + */ + public function setInstalmentDatesList(string $datesList): void + { + $this->parameters['instalmentData.datesList'] = $datesList; + } + + /** + * Set instalment data transaction references list. + * + * @param string $value + * @return void + */ + public function setInstalmentDataTransactionReferencesList(string $transactionReferencesList): void + { + $this->parameters['instalmentData.transactionReferencesList'] = $transactionReferencesList; + } + + /** + * Set instalment data amounts list. + * + * @param string $value + * @return void + */ + public function setInstalmentDataAmountsList(string $amountsList): void + { + $this->parameters['instalmentData.amountsList'] = $amountsList; + } + + /** + * Set payment pattern. + * + * @param string $value + * @return void + */ + public function setPaymentPattern(string $paymentPattern): void + { + $this->parameters['paymentPattern'] = $paymentPattern; + } + + public function __call(string $method, array $args) + { + if (substr($method, 0, 3) == 'set') { + $field = lcfirst(substr($method, 3)); + if (in_array($field, $this->pspFields)) { + $this->parameters[$field] = $args[0]; + return; + } + } + + if (substr($method, 0, 3) == 'get') { + $field = lcfirst(substr($method, 3)); + if (array_key_exists($field, $this->parameters)) { + return $this->parameters[$field]; + } + } + + throw new BadMethodCallException("Unknown method $method"); + } + + /** + * Apply sort on parameters. + * + * @return array + */ + public function toArray(): array + { + ksort($this->parameters); + return $this->parameters; + } + + /** + * To parameter string. + * + * @return string|false + */ + public function toParameterString(): string|false + { + ksort($this->parameters); + $seal = $this->getShaSign(); + $tmp = array_merge($this->parameters, ['seal' => $seal]); + return json_encode($tmp, JSON_UNESCAPED_SLASHES); + } + + public function validate() + { + foreach ($this->requiredFields as $field) { + if (empty($this->parameters[$field])) { + throw new \RuntimeException($field . " can not be empty"); + } + } + } + + /** + * Validate uri. + * + * @param string $uri + * @return void + */ + protected function validateUri(string $uri): void + { + if (!filter_var($uri, FILTER_VALIDATE_URL)) { + throw new InvalidArgumentException("Uri is not valid"); + } + if (strlen($uri) > 200) { + throw new InvalidArgumentException("Uri is too long"); + } + } + + // Traitement des reponses de Mercanet + // ----------------------------------- + + /** @var string */ + public const SHASIGN_FIELD = "SEAL"; + + /** @var string */ + public const DATA_FIELD = "DATA"; + + /** @var string */ + private $shaSign; + + private $dataString; + + private $responseRequest; + + private $parameterArray; + + /** + * Set response. + * + * @param array $httpRequest + * @return void + */ + public function setResponse(array $httpRequest): void + { + // Use lowercase internally. + $httpRequest = array_change_key_case($httpRequest, CASE_UPPER); + + // Set sha sign. + $this->shaSign = $this->extractShaSign($httpRequest); + + // Filter request for Sips parameters. + $this->parameters = $this->filterRequestParameters($httpRequest); + } + + /** + * Filter http request parameters. + * + * @param array $requestParameters + * @return array + */ + private function filterRequestParameters(array $httpRequest): array + { + // Filter request for Sips parameters. + if (!array_key_exists(self::DATA_FIELD, $httpRequest) || $httpRequest[self::DATA_FIELD] == '') { + throw new InvalidArgumentException('Data parameter not present in parameters.'); + } + $this->responseData = $this->dataString = $httpRequest[self::DATA_FIELD]; + return \json_decode($this->dataString, true); + } + + /** + * Get seal. + * + * @return string + */ + public function getSeal(): string + { + return $this->shaSign; + } + + private function extractShaSign(array $parameters) + { + if (!array_key_exists(self::SHASIGN_FIELD, $parameters) || $parameters[self::SHASIGN_FIELD] == '') { + throw new InvalidArgumentException('SHASIGN parameter not present in parameters.'); + } + + return $parameters[self::SHASIGN_FIELD]; + } + + /** + * Concat all values from parameters into on sigle string. + * + * @param array $params + * @param string $values + * @return string + */ + public function getValuesFromParameters(array $params = [], string $values = ""): string + { + foreach ($params as $value) { + $values .= !\is_array($value) ? \trim($value) : $this->getValuesFromParameters($value); + } + return $values; + } + + /** + * Checks if the response is valid. + * + * @return boolean + */ + public function isValid(): bool + { + Log::debug("Mercanet Response Seal : " . $this->shaSign); + Log::debug("Mercanet Response : " . $this->responseData); + $resultat = false; + $compute = hash_hmac('sha256', $this->responseData, $this->secretKey); + if (hash_equals($this->shaSign, $compute)) { + if ( + in_array($this->parameters['responseCode'], [ + '00', // Paiement accepté + '02', // Demande d’autorisation par téléphone à la banque à cause d’un dépassement du plafond d’autorisation sur la carte, si vous êtes autorisé à forcer les transactions + '03', // Contrat commerçant invalide + '05', // Autorisation refusée Refus 3D Secure, Refus bancaire acquéreur, Repli VADS, Fraude + '11', // Utilisé dans le cas d'un contrôle différé. Le PAN est en opposition + '12', // Transaction invalide, vérifier les paramètres transférés dans la requête + '14', // Coordonnées du moyen de paiement invalides (ex: n° de carte ou cryptogramme visuel de la carte) ou vérification AVS échouée + '17', // Annulation de l’acheteur + '30', // Erreur de format + '34', // Suspicion de fraude (seal erroné), Refus fraude acquéreur + '54', // Date de validité du moyen de paiement dépassée + '60', // Transaction en attente + '75', // Nombre de tentatives de saisie des coordonnées du moyen de paiement sous Sips Paypage dépassé + '90', // Service temporairement indisponible + '94', // Transaction dupliquée : le transactionReference de la transaction est déjà utilisé + '97', // Délai expiré, transaction refusée + '99' // Problème temporaire du serveur de paiement. + ]) + ) { + $resultat = true; + } + } //end if + return $resultat; + } + + public function getXmlValueByTag($inXmlset, $needle) + { + $resource = xml_parser_create(); + // Create an XML parser + xml_parse_into_struct($resource, $inXmlset, $outArray); + // Parse XML data into an array structure + xml_parser_free($resource); + // Free an XML parser + $count = count($outArray); + for ($i = 0; $i < $count; $i++) { + if ($outArray[$i]['tag'] == strtoupper($needle)) { + $tagValue = $outArray[$i]['value']; + } + } + return $tagValue; + } + + /** + * Retrieves a response parameter. + * + * @param string $param + * @throws \InvalidArgumentException + */ + public function getParam($key) + { + return $this->parameterArray[$key]; + } + + /** + * Get response request. + * + * @return \App\Lib\Mercanet\Mercanet + */ + public function getResponseRequest(): \App\Lib\Mercanet\Mercanet + { + return $this->responseRequest; + } + + /** + * Order payment. + * + * @param integer $amount + * @param string $ref + * @return object + */ + public function quickPayment(int $amount, string $ref): object + { + // Seal. + $this->setSealAlgorithm("HMAC-SHA-256"); + // Required fields. + $this->setInterfaceVersion(Mercanet::INTERFACE_VERSION); + $this->setKeyVersion(Mercanet::VERSION); + $this->setCurrency(Mercanet::CURRENCY); + $this->setOrderChannel("INTERNET"); + // Variables. + $this->setAmount($amount); + $this->setTransactionReference($ref); + $this->setNormalReturnUrl($this->returnUrl); + if ($this->automaticUrl !== false) { + $this->setAutomaticResponseUrl($this->automaticUrl); + } + // Optional fields. + $this->setPaymentBrands(Mercanet::PAYMENT_BRANDS); + $this->setCaptureMode('IMMEDIATE'); + // Validate. + $this->validate(); + + return $this->executeRequest(); + } + + /** + * Execute request. + * + * @return object + */ + public function executeRequest(): object + { + Log::debug("Mercanet Request : " . $this->toParameterString()); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $this->getUrl()); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $this->toParameterString()); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept:application/json')); + curl_setopt($ch, CURLOPT_PORT, 443); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + $result = curl_exec($ch); + $info = curl_getinfo($ch); + + if (!$result) { + report(new \RuntimeException( + "MERCANET [" . strval($this->parameters['transactionReference']) . "] : curl error: " . curl_error($ch) + )); + Log::critical( + "MERCANET [" . strval($this->parameters['transactionReference']) . "] : curl error: " . curl_error($ch) + ); + curl_close($ch); + return (object)['status' => 'KO', 'code' => 500]; + } + + if ($info['http_code'] != 200) { + Log::critical(sprintf( + "MERCANET [%s] : service error: %s - Return : %s", + $this->parameters['transactionReference'], + $info['http_code'], + $result + )); + curl_close($ch); + return (object)['status' => 'KO', 'code' => 500]; + } + curl_close($ch); + + if (strlen($result) == 0) { + Log::critical(sprintf( + "MERCANET [%s] : service did not sent back data", + $this->parameters['transactionReference'] + )); + return (object)['status' => 'KO', 'code' => 500]; + } + $result_array = json_decode($result); + if (isset($result_array->redirectionStatusCode)) { + if ($result_array->redirectionStatusCode === '00') { + return (object)[ + 'status' => 'OK', + 'code' => $result_array->redirectionStatusCode, + 'url' => $result_array->redirectionUrl, + 'version' => $result_array->redirectionVersion, + 'data' => $result_array->redirectionData + ]; + } else { + return (object)[ + 'status' => 'KO', + 'code' => $result_array->redirectionStatusCode, + 'seal' => $result_array->seal + ]; + } + } else { + Log::critical(sprintf( + "MERCANET [%s] : redirectionStatusCode missing", + $this->parameters['transactionReference'] + )); + return (object)['status' => 'KO', 'code' => 500]; + } //end if + } +} diff --git a/app/Mail/Arcadia/HasOrderedAnItem.php b/app/Mail/Arcadia/HasOrderedAnItem.php new file mode 100644 index 00000000..eecac2b7 --- /dev/null +++ b/app/Mail/Arcadia/HasOrderedAnItem.php @@ -0,0 +1,102 @@ +data = $data; + } + + /** + * Build the message. + * + * @return $this + * @throws \RuntimeException If generating XML fails. + */ + public function build() + { + $xml = $this->makeXml(); + + // * Format xml. + $doc = new \DOMDocument('1.0', 'utf-8'); + $doc->xmlStandalone = true; + $doc->preserveWhiteSpace = false; + $doc->formatOutput = true; + $doc->loadXML($xml); + $xml = $doc->saveXML(); + + if (!$xml) { + throw new \RuntimeException("Failed to make XML"); + } + + $fileName = Str::slug(sprintf( + 'order_%s_%s_%s%s', + $this->data->order_num, + ArcadiaOrderType::make($this->data->state_order)->label, + date('Ymd_His'), + \microtime(true) + )) . '.xml'; + + Storage::disk('arcadia')->put($fileName, $xml); + + return $this->markdown('emails.arcadiaOrders.default_markdown') + ->attachData( + $xml, + $fileName, + ['mime' => 'application/xml'] + ); + } + + /** + * Render Arcadia xml for order. + * + * @return string + */ + private function makeXml(): string + { + return view('emails.arcadiaOrders.default_xml', [ + 'operation' => $this->data->operation, + 'support_code' => $this->data->support_code, + 'label_type_support' => $this->data->operation, + 'order_date' => $this->data->order_date, + 'order_num' => $this->data->order_num, + 'orderType' => ArcadiaOrderType::make($this->data->state_order), + 'package_unit_weight' => $this->data->package_unit_weight, + 'lastname' => $this->data->lastname, + 'firstname' => $this->data->firstname, + 'email' => $this->data->email, + 'address' => $this->data->address, + 'address2' => $this->data->address2, + 'city' => $this->data->city, + 'phone' => $this->data->phone, + 'postcode' => $this->data->postcode, + ])->render(); + } +} diff --git a/app/Models/DeliveryAddress.php b/app/Models/DeliveryAddress.php new file mode 100644 index 00000000..408c51c0 --- /dev/null +++ b/app/Models/DeliveryAddress.php @@ -0,0 +1,58 @@ + + */ + protected $fillable = [ + 'civility', + 'lastname', + 'firstname', + 'address', + 'postcode', + 'city', + 'phone' + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'civility' => ContactFormCivility::class + ]; + + // * RELATIONSHIPS + + /** + * Get the order that are assigned this delivery address. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function order(): \Illuminate\Database\Eloquent\Relations\BelongsTo + { + return $this->belongsTo(Order::class); + } +} diff --git a/app/Models/Notification.php b/app/Models/Notification.php index 7f1a5080..9759c4d2 100644 --- a/app/Models/Notification.php +++ b/app/Models/Notification.php @@ -6,6 +6,8 @@ use App\Casts\NiceDate; use App\Enums\NotificationType; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\View; /** * @property \App\Enums\NotificationType $type Notification type. @@ -38,10 +40,41 @@ class Notification extends Model 'type' => NotificationType::class ]; + // * METHODS + + /** + * created_at_nice_date attribute. + * + * @return \Illuminate\Database\Eloquent\Casts\Attribute + */ + public function createdAtNiceDate(): \Illuminate\Database\Eloquent\Casts\Attribute + { + return Attribute::make( + get: fn() => (new NiceDate())->get(null, '', $this->created_at, []) + ); + } + + /** + * Get notifications. + * + * @return void + */ + public static function getNotifications(): void + { + if (!Auth::guard('club')->check()) { + return; + } + /** @var \App\Models\Customers $customerModel */ + $customerModel = Auth::guard('club')->user(); + $notifications = $customerModel->getAllNotifications(); + View::share('notifications', count($notifications) - $customerModel->readNotifications()->count()); + View::share('notificationsList', $notifications); + } + // * RELATIONSHIPS /** - * Get the customer that owns the Notifications + * Get the customer that owns the Notifications. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -51,7 +84,7 @@ class Notification extends Model } /** - * Polymorphic relation : Get the parent model + * Polymorphic relation : Get the parent model. * * @return \Illuminate\Database\Eloquent\Relations\MorphTo */ @@ -59,18 +92,4 @@ class Notification extends Model { return $this->morphTo(); } - - // * METHODS - - /** - * created_at_nice_date attribute - * - * @return \Illuminate\Database\Eloquent\Casts\Attribute - */ - public function createdAtNiceDate(): \Illuminate\Database\Eloquent\Casts\Attribute - { - return Attribute::make( - get: fn () => (new NiceDate())->get(null, '', $this->created_at, []) - ); - } } diff --git a/app/Models/Order.php b/app/Models/Order.php new file mode 100644 index 00000000..1729dd23 --- /dev/null +++ b/app/Models/Order.php @@ -0,0 +1,116 @@ + + */ + protected $fillable = [ + 'firstname', + 'lastname', + 'address', + 'postcode', + 'phone', + 'email', + 'city', + 'civility', + 'status', + 'payementType', + 'customer_id', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'civility' => ContactFormCivility::class, + 'status' => OrderStatus::class, + 'payementType' => OrderType::class + ]; + + // * METHODS + + /** + * Export the model data to a Formatted Arcadia Data array. + * + * @return array> + */ + public function exportToOrderMailData(): array + { + return [ + 'ref' => $this->ref, + 'civility' => $this->civility->value(), + 'lastname' => $this->lastname, + 'firstname' => $this->firstname, + 'address' => $this->address, + 'postcode' => $this->postcode, + 'city' => $this->city, + 'email' => $this->email, + 'phone' => $this->phone ?? '', + 'items' => $this->sellItems()->withPivot('quantity')->get()->map(function (SellItem $item) { + $item->typeCustom = $item->type->toArray()[$item->type->name()]; + return $item; + })->toArray() + ]; + } + + // * RELATIONSHIPS + + /** + * Get all of the items that are assigned this order. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function sellItems(): \Illuminate\Database\Eloquent\Relations\BelongsToMany + { + return $this->belongsToMany(SellItem::class)->withPivot('quantity'); + } + + /** + * Get the customer that are assigned this order. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function customer(): \Illuminate\Database\Eloquent\Relations\BelongsTo + { + return $this->belongsTo(Customer::class); + } + + /** + * Get the delivery address that are assigned this order. + * + * @return \Illuminate\Database\Eloquent\Relations\HasOne + */ + public function deliveryAddress(): \Illuminate\Database\Eloquent\Relations\HasOne + { + return $this->hasOne(DeliveryAddress::class); + } +} diff --git a/app/Models/OrderSellItem.php b/app/Models/OrderSellItem.php new file mode 100644 index 00000000..aa6c3122 --- /dev/null +++ b/app/Models/OrderSellItem.php @@ -0,0 +1,9 @@ +order = $order; + } + + /** + * Get the notification's delivery channels. + * + * @return array + */ + public function via(): array + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail(): \Illuminate\Notifications\Messages\MailMessage + { + return (new MailMessage()) + ->template('notifications::email-club') + ->subject(trans('Récapitulation de votre commande - :site_name', [ + 'site_name' => config('app.name') + ])) + ->greeting(trans('Merci pour votre achat !')) + ->line(trans("Votre commande a bien été prise en compte et sera traité sous les meilleurs délais.")) + ->line(trans("Vous pouvez retrouver le récapitulif de votre commande en pièce jointe.")) + ->lineIf( + $this->order->payementType->equals(OrderType::check), + trans("Si vous avez choisi un payement par chèque, veuillez l'envoyer à l'adresse suivante :") + ) + ->lineIf( + $this->order->payementType->equals(OrderType::check), + trans("LDC - Les Départ'Aimants Le Gaulois ZI St Laurent - CS 50925 72302 Sablé sur Sarthe") + ) + ->attachData($this->makePdfFile(), 'recapitulatif_commande_le_gaulois.pdf'); + } + + /** + * Create the recap of the order. + * + * @return string + */ + private function makePdfFile(): string + { + return LaravelMpdf::loadHTML( + view('club.pages.shop.template-pdf-order', $this->order->exportToOrderMailData())->render(), + [ + 'mode' => '', + 'format' => 'A4', + 'default_font_size' => '12', + 'default_font' => 'sans-serif', + 'margin_left' => 0, + 'margin_right' => 0, + 'margin_top' => 0, + 'margin_bottom' => 0, + 'margin_header' => 0, + 'margin_footer' => 0, + 'orientation' => 'P', + 'title' => trans('Commande Le Gaulois'), + 'author' => 'Le Gaulois', + 'watermark' => '', + 'show_watermark' => false, + 'show_watermark_image' => false, + 'display_mode' => 'fullpage', + 'watermark_font' => 'sans-serif', + 'watermark_text_alpha' => 0.1, + 'watermark_image_path' => '', + 'watermark_image_alpha' => 0.2, + 'watermark_image_size' => 'D', + 'watermark_image_position' => 'P', + 'custom_font_dir' => base_path('resources/assets/fonts/'), + 'custom_font_data' => [ + 'bouton-base' => [ + 'R' => 'BourtonBase.ttf' + ] + ], + 'auto_language_detection' => false, + 'temp_dir' => sys_get_temp_dir(), + // 'temp_dir' => rtrim( + // ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir(), + // DIRECTORY_SEPARATOR + // ), + 'pdfa' => false, + 'pdfaauto' => false, + 'use_active_forms' => false, + ] + )->output(); + } +} diff --git a/app/Traits/Enums/BaseEnum.php b/app/Traits/Enums/BaseEnum.php index f636929c..90ea2999 100644 --- a/app/Traits/Enums/BaseEnum.php +++ b/app/Traits/Enums/BaseEnum.php @@ -98,7 +98,7 @@ trait BaseEnum self::setCache('enums', \collect(self::cases()) ->mapWithKeys(function ($enum) use ($definitions) { $baseArray = [ - 'name' => $enum->name, + 'name' => $enum->name, 'label' => $enum->label(), 'value' => $enum->value, ]; diff --git a/composer.json b/composer.json index 53721942..b7ef9396 100644 --- a/composer.json +++ b/composer.json @@ -33,6 +33,7 @@ "snipe/banbuilder": "^2.3", "uwil/admin-secure-laravel": "^3.0", "uwil/k8s-laravel": "^1.4", + "uwil/laravel-common": "^2.0", "uwil/seo-laravel": "^3.0", "verschuur/laravel-robotstxt": "^5.1" }, diff --git a/composer.lock b/composer.lock index aa7bcdee..710aa09f 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": "798fa3f29d8f72f6278a8376d026054c", + "content-hash": "1138643fb8ff840f86063220654e36c5", "packages": [ { "name": "24slides/laravel-saml2", @@ -1611,6 +1611,150 @@ ], "time": "2023-12-03T19:50:20+00:00" }, + { + "name": "intervention/gif", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/Intervention/gif.git", + "reference": "42c131a31b93c440ad49061b599fa218f06f93be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/gif/zipball/42c131a31b93c440ad49061b599fa218f06f93be", + "reference": "42c131a31b93c440ad49061b599fa218f06f93be", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^10.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Intervention\\Gif\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "Native PHP GIF Encoder/Decoder", + "homepage": "https://github.com/intervention/gif", + "keywords": [ + "animation", + "gd", + "gif", + "image" + ], + "support": { + "issues": "https://github.com/Intervention/gif/issues", + "source": "https://github.com/Intervention/gif/tree/4.2.0" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + }, + { + "url": "https://ko-fi.com/interventionphp", + "type": "ko_fi" + } + ], + "time": "2024-09-20T13:35:02+00:00" + }, + { + "name": "intervention/image", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/1786ad5e1789050939d73cd195de4b8eaeeb34ed", + "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "intervention/gif": "^4.1", + "php": "^8.1" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^10.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^3.8" + }, + "suggest": { + "ext-exif": "Recommended to be able to read EXIF data properly." + }, + "type": "library", + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "PHP image manipulation", + "homepage": "https://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "resize", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/3.8.0" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + }, + { + "url": "https://ko-fi.com/interventionphp", + "type": "ko_fi" + } + ], + "time": "2024-08-16T14:57:26+00:00" + }, { "name": "jean85/pretty-package-versions", "version": "2.0.6", @@ -1670,6 +1814,68 @@ }, "time": "2024-03-08T09:58:59+00:00" }, + { + "name": "kwaadpepper/image-resizer", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/Kwaadpepper/image-resizer.git", + "reference": "fac49db8819135a64c62e5f8143288cb59c1cad1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Kwaadpepper/image-resizer/zipball/fac49db8819135a64c62e5f8143288cb59c1cad1", + "reference": "fac49db8819135a64c62e5f8143288cb59c1cad1", + "shasum": "" + }, + "require": { + "illuminate/support": "~11", + "intervention/image": "^3.6", + "laravel/framework": "~11", + "php": "^8.2" + }, + "require-dev": { + "larastan/larastan": "^2.0", + "orchestra/testbench": "^9.0", + "slevomat/coding-standard": "^8.11" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Kwaadpepper\\ImageResizer\\ImageResizerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Kwaadpepper\\ImageResizer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Munsch", + "email": "github@jeremydev.ovh", + "homepage": "https://jeremydev.ovh" + } + ], + "description": "Resize images on the fly and cache them", + "homepage": "https://github.com/kwaadpepper/image-resizer", + "keywords": [ + "images", + "laravel", + "resize" + ], + "support": { + "issues": "https://github.com/Kwaadpepper/image-resizer/issues", + "source": "https://github.com/Kwaadpepper/image-resizer/tree/3.0.2" + }, + "time": "2024-06-21T17:48:22+00:00" + }, { "name": "laminas/laminas-diactoros", "version": "3.4.0", @@ -7976,6 +8182,68 @@ ], "description": "Laravel requirements for k8s" }, + { + "name": "uwil/laravel-common", + "version": "2.0.0", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-common.git", + "reference": "539ec5f3808a0cfa2c9fd3a0a721f1ede3e1b65e" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/215/packages/composer/archives/uwil/laravel-common.zip?sha=539ec5f3808a0cfa2c9fd3a0a721f1ede3e1b65e", + "reference": "539ec5f3808a0cfa2c9fd3a0a721f1ede3e1b65e", + "shasum": "" + }, + "require": { + "illuminate/support": "~11", + "kwaadpepper/image-resizer": "^3.0", + "laravel/framework": "~11", + "php": "~8.3" + }, + "require-dev": { + "larastan/larastan": "^2.9", + "orchestra/testbench": "^9.0", + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\Laravel\\Common\\CommonServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Helpers/methods.php" + ], + "psr-4": { + "Uwil\\Laravel\\Common\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Uwil\\Laravel\\Common\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel common utils" + }, { "name": "uwil/seo-laravel", "version": "3.0.0", diff --git a/config/mercanet.php b/config/mercanet.php new file mode 100644 index 00000000..57ac3954 --- /dev/null +++ b/config/mercanet.php @@ -0,0 +1,8 @@ + env('MERCANET_SECRET'), + 'merchantId' => env('MERCANET_MERCHAND_ID'), + // Ex: DEVELOPMENT, PRODUCTION. + 'env' => env('MERCANET_ENV', 'DEVELOPMENT'), +]; diff --git a/config/robots-txt.php b/config/robots-txt.php index 6d4614ab..e43f1dbe 100644 --- a/config/robots-txt.php +++ b/config/robots-txt.php @@ -1,4 +1,5 @@ [ 'production' => [ diff --git a/database/migrations/2024_21_27_123906_create_orders_table.php b/database/migrations/2024_21_27_123906_create_orders_table.php new file mode 100644 index 00000000..46a7f0d3 --- /dev/null +++ b/database/migrations/2024_21_27_123906_create_orders_table.php @@ -0,0 +1,45 @@ +id(); + $table->uuid('ref')->unique()->comment('Order reference.'); + $table->string('firstname')->comment('Order firstname author.'); + $table->string('lastname')->comment('Order lastname author.'); + $table->string('address')->comment('Order address author.'); + $table->string('postcode')->comment('Order postcode author.'); + $table->string('phone')->nullable()->comment('Order phone author.'); + $table->string('email')->comment('Order email author.'); + $table->string('city')->comment('Order city author.'); + $table->tinyInteger('civility')->comment('Order civility author.'); + $table->tinyInteger('status')->comment('Order status.'); + $table->tinyInteger('payementType')->comment('Order payement type.'); + $table->boolean('confirmMailSent')->default(false)->comment('Order sent mail confirm.'); + $table->foreignId('customer_id')->comment('Customer associated to the order.') + ->constrained('customers')->onUpdate('cascade')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + Schema::dropIfExists('orders'); + } +}; diff --git a/database/migrations/2024_21_27_123907_create_order_sell_item_table.php b/database/migrations/2024_21_27_123907_create_order_sell_item_table.php new file mode 100644 index 00000000..dd261804 --- /dev/null +++ b/database/migrations/2024_21_27_123907_create_order_sell_item_table.php @@ -0,0 +1,32 @@ +id(); + $table->smallInteger('quantity')->comment('Order sell items quantity.'); + $table->foreignId('order_id')->comment('Order associated to the sell item.') + ->constrained('orders')->onUpdate('cascade')->onDelete('cascade'); + $table->foreignId('sell_item_id')->comment('Sell item associated to the order.') + ->constrained('sell_items')->onUpdate('cascade')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('order_sell_item'); + } +}; diff --git a/database/migrations/2024_21_27_123908_create_delivery_addresses_table.php b/database/migrations/2024_21_27_123908_create_delivery_addresses_table.php new file mode 100644 index 00000000..84e08d9b --- /dev/null +++ b/database/migrations/2024_21_27_123908_create_delivery_addresses_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('firstname')->comment('Delivery address author firstname.'); + $table->string('lastname')->comment('Delivery address author lastname.'); + $table->string('address')->comment('Delivery address address.'); + $table->string('postcode')->comment('Delivery address postcode.'); + $table->string('phone')->nullable()->comment('Delivery address author phone.'); + $table->string('city')->comment('Delivery address city.'); + $table->tinyInteger('civility')->comment('Delivery address author civility.'); + $table->foreignId('order_id')->comment('Order associated to the delivery address.') + ->constrained('orders')->onUpdate('cascade')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('delivery_addresses'); + } +}; diff --git a/package-lock.json b/package-lock.json index f702ed30..013e41cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2844,9 +2844,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001610", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz", - "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==", + "version": "1.0.30001664", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", + "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", "dev": true, "funding": [ { diff --git a/resources/assets/documents/club/conditions_generales_de_vente.pdf b/resources/assets/documents/club/conditions_generales_de_vente.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5bdc244b05a36324d486d74bebb384992081a0e2 GIT binary patch literal 266882 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±IeHRmHch*dAy=5 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�Rr0#VJml%F8%W=Qg`?Qy;bftHxS5~*0E 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 bzSP^@sPjMJOs`%;Qf{R{pWPU)i;y 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

    J@a)u}4c#XjHSCl+=O4woa; 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 Q9dAvnS*_zQcK$N|cfUZIFaQ7m literal 0 HcmV?d00001 diff --git a/resources/assets/images/club/shop/order.jpg b/resources/assets/images/club/shop/order.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e74e993805437d2cc5568b64ed9b9e9928cd9cc7 GIT binary patch literal 136622 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


    yIeaT8W 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 literal 0 HcmV?d00001 diff --git a/resources/assets/images/club/shop/padlock.png b/resources/assets/images/club/shop/padlock.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8819ddbd941e6109208253218b691be7150f0f GIT binary patch literal 553 zcmV+^0@nSBP){6Kc=tODk?bH?SM{_0UH*P$y6aQ2ZD`oj};Y$G&LUz-~}RKz;N`nkZ0;7sUS0 zL32a+k(=a#ppgD<8gzsu0F`A4fGd22zV|V9Aw#GJ(N=6CvMxc`z1bH8=qW!(naOG5;(IL@0BNrPl_fjLiI)eTpm|=x)S0;j3I1KXy}L+;WRs-(h6? zu%6iQOd|U!xGsJpb(KEhmJ9wJq8f(*rNmjHTF z3gj;Exx^V4(BesS<54_Iw$wxgO3s+5AZP2PF)X4_Z7E{nzI_eiGt6IJPzd3MWH94v r+0uSJS*T(&yBR3#p2u4&Wd;5KZ-&*}|4Lu{00000NkvXXu0mjfBJ=C& literal 0 HcmV?d00001 diff --git a/resources/sass/club/partials/_card-club-home.scss b/resources/sass/club/partials/_card-club-home.scss index a14d0e49..e8325bc3 100644 --- a/resources/sass/club/partials/_card-club-home.scss +++ b/resources/sass/club/partials/_card-club-home.scss @@ -37,7 +37,7 @@ .promo-badge { position: absolute; top: -1rem; - right: .5rem; + right: 0; padding: .2rem .3rem; background-color: $color-hex-red; color: $color-hex-light; diff --git a/resources/ts/club/components/club/boutique/choose.vue.save b/resources/ts/club/components/club/boutique/choose.vue.save deleted file mode 100644 index d11f135e..00000000 --- a/resources/ts/club/components/club/boutique/choose.vue.save +++ /dev/null @@ -1,140 +0,0 @@ - - - diff --git a/resources/ts/club/components/club/boutique/recap.vue.save b/resources/ts/club/components/club/boutique/recap.vue.save deleted file mode 100644 index 172a2b6e..00000000 --- a/resources/ts/club/components/club/boutique/recap.vue.save +++ /dev/null @@ -1,369 +0,0 @@ - - - diff --git a/resources/ts/club/components/club/boutique/shop.vue.save b/resources/ts/club/components/club/boutique/shop.vue.save deleted file mode 100644 index f601e827..00000000 --- a/resources/ts/club/components/club/boutique/shop.vue.save +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/resources/ts/club/components/club/shop/ChooseComponent.vue b/resources/ts/club/components/club/shop/ChooseComponent.vue new file mode 100644 index 00000000..b0dcd71b --- /dev/null +++ b/resources/ts/club/components/club/shop/ChooseComponent.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/resources/ts/club/components/club/shop/RecapComponent.vue b/resources/ts/club/components/club/shop/RecapComponent.vue new file mode 100644 index 00000000..1b6e6b31 --- /dev/null +++ b/resources/ts/club/components/club/shop/RecapComponent.vue @@ -0,0 +1,622 @@ + + + + + + diff --git a/resources/ts/club/components/club/shop/ShopRouterComponent.vue b/resources/ts/club/components/club/shop/ShopRouterComponent.vue new file mode 100644 index 00000000..eb255857 --- /dev/null +++ b/resources/ts/club/components/club/shop/ShopRouterComponent.vue @@ -0,0 +1,161 @@ + + + diff --git a/resources/ts/club/utilities/fontawesome.ts b/resources/ts/club/utilities/fontawesome.ts index 0b286f88..596c4f91 100644 --- a/resources/ts/club/utilities/fontawesome.ts +++ b/resources/ts/club/utilities/fontawesome.ts @@ -3,6 +3,7 @@ import { faSquare, faSquareCheck } from "@fortawesome/free-regular-svg-icons"; import { faArrowRightArrowLeft, faBan, + faBasketShopping, faChevronLeft, faChevronRight, faCircleCheck, @@ -15,6 +16,9 @@ import { faEyeSlash, faLocationArrow, faMagnifyingGlass, + faMinus, + faPlus, + faSpinner, faTriangleExclamation, faXmark } from "@fortawesome/free-solid-svg-icons"; @@ -48,4 +52,10 @@ library.add(faArrowRightArrowLeft); library.add(faEllipsisVertical); library.add(faLocationArrow); +// Shop +library.add(faPlus); +library.add(faMinus); +library.add(faBasketShopping); +library.add(faSpinner); + dom.watch(); diff --git a/resources/ts/index.d.ts b/resources/ts/index.d.ts index fe122586..4ddfbcaa 100644 --- a/resources/ts/index.d.ts +++ b/resources/ts/index.d.ts @@ -97,6 +97,31 @@ declare global { swiper: Swiper; }; + type ClubShop = { + ref: number|undefined; + sellItems: ClubShopItem[]; + sellItemsType: { label: string, value: number, color: string}[]; + payementMethods: { label: string, value: number}[]; + civility: { label: string, value: number}[]; + user: LaravelModel; + cart: { + item: ClubShopItem, + count: number; + }[]; + total: number; + }; + + type ClubShopItem = { + id: number; + name: string; + htmlName: string; + picture: string; + picture_alt: string; + picture_title: string; + price: number; + type: number; + }; + type ValueOf = T[keyof T]; type LaravelValidationErrors = Record; @@ -107,6 +132,7 @@ declare global { CookieNotice: typeof CookieNotice; axios: AxiosStatic; Swal: Function; + shop: ClubShop; vueDebug: boolean | undefined; __SLIDERS: Map, __SYSTEM: { diff --git a/resources/ts/modules/asset.ts b/resources/ts/modules/asset.ts index 7db4d6ee..f4e7ea82 100644 --- a/resources/ts/modules/asset.ts +++ b/resources/ts/modules/asset.ts @@ -1,7 +1,7 @@ export default { methods: { asset(path: string) { - return `${window.__SYSTEM._asset[path] ?? path}`; + return `${window.__SYSTEM._asset}${path}`; }, }, }; diff --git a/resources/views/club/pages/shop/error.blade.php b/resources/views/club/pages/shop/error.blade.php new file mode 100644 index 00000000..4115f283 --- /dev/null +++ b/resources/views/club/pages/shop/error.blade.php @@ -0,0 +1,38 @@ +@extends('club.layout') + +@section('title', __('Commande annulée')) +@section('description', __('Votre commande vient d\'être annulée pour cause une impossibilité de traiter la demande.')) +@section('breadcrumb', request()->route()->getName()) + +@section('container-fluid', true) +@section('no-bottom-space', true) +@section('page-class', 'shop') + +@section('backbtn-url', route('club.home.show')) +@section('backbtn-txt', __('Retour sur le club')) + +@section('content') +
    +
    + + @include('club.icons.bell') + +

    {{ __('Commande annulée') }}

    +
    +
    +

    + {{ __('La commande que vous venez de passer n\'a pu aboutir !') }} +

    +
    +
    +
    +@endsection diff --git a/resources/views/club/pages/shop/index.blade.php b/resources/views/club/pages/shop/index.blade.php index e02a216f..e03faec1 100644 --- a/resources/views/club/pages/shop/index.blade.php +++ b/resources/views/club/pages/shop/index.blade.php @@ -12,114 +12,21 @@ @section('backbtn-txt', __('Retour sur les départ’aimants')) @section('content') -
    -
    - - @include('club.icons.cloche') - -

    {{ __('Notifications') }}

    -
    -
    -
    -
    - {{-- PAPER MAP --}} -
    -
    - {{ __('Carte départ\'aimant') }} -
    -

    {{ __('papier') }}

    -
    -
    {{ __('carte départ\'aimants') }}
    -

    4€

    -
    - -
    -
    -
    - {{-- MAGNETIC MAP --}} -
    -
    - {{ __('Carte départ\'aimant') }} -
    -

    {{ __('magnétique') }}

    -
    -
    {{ __('carte départ\'aimants') }}
    -

    12€

    -
    - -
    -
    -
    - {{-- COMMAND --}} -
    - -
    -

    {{ __('ma commande') }}

    -
    -
    -
    -
    - {{ __('Carte départ\'aimant') }} -
    -
    -
    -

    {{ __('magnétique') }}

    -

    12€

    -
    -

    {{ __('Carte départ\'aimants') }}

    -
    -

    {{ __('Quantité') }}

    - -
    -
    -
    -
    -
    - {{-- CGV --}} -
    -
    - - -
    -
    - {{-- TOTAL PRICE --}} -
    -

    {{ __('montant total :') }}

    -
    -

    12.00€

    - {{ __('Frais de port inclus') }} -
    -
    -
    - - {{-- FIXME: delete the following row when the form is ready --}} - {{ __('VALIDER') }} -
    - -
    -
    -
    + @php + $data = [ + 'titles' => [__('La boutique des gaulois'), __('récapitulatif de votre commande')], + 'texts' => [ + __('Le Gaulois vous propose des articles spéciaux pour compléter vos départ\'aimants !'), + __('Retrouvez l’ensemble des articles que vous avez ajouté à votre panier.'), + ], + 'icon' => view('club.icons.bag')->render(), + 'genref' => str()->uuid(), + 'sellItems' => $sellItemModels, + 'enumSellItemsType' => \App\Enums\Shop\SellItemsType::toArray(), + 'enumPayementMethods' => \App\Enums\Shop\OrderType::toArray(), + 'enumCivility' => \App\Enums\Shop\ContactFormCivility::toArray(), + 'authUser' => auth('club')->user()->api_data, + ]; + @endphp +
    @endsection diff --git a/resources/views/club/pages/shop/recap.blade.php b/resources/views/club/pages/shop/recap.blade.php deleted file mode 100644 index 8fcca503..00000000 --- a/resources/views/club/pages/shop/recap.blade.php +++ /dev/null @@ -1,80 +0,0 @@ -@extends('club.layout') - -@section('title', __('Récapitulatif de votre commande')) -@section('description', __('Description site')) -@section('breadcrumb', request()->route()->getName()) - -@section('container-fluid', true) -@section('no-bottom-space', true) -@section('page-class', 'shop') - -@section('backbtn-url', route('club.home.show')) -@section('backbtn-txt', __('Retour sur le club')) - -@section('content') -
    -
    - - @include('club.icons.cloche') - -

    {{ __('Récapitulatif de votre commande') }}

    -
    -
    -
    - @csrf - @php - $columns = [ - 'label' => 'col-sm-4 col-md-2', - 'input' => 'col-sm-7 offset-sm-1 col-md-4 offset-md-0', - ]; - @endphp -
    - {{ __('vos coordonnées') }} - @include('club.pages.customers.partials.customer-fields', [ - 'hideFields' => ['username', 'birthday', 'phone'], - ]) -
    -

    {{ __('récapitulatif de votre commande') }}

    -
    - - - - - - - - - - - - - - - - - -
    {{ __('Produit') }}{{ __('Prix unitaire') }}{{ __('Quantité') }}{{ __('Prix total') }}
    - {{ __('Carte départ\'aimant') }} -
    -

    {{ __('magnétique') }}

    -

    {{ __('Carte départ\'aimants') }}

    -
    -
    12€112€
    -
    -
    -

    {{ __('montant total :') }}

    -
    -

    12.00€

    -

    {{ __('Frais de port inclus') }}

    -
    -
    -
    -
    -

    {{ __('moyen de paiement:') }}

    -
    - {{ __('< retour') }} - -
    -
    -@endsection diff --git a/resources/views/club/pages/shop/redirectMercanet.blade.php b/resources/views/club/pages/shop/redirectMercanet.blade.php new file mode 100644 index 00000000..9eb3031b --- /dev/null +++ b/resources/views/club/pages/shop/redirectMercanet.blade.php @@ -0,0 +1,29 @@ +@extends('club.layout') + +@section('title', __('Redirection vers Mercanet')) +@section('description', __('Page de redirection vers le service de BNP Paribas nommé Mercanet.')) +@section('breadcrumb', request()->route()->getName()) + +@section('container-fluid', true) +@section('no-bottom-space', true) +@section('page-class', 'shop') +@section('metaIndex', 'noindex,nofollow') + +@section('content') +
    +
    + + +

    {{ __('Redirection en cours') }}

    + +
    +
    +@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/club/pages/shop/template-pdf-order.blade.php b/resources/views/club/pages/shop/template-pdf-order.blade.php new file mode 100644 index 00000000..e59fd985 --- /dev/null +++ b/resources/views/club/pages/shop/template-pdf-order.blade.php @@ -0,0 +1,206 @@ + + + + + {{ __('Commande :siteName', ['siteName' => config('app.name')]) }} + + + + + + + {{-- COMMAND CUSTOMER --}} +

    {{ $firstname }}

    +

    {{ $lastname }}

    +

    {{ $email }}

    +

    {{ $postcode }}

    +

    {{ $city }}

    +

    {{ $address }}

    +

    {{ (!empty($phone)) ? $phone : '...' }}

    + {{-- COMMAND DETAILS --}} +

    {{ date('d/m/Y') }}

    +

    {{ $ref }}

    + {{-- COMMAND RECAP --}} +
    + + + + + + + + + + + + @php $totalItems = $total = 0; @endphp + @foreach ($items as $item) + + + + + + + + @php $total += $item['price'] * ($totalItems += $item['pivot']['quantity']); @endphp + @endforeach + +
    {{ __('Produit') }}{{ __('Prix unitaire') }}{{ __('Quantité') }}{{ __('Total') }}
    + {{ $item['picture_alt'] }} + +

    +  {{ $item['typeCustom']->label }}  +

    +

    {{ $item['name'] }}

    +
    {{ e(app('phpMoneyFormatter')->format(new Money(($item['price']) * 100, app('phpMoneyCurrency')))); }}{{ $item['pivot']['quantity'] }}{{ e(app('phpMoneyFormatter')->format(new Money(($item['price'] * $item['pivot']['quantity']) * 100, app('phpMoneyCurrency')))); }}
    +
    +

    {{ __('Montant total :') }} + {{ e(app('phpMoneyFormatter')->format(new Money(($total) * 100, app('phpMoneyCurrency')))); }} +

    +

    {{ __('Frais de port inclus') }}

    +
    +
    + + + diff --git a/resources/views/club/pages/shop/validated.blade.php b/resources/views/club/pages/shop/validated.blade.php new file mode 100644 index 00000000..59eb2073 --- /dev/null +++ b/resources/views/club/pages/shop/validated.blade.php @@ -0,0 +1,46 @@ +@extends('club.layout') + +@section('title', __('Commande validée')) +@section('description', __('Votre commande vient d\'être validée !')) +@section('breadcrumb', request()->route()->getName()) + +@section('container-fluid', true) +@section('no-bottom-space', true) +@section('page-class', 'shop') + +@section('backbtn-url', route('club.home.show')) +@section('backbtn-txt', __('Retour sur le club')) + +@section('content') +
    +
    + + @include('club.icons.trophy') + +

    {{ __('Commande validée') }}

    +
    +
    +

    + {{ __('La commande que vous venez de passer a bien été enregistrée !') }} +

    +
    +
    +
    +
    +
    +

    {{ __('Vous allez recevoir sous peu un email de confirmation avec les détails de votre commande.') }}

    +

    {{ __('Pour rappel, dans le cas où vous auriez choisi le règlement par chèque vous devez le faire parvenir à l\'adresse suivante :') }} +

    +

    + LDC - Les Départ'Aimants Le Gaulois
    + ZI St Laurent - CS 50925
    + 72302 Sablé sur Sarthe. +

    +
    + +
    +
    +@endsection diff --git a/resources/views/modules/flash-messages.blade.php b/resources/views/modules/flash-messages.blade.php index b6ee1768..65f2c1ec 100644 --- a/resources/views/modules/flash-messages.blade.php +++ b/resources/views/modules/flash-messages.blade.php @@ -39,7 +39,7 @@
    + +
    @endif - @if ($errors->any()) + @if (isset($errors) && $errors->any()) + {{-- FIXME: uncomment next lines when club.games & club.gifts are done (+ remove class 'ms-5' line 79) --}}

    {{ __('Bons de réduction') }}

    -
    + {{--

    {{ __('Des jeux') }}

    -
    +
    --}}
    -
    -

    + {{--

    {{ __('Des cadeaux à gagner') }} -

    +

    --}}
    -

    +

    {{ __('Communauté départ\'aimants') }}

    Date: Mon, 7 Oct 2024 17:40:21 +0200 Subject: [PATCH 15/23] feat: :sparkles: add current total of customers in club in club.home --- resources/views/club/pages/home/guest.blade.php | 2 +- resources/views/club/pages/home/homepage.blade.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/club/pages/home/guest.blade.php b/resources/views/club/pages/home/guest.blade.php index 243bdbf0..efcf94af 100644 --- a/resources/views/club/pages/home/guest.blade.php +++ b/resources/views/club/pages/home/guest.blade.php @@ -38,7 +38,7 @@ 'line2Class' => 'fs-3', 'content' => __('Bourse aux échanges, Fonds de carte, Messages'), 'contentClass' => 'text-bg-quint', - 'membersAmount' => 113290, + 'membersAmount' => $customerModelsCount, ]) @include('club.partials.card-club-home', [ 'outterClass' => 'm-3', diff --git a/resources/views/club/pages/home/homepage.blade.php b/resources/views/club/pages/home/homepage.blade.php index 326029c9..094176bc 100644 --- a/resources/views/club/pages/home/homepage.blade.php +++ b/resources/views/club/pages/home/homepage.blade.php @@ -114,7 +114,7 @@

    {{ __('La communauté') }} {{ __('départ’aimant') }} - {{ number_format(113290, 0, ',', ' ') }} {{ __('membres') }} + {{ number_format($customerModelsCount, 0, ',', ' ') }} {{ __('membres') }} Date: Mon, 7 Oct 2024 17:43:53 +0200 Subject: [PATCH 16/23] fix: :wheelchair: add message when favorites models are empty --- .../club/pages/favorites/layout.blade.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/resources/views/club/pages/favorites/layout.blade.php b/resources/views/club/pages/favorites/layout.blade.php index ba77a557..5898ee86 100644 --- a/resources/views/club/pages/favorites/layout.blade.php +++ b/resources/views/club/pages/favorites/layout.blade.php @@ -26,14 +26,18 @@ {{-- PRODUCTS LIST --}}
    - @foreach($models as $model) -
    - @include($__env->yieldContent('blade'), ['model' => $model]) + @if ($models->count()) + @foreach($models as $model) +
    + @include($__env->yieldContent('blade'), ['model' => $model]) +
    + @endforeach +
    + {{ $models->links() }}
    - @endforeach -
    - {{ $models->links() }} -
    + @else +

    {{ __('Aucun élément mis en favoris') }}

    + @endif
    @endsection From a8fb574fa1b0fdad5a13c9316214bca5c0962b04 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Mon, 7 Oct 2024 17:44:16 +0200 Subject: [PATCH 17/23] fix: :wheelchair: add link to the club.home in the club navigation logo --- .../club/layouts/main-menu/offcanvas-menu.blade.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/resources/views/club/layouts/main-menu/offcanvas-menu.blade.php b/resources/views/club/layouts/main-menu/offcanvas-menu.blade.php index 2f9ab3d2..501e5707 100644 --- a/resources/views/club/layouts/main-menu/offcanvas-menu.blade.php +++ b/resources/views/club/layouts/main-menu/offcanvas-menu.blade.php @@ -7,10 +7,12 @@