PHP 8.3.30
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

Name Size Perms Modified Actions
2.85 KB lrw-rw-rw- 2025-09-18 05:50:45
Edit Download
315 B lrw-rw-rw- 2025-09-17 06:52:53
Edit Download
2.74 KB lrw-rw-rw- 2025-09-17 06:52:53
Edit Download
6.83 KB lrw-rw-rw- 2025-09-17 06:52:53
Edit Download
4.65 KB lrw-rw-rw- 2026-02-09 06:01:39
Edit Download
77 B lrw-rw-rw- 2025-09-17 06:52:53
Edit Download
2.80 KB lrw-rw-rw- 2025-09-18 05:51:38
Edit Download
616 B lrw-r--r-- 2026-04-19 15:59:24
Edit Download
3.58 KB lrw-rw-rw- 2025-09-18 05:56:23
Edit Download
1.48 KB lrw-rw-rw- 2025-09-17 06:52:53
Edit Download
8.60 KB lrw-rw-rw- 2025-09-18 05:56:47
Edit Download
8.22 KB lrw-rw-rw- 2026-02-09 07:03:26
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).