2025-09-02 16:48:56 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Front;
|
|
|
|
|
|
2025-09-03 16:17:26 +02:00
|
|
|
use App\Enums\Contact\ContactFormType;
|
2025-09-05 17:05:30 +02:00
|
|
|
use App\Exceptions\AbortContactMailer;
|
|
|
|
|
use App\Http\Requests\Front\Contact\ContactRequest;
|
|
|
|
|
use App\Jobs\Mails\SendContactMail;
|
2025-10-17 14:27:16 +02:00
|
|
|
use App\Models\ContactCount;
|
2026-02-10 15:43:47 +01:00
|
|
|
use App\Models\MailContactData;
|
2025-09-05 17:05:30 +02:00
|
|
|
use Illuminate\Support\Facades\Log;
|
2026-02-10 15:43:47 +01:00
|
|
|
use Illuminate\Support\HtmlString;
|
2025-09-05 17:05:30 +02:00
|
|
|
use LDC\LDCCRM\Enums\ApiError;
|
|
|
|
|
use LDC\LDCCRM\Exceptions\ApiErrorException;
|
|
|
|
|
use LDC\LDCCRM\Exceptions\CrmException;
|
|
|
|
|
use LDC\LDCCRM\Models\SingleOptin;
|
2025-09-02 16:48:56 +02:00
|
|
|
|
|
|
|
|
class ContactController
|
|
|
|
|
{
|
2026-01-08 15:52:35 +01:00
|
|
|
/**
|
|
|
|
|
* Show contact index page.
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Contracts\View\View
|
|
|
|
|
*/
|
|
|
|
|
public function index(): \Illuminate\Contracts\View\View
|
2025-09-02 16:48:56 +02:00
|
|
|
{
|
|
|
|
|
$types = ContactFormType::toArray();
|
|
|
|
|
return view('front.pages.contact.index', compact('types'));
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-08 15:52:35 +01:00
|
|
|
/**
|
|
|
|
|
* Show contact show page.
|
|
|
|
|
*
|
2026-02-10 15:43:47 +01:00
|
|
|
* @param string $slug
|
2026-01-08 15:52:35 +01:00
|
|
|
* @return \Illuminate\Contracts\View\View
|
|
|
|
|
*/
|
|
|
|
|
public function show(string $slug): \Illuminate\Contracts\View\View
|
2025-09-02 16:48:56 +02:00
|
|
|
{
|
|
|
|
|
$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'));
|
|
|
|
|
}
|
2025-09-05 17:05:30 +02:00
|
|
|
|
2026-01-08 15:52:35 +01:00
|
|
|
/**
|
|
|
|
|
* Contact send.
|
|
|
|
|
*
|
2026-02-10 15:43:47 +01:00
|
|
|
* @param \App\Http\Requests\Front\Contact\ContactRequest $request
|
2026-01-08 15:52:35 +01:00
|
|
|
* @return \Illuminate\Http\RedirectResponse
|
|
|
|
|
*/
|
|
|
|
|
public function send(ContactRequest $request): \Illuminate\Http\RedirectResponse
|
2025-09-05 17:05:30 +02:00
|
|
|
{
|
2026-01-08 15:52:35 +01:00
|
|
|
$data = $request->validated();
|
|
|
|
|
$messageContact = new MailContactData($data);
|
|
|
|
|
$contactMessage = "";
|
|
|
|
|
$hasContactError = false;
|
|
|
|
|
$newsletterMessage = null;
|
2025-09-05 17:05:30 +02:00
|
|
|
$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;
|
2026-01-08 15:52:35 +01:00
|
|
|
$contactMessage = trans('Une erreur est survenue lors de l\'envoi du message de contact.');
|
2025-09-05 17:05:30 +02:00
|
|
|
}
|
|
|
|
|
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;
|
2026-02-10 15:43:47 +01:00
|
|
|
// phpcs:ignore Generic.Files.LineLength
|
|
|
|
|
$newsletterMessage = trans('Une erreur est survenue lors de l\'inscription à la newsletter, merci de réessayer ultérieurement.');
|
2025-09-05 17:05:30 +02:00
|
|
|
} catch (CrmException $e) {
|
|
|
|
|
report($e);
|
|
|
|
|
$hasNewsletterError = true;
|
2026-02-10 15:43:47 +01:00
|
|
|
// phpcs:ignore Generic.Files.LineLength
|
|
|
|
|
$newsletterMessage = trans('Une erreur est survenue lors de l\'inscription à la newsletter, merci de réessayer ultérieurement.');
|
2025-09-05 17:05:30 +02:00
|
|
|
}
|
|
|
|
|
}
|
2025-10-17 14:27:16 +02:00
|
|
|
ContactCount::updateOrInsert(
|
2026-01-08 15:52:35 +01:00
|
|
|
['type' => $data['enumType']],
|
2025-10-17 14:27:16 +02:00
|
|
|
['submissions' => \DB::raw('submissions + 1')]
|
|
|
|
|
);
|
|
|
|
|
|
2025-09-05 17:05:30 +02:00
|
|
|
$contactMessage = trans('Votre message a bien été envoyé.');
|
2026-02-10 15:43:47 +01:00
|
|
|
$message = $newsletterMessage ? $contactMessage . ' <br /> ' . $newsletterMessage : $contactMessage;
|
2025-09-05 17:05:30 +02:00
|
|
|
return redirect()->back()
|
2026-02-10 15:43:47 +01:00
|
|
|
->with(
|
|
|
|
|
$hasContactError || $hasNewsletterError ? 'info' : 'success',
|
|
|
|
|
new HtmlString($message)
|
|
|
|
|
);
|
2025-09-05 17:05:30 +02:00
|
|
|
}
|
2025-09-02 16:48:56 +02:00
|
|
|
}
|