Preview: ContactController.php
Size: 4.65 KB
/home/getspomw/royalsquad.us/app/Http/Controllers/ContactController.php
<?php
namespace App\Http\Controllers;
use App\Mail\AppointmentMail;
use App\Models\Appointment;
use App\Models\Contact;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
class ContactController extends Controller
{
public function contacts(Request $request)
{
$request->validate([
'name' => 'required',
'email' => 'required|email',
'phone' => 'required|min:10',
'comments' => 'required',
]);
$contact = new Contact();
$contact->name = $request->name;
$contact->email = $request->email;
$contact->phone = $request->phone;
$contact->comments = $request->comments;
$contact->save();
$data = [
'name' => $request->name,
'email' => $request->email,
'phone' => $request->phone,
'comments' => $request->comments,
];
Mail::send('emails.contact', $data, function ($message) use ($data) {
$message->to(env('MAIL_FROM_ADDRESS'))
->subject('New Contact Form Submission');
});
return redirect()->back()->with('success', 'Your message has been sent successfully');
}
public function sendOtp(Request $request)
{
$request->validate(['email' => 'required|email']);
$otp = rand(100000, 999999);
Session::put('otp', $otp);
Session::put('otp_email', $request->email);
try {
$data = [
'otp' => $otp,
'email' => $request->email,
];
Mail::send('emails.email_otp', $data, function ($message) use ($request) {
$message->to($request->email)
->subject('🔐 Your OTP for Appointment Verification');
});
return response()->json(['status' => 'success']);
} catch (Exception $e) {
return response()->json(['status' => 'error', 'message' => $e->getMessage()]);
}
}
public function verifyOtp(Request $request)
{
$request->validate([
'email' => 'required|email',
'otp' => 'required',
]);
if (
Session::get('otp') == $request->otp &&
Session::get('otp_email') == $request->email
) {
return response()->json(['status' => 'success']);
}
return response()->json(['status' => 'error']);
}
public function appointments(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'dept' => 'required',
'number' => 'required',
'subject' => 'required',
'service' => 'required',
'otp' => 'required',
]);
if ($validator->fails()) {
return response()->json([
'status' => 'validation_error',
'errors' => $validator->errors(),
], 422);
}
if (
Session::get('otp') != $request->otp ||
Session::get('otp_email') != $request->email
) {
return response()->json([
'status' => 'otp_error',
'message' => 'Invalid or expired OTP.',
], 422);
}
// Passed OTP check
$contact = new Appointment();
$contact->name = $request->name;
$contact->email = $request->email;
$contact->number = $request->country_code . $request->number;
$contact->dept = $request->dept;
$contact->subject = $request->subject;
$contact->service = $request->service;
$contact->save();
// Clear OTP session after use
Session::forget('otp');
Session::forget('otp_email');
$mailData = [
'name' => $request->name,
'email' => $request->email,
'number' => $request->number,
'dept' => $request->dept,
'subject' => $request->subject,
'service' => $request->service,
];
try {
// Mail::to(env('MAIL_FROM_ADDRESS'))->send(new AppointmentMail($mailData));
Mail::to($request->email)->send(new AppointmentMail($mailData));
return response()->json([
'status' => 'success',
'message' => 'Appointment booked.',
]);
} catch (Exception $e) {
Log::error('Final mail failed: ' . $e->getMessage());
return redirect()->back()->with('error', 'Saved, but email failed.');
}
}
}
Directory Contents
Dirs: 0 × Files: 12