ldc-bien-etre-animal/app/Http/Controllers/Front/ContactController.php

83 lines
2.9 KiB
PHP
Raw Permalink Normal View History

2026-08-14 18:19:25 +02:00
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Front;
use App\Enums\Country;
use App\Events\ContactRequested;
use App\Http\Requests\ContactRequest;
2026-08-14 18:19:25 +02:00
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;
use Ramsey\Uuid\Uuid;
2026-08-14 18:19:25 +02:00
use Uwil\LaravelCommon\Controllers\CommonController;
2026-09-03 16:52:27 +02:00
use Uwil\LaravelSchemaOrg\Services\SchemaOrgService;
2026-08-14 18:19:25 +02:00
class ContactController extends CommonController
{
2026-09-03 16:52:27 +02:00
public function index(SchemaOrgService $schemaOrg): Response
2026-08-14 18:19:25 +02:00
{
2026-09-03 16:52:27 +02:00
$trans = trans('contact_page');
2026-08-14 18:19:25 +02:00
return Inertia::render('front/Pages/Contact', [
'metaTitle' => $trans['meta']['seo_title'],
'metaDescription' => $trans['meta']['seo_description'],
2026-09-03 16:52:27 +02:00
'profiles' => [
['label' => 'Consommateur', 'value' => 'consommateur'],
['label' => 'Éleveur', 'value' => 'eleveur'],
],
2026-09-03 16:52:27 +02:00
'countries' => [
['label' => Country::france->label('fr'), 'value' => Country::france->iso2()],
['label' => Country::belgium->label('fr'), 'value' => Country::belgium->iso2()],
],
2026-08-14 18:19:25 +02:00
'communities' => [
['label' => 'La Communauté Amont', 'value' => 'amont'],
['label' => 'La Communauté Aval', 'value' => 'aval'],
['label' => 'La Communauté Transformateurs', 'value' => 'transformateurs'],
['label' => 'La Communauté Scientifique', 'value' => 'scientifique'],
['label' => 'La Communauté Autres Parties Prenantes', 'value' => 'autres'],
],
2026-09-03 16:52:27 +02:00
'schemas' => [
$schemaOrg->setWebPage()
->headline($trans['meta']['seo_title'])
->description($trans['meta']['seo_description'])
->name($trans['header']['title'])
->isAccessibleForFree(true)
->keywords(['page'])
->dateCreated(new \DateTimeImmutable('2026-09-03'))
->dateModified(new \DateTimeImmutable('2026-09-03'))
->datePublished(new \DateTimeImmutable('2026-09-03')),
],
2026-08-14 18:19:25 +02:00
]);
}
public function store(ContactRequest $request): RedirectResponse
2026-08-14 18:19:25 +02:00
{
ContactRequested::dispatch(
$request->safe()->except('attachment'),
$this->getRequestFileAttachmentFrom($request),
);
2026-08-14 18:19:25 +02:00
$request->hitEmailRateLimit();
2026-08-14 18:19:25 +02:00
return back()->with('success', true);
}
/** @return array{name:string,mime:string,content:string}|null */
private function getRequestFileAttachmentFrom(ContactRequest $request): ?array
{
$file = $request->file('attachment');
if ($file === null) {
return null;
}
return [
'name' => Uuid::uuid7() . '.' . $file->extension(),
'mime' => $file->getMimeType(),
'content' => base64_encode($file->getContent()),
];
}
}