Add all files
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
<?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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user