ldc-legaulois/app/Http/Controllers/Fo/ContactController.php
2024-10-08 12:22:52 +02:00

72 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Enums\ContactFormType;
use App\Enums\StaticPageType;
use App\Exceptions\AbortContactMailer;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\ContactFormRequest;
use App\Jobs\Mails\SendArcadiaMail;
use App\Jobs\Mails\SendPasserelleMail;
use App\Models\MailContactData;
use App\Models\StaticPage;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class ContactController extends Controller
{
/**
* Contact page.
*
* @param \App\Models\StaticPage $staticPageModel
* @return \Illuminate\Contracts\View\View
*/
public function contact(StaticPage $staticPageModel): \Illuminate\Contracts\View\View
{
$staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::contact);
return view('fo.pages.contact', ['staticPageModel' => $staticPageModel]);
}
/**
* Send contact form data.
*
* @param \App\Http\Requests\Fo\ContactFormRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function contactSubmit(ContactFormRequest $request): \Illuminate\Http\RedirectResponse
{
return DB::transaction(function () use ($request) {
try {
$data = new MailContactData($request->safe()->except(['g-recaptcha-response', 'joinFile']));
// Send to Passerelle if it is a compalin about a product.
if ($request->type == ContactFormType::complain->value) {
$joinFilePath = null;
$joinFile = '';
$uniqIdDirectory = \uniqid();
if ($request->file('joinFile')) {
$joinFile = Storage::disk('local')->put(
sprintf('public/tmp/%s', $uniqIdDirectory),
$request->file('joinFile')
);
$joinFilePath = storage_path('app/' . $joinFile);
}
\dispatch(new SendPasserelleMail($data, $joinFilePath));
} else {
\dispatch(new SendArcadiaMail($data));
}
return back()->with('success', __('Votre message a été envoyé avec succès'));
} catch (AbortContactMailer $e) {
Log::error('Fail to build mail from complain page ', ['exception' => $e]);
} //end try
return back()->withInput()->with(
'error',
'Une erreur est survenue durant l\'envoi de votre message. Veuillez réessayer ultérieurement.'
);
});
}
}