ldc-legaulois/app/Http/Controllers/Fo/ContactController.php

97 lines
3.3 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\SendNLMail;
use App\Jobs\Mails\SendPasserelleMail;
use App\Models\MailContactData;
use App\Models\StaticPage;
use Illuminate\Support\Facades\App;
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', 'locale'])
);
$locale = $request->input('locale');
$joinFilePath = ContactFormType::make($request->type)->hasFileInput()
? $this->storeFile($request->file('joinFile'))
: null;
// Send to Passerelle if it is a complain about a product.
if (isset($locale) && ContactFormType::make($request->input('locale'))->equals(ContactFormType::nl)) {
app()->setLocale('nl');
\dispatch(new SendNLMail($data, $joinFilePath));
} elseif (ContactFormType::make($request->type)->equals(ContactFormType::complain)) {
\dispatch(new SendPasserelleMail($data, $joinFilePath));
} else {
\dispatch(new SendArcadiaMail($data, $joinFilePath));
}
return back()->with('success', trans('contact.message_contact_send'));
} catch (AbortContactMailer $e) {
Log::error('Fail to build mail from complain page ', ['exception' => $e]);
} //end try
return back()->withInput()->with(
'error',
trans('contact.message_contact_failed')
);
});
}
/**
* Store the file sent in the request if it exists.
*
* @param \Illuminate\Http\UploadedFile|null $file
*
* @return string|null
*/
private function storeFile(\Illuminate\Http\UploadedFile|null $file): string|null
{
$joinFilePath = null;
$joinFile = '';
if ($file) {
$uniqIdDirectory = \uniqid();
$joinFile = Storage::disk('local')->put(
sprintf('public/tmp/%s', $uniqIdDirectory),
$file
);
$joinFilePath = storage_path('app/' . $joinFile);
}
return $joinFilePath;
}
}