68 lines
2.0 KiB
PHP
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');
|
|
}
|
|
} |