97 lines
3.3 KiB
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;
|
|
}
|
|
}
|