82 lines
3.2 KiB
PHP
82 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));
|
|
}
|
|
}
|