ispt4.0_laravel/app/Http/Controllers/FormController.php

64 lines
2.0 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Models\FormAccessToken;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Carbon\Carbon;
use Illuminate\Support\Facades\Mail;
class FormController extends Controller
{
public function createUserForm(Request $request)
{
$token = $request->query('token');
$tokenRecord = FormAccessToken::where('token', $token)->first();
if (!$tokenRecord || $tokenRecord->expires_at <= now()) {
if ($tokenRecord) {
$email = $tokenRecord->email;
$tokenRecord->delete(); // Apaga o registro do token expirado
// Reenviar o email
$this->gerarEnviarEmail($email);
return redirect('/login')->with('success', 'O token anterior expirou, consequentemente,um novo link foi remetido para o seu email.');
} else {
return redirect('/login')->with('danger', 'O token é inválido.');
}
} else {
// Token é válido e ainda não expirou
return view('email/FormAdmin', compact('tokenRecord'));
}
}
public function enviarEmail(Request $request)
{
$email = $request->input('email');
$this->gerarEnviarEmail($email);
return back()->with('status', 'Email enviado com sucesso!');
}
protected function gerarEnviarEmail($email)
{
// Gerar um token único
$token = Str::random(60);
// Definir o tempo de expiração do token (ex: 1 hora a partir de agora)
$expiresAt = Carbon::now()->addHour();
// Criar registro na tabela form_access_tokens
FormAccessToken::create([
'token' => $token,
'email' => $email,
'expires_at' => $expiresAt,
]);
// Enviar email
Mail::send('email.email', ['token' => $token], function ($message) use ($email) {
$message->to($email);
$message->subject('Formulário "Ispt4.0"');
});
}
}