67 lines
2.1 KiB
PHP
67 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Controllers\PublicSite;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\PublicSite\PartnerInquiryRequest;
|
|
use App\Mail\PartnerInquiry;
|
|
use App\Models\SiteSetting;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use Throwable;
|
|
|
|
final class PartnerInquiryController extends Controller
|
|
{
|
|
private const string DUPLICATE_SESSION_KEY = 'partner_inquiry_hash';
|
|
|
|
public function store(PartnerInquiryRequest $request): RedirectResponse
|
|
{
|
|
if (filled($request->input('website'))) {
|
|
return $this->success();
|
|
}
|
|
|
|
$validated = $request->validated();
|
|
|
|
if (session()->get(self::DUPLICATE_SESSION_KEY) === $this->hash($validated)) {
|
|
return $this->success();
|
|
}
|
|
|
|
session()->put(self::DUPLICATE_SESSION_KEY, $this->hash($validated));
|
|
|
|
try {
|
|
$settings = SiteSetting::instance();
|
|
|
|
if (filled($settings->email)) {
|
|
Mail::to($settings->email)->send(new PartnerInquiry([
|
|
'Nome' => $validated['nome'],
|
|
'Nome profissional ou empresa' => $validated['empresa'] ?? null,
|
|
'E-mail' => $validated['email'],
|
|
'Atuação ou serviço' => $validated['atuacao'],
|
|
'Área de atendimento' => $validated['area_atendimento'],
|
|
'Mensagem' => $validated['mensagem'],
|
|
'Portfólio ou redes' => $validated['portfolio_redes'] ?? null,
|
|
'Telefone' => $validated['telefone'] ?? null,
|
|
]));
|
|
}
|
|
} catch (Throwable $exception) {
|
|
Log::error('Falha ao enviar consulta de parceiro', ['exception' => $exception::class]);
|
|
}
|
|
|
|
return $this->success();
|
|
}
|
|
|
|
/** @param array<string, mixed> $validated */
|
|
private function hash(array $validated): string
|
|
{
|
|
return hash('sha256', serialize($validated));
|
|
}
|
|
|
|
private function success(): RedirectResponse
|
|
{
|
|
return redirect()->route('contact')->with('status', 'partner-inquiry-sent');
|
|
}
|
|
}
|