ldc-groupe/app/Http/Controllers/Front/ContactController.php
2025-10-21 12:47:42 +02:00

84 lines
3.2 KiB
PHP

<?php
namespace App\Http\Controllers\Front;
use App\Enums\Contact\ContactFormType;
use App\Exceptions\AbortContactMailer;
use App\Http\Requests\Front\Contact\ContactRequest;
use App\Models\MailContactData;
use App\Jobs\Mails\SendContactMail;
use App\Models\ContactCount;
use Illuminate\Support\Facades\Log;
use LDC\LDCCRM\Enums\ApiError;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
use LDC\LDCCRM\Models\SingleOptin;
class ContactController
{
public function index()
{
$types = ContactFormType::toArray();
return view('front.pages.contact.index', compact('types'));
}
public function show(string $slug)
{
$enumType = collect(ContactFormType::all())->first(function ($enum) use ($slug) {
return $enum->slug() === $slug;
});
if (!$enumType) {
return redirect()->route('front.contact.index');
}
return view('front.pages.contact.show', compact('enumType'));
}
public function send(ContactRequest $request)
{
$data = $request->validated();
$messageContact = new MailContactData($data);
$contactMessage = "";
$hasContactError = false;
$newsletterMessage = null;
$hasNewsletterError = false;
try {
dispatch(new SendContactMail($messageContact))
->onConnection('database')
->onQueue('database');
} catch (AbortContactMailer $e) {
Log::error('Fail to build mail from contact page', [
'exception' => $e
]);
$hasContactError = true;
$contactMessage = trans('Une erreur est survenue lors de l\'envoi du message de contact.');
}
if (!empty($data['newsletter']) && $data['newsletter']) {
try {
SingleOptin::setStatus($request->email, true);
$newsletterMessage = trans("Votre inscription à la newsletter a été prise en compte");
} catch (ApiErrorException $e) {
if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists)) {
$newsletterMessage = trans("Vous êtes déjà inscrit avec cette adresse email");
}
report($e);
$hasNewsletterError = true;
$newsletterMessage = trans('Une erreur est survenue lors de l\'inscription à la newsletter, merci de réessayer ultérieurement.');
} catch (CrmException $e) {
report($e);
$hasNewsletterError = true;
$newsletterMessage = trans('Une erreur est survenue lors de l\'inscription à la newsletter, merci de réessayer ultérieurement.');
}
}
ContactCount::updateOrInsert(
['type' => $data['enumType']],
['submissions' => \DB::raw('submissions + 1')]
);
$contactMessage = trans('Votre message a bien été envoyé.');
$message = $newsletterMessage ? $contactMessage. ' <br /> ' . $newsletterMessage : $contactMessage;
return redirect()->back()
->with($hasContactError || $hasNewsletterError ? 'info' : 'success', new \Illuminate\Support\HtmlString($message));
}
}