ldc-tregalette/app/Http/Controllers/Fo/ContactController.php

70 lines
2.3 KiB
PHP
Raw Normal View History

2023-12-15 15:53:55 +00:00
<?php
namespace App\Http\Controllers\Fo;
use App\Enums\Contact\ObjectEnum;
use App\Enums\StaticPageType;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\ContactFormRequest;
use App\Mail\SendContactMail;
use App\Models\Product;
use App\Models\StaticPage;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Arr;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Mail;
class ContactController extends Controller
{
/**
* Display contact from
*
* @return \Illuminate\Contracts\View\View
*/
public function contact(): View
{
2024-01-26 16:24:14 +01:00
/** @var \App\Models\Product $productModels */
$productModels = Product::all();
2023-12-15 15:53:55 +00:00
2024-01-26 16:24:14 +01:00
/** @var \App\Models\StaticPage $staticPageModel */
2023-12-19 08:32:01 +01:00
$staticPageModel = StaticPage::query()->where('type', StaticPageType::contact)->firstOrFail();
2023-12-15 15:53:55 +00:00
2024-01-26 16:24:14 +01:00
return view('fo.pages.contact', compact('productModels', 'staticPageModel'));
2023-12-15 15:53:55 +00:00
}
/**
* Submit contact form
*
* @param \App\Http\Requests\Fo\ContactFormRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function contactSubmit(ContactFormRequest $request): RedirectResponse
{
// * Cast expected types
$validated = $request->validated();
Arr::set($validated, 'type', ObjectEnum::make(Arr::get($validated, 'type')));
Arr::set($validated, 'product', Product::query()
->where('id', Arr::get($validated, 'product'))->first());
$expiration_date = Arr::get($validated, 'expiration_date');
Arr::set($validated, 'expiration_date', $expiration_date ?
Carbon::createFromFormat('Y-m-d', $expiration_date) : null);
2024-01-05 10:43:50 +01:00
$receiver_emails = \explode(",", config(\sprintf("mail.contact.%s", $validated['type']->name)));
2023-12-19 16:46:34 +01:00
foreach ($receiver_emails as $email) {
Mail::to($email)->send(new SendContactMail((object)$validated));
}
2023-12-15 15:53:55 +00:00
return redirect()->route('fo.contact')
->with(
'success',
trans(
'Bonjour, votre message a bien été transmis. Cordialement, l’équipe :app_name.',
[
'app_name' => config('app.name')
]
)
);
}
}