67 lines
2.2 KiB
PHP
67 lines
2.2 KiB
PHP
<?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
|
||
{
|
||
$products = Product::all();
|
||
|
||
$staticPageModel = StaticPage::query()->where('type', StaticPageType::contact)->firstOrFail();
|
||
|
||
return view('fo.pages.contact', compact('products', 'staticPageModel'));
|
||
}
|
||
|
||
/**
|
||
* 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);
|
||
|
||
$receiver_emails = \explode(",", config(\sprintf("mail.contact.%s", $validated->type->value())));
|
||
foreach ($receiver_emails as $email) {
|
||
Mail::to($email)->send(new SendContactMail((object)$validated));
|
||
}
|
||
|
||
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')
|
||
]
|
||
)
|
||
);
|
||
}
|
||
}
|