Files
Virtnet.bond/extensions/Others/ContactPage/Livewire/Contact/ContactForm.php
2025-11-30 11:57:22 +01:00

68 lines
2.0 KiB
PHP

<?php
namespace Paymenter\Extensions\Others\ContactPage\Livewire\Contact;
use Livewire\Component;
use App\Traits\Captchable;
use Illuminate\Support\Facades\RateLimiter;
use Livewire\Attributes\Validate;
use Paymenter\Extensions\Others\ContactPage\Models\ContactMessage;
class ContactForm extends Component
{
use Captchable;
#[Validate('required|string|max:255')]
public string $name = '';
#[Validate('required|email|max:255')]
public string $email = '';
#[Validate('nullable|string|max:255')]
public string $subject = '';
#[Validate('required|string|min:10|max:2000')]
public string $message = '';
public bool $sent = false;
public function submit()
{
$this->validate();
$key = 'contact-form:' . request()->ip();
if (RateLimiter::tooManyAttempts($key, 3)) {
$this->addError('message', 'Too many contact attempts. Please try again in 60 seconds.');
return;
}
RateLimiter::increment($key, 60);
try {
$contactMessage = ContactMessage::create([
'name' => $this->name,
'email' => $this->email,
'subject' => $this->subject ?: 'Contact Form Submission',
'message' => $this->message,
'ip_address' => request()->ip(),
'user_agent' => request()->userAgent(),
]);
RateLimiter::clear($key);
$this->reset(['name', 'email', 'subject', 'message']);
$this->sent = true;
session()->flash('success', 'Thank you for your message! We will get back to you soon.');
} catch (\Exception $e) {
$this->addError('message', 'There was an error sending your message. Please try again later.');
\Log::error('Contact form error: ' . $e->getMessage());
}
}
public function render()
{
return view('contactpage::contact-form');
}
}