ldc-groupe/app/Http/Controllers/Front/ContactController.php

84 lines
3.2 KiB
PHP
Raw Normal View History

2025-09-02 16:48:56 +02:00
<?php
namespace App\Http\Controllers\Front;
use App\Enums\Contact\ContactFormType;
use App\Exceptions\AbortContactMailer;
use App\Http\Requests\Front\Contact\ContactRequest;
use App\Jobs\Mails\SendContactMail;
use App\Models\ContactCount;
2026-02-10 15:43:47 +01:00
use App\Models\MailContactData;
2026-02-12 17:14:08 +01:00
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
2026-02-10 15:43:47 +01:00
use Illuminate\Support\HtmlString;
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
{
/**
* Contact send.
*
2026-02-10 15:43:47 +01:00
* @param \App\Http\Requests\Front\Contact\ContactRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function send(ContactRequest $request): \Illuminate\Http\RedirectResponse
{
2026-02-12 17:14:08 +01:00
$validatedData = $request->validated();
$messageContact = new MailContactData($validatedData);
$contactMessage = "";
$hasContactError = false;
$newsletterMessage = null;
$hasNewsletterError = false;
2026-02-12 17:14:08 +01:00
/** @var boolean $isNewsletter */
2026-02-24 11:28:55 +01:00
$isNewsletter = isset($validatedData['newsletter']) ? $validatedData['newsletter'] : false;
2026-02-12 17:14:08 +01:00
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.');
}
2026-02-12 17:14:08 +01:00
if ($isNewsletter) {
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.');
} 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.');
}
}
ContactCount::updateOrInsert(
2026-02-12 17:14:08 +01:00
['type' => $validatedData['enumType']],
['submissions' => DB::raw('submissions + 1')]
);
$contactMessage = trans('Votre message a bien été envoyé.');
2026-02-10 15:43:47 +01:00
$message = $newsletterMessage ? $contactMessage . ' <br /> ' . $newsletterMessage : $contactMessage;
return redirect()->back()
2026-02-10 15:43:47 +01:00
->with(
$hasContactError || $hasNewsletterError ? 'info' : 'success',
new HtmlString($message)
);
}
2025-09-02 16:48:56 +02:00
}