Sh3ll
OdayForums


Server : Apache
System : Linux 145.162.205.92.host.secureserver.net 5.14.0-611.45.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 05:56:53 EDT 2026 x86_64
User : tradze ( 1001)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /home/tradze/www/app/Modules/Users/Http/Controllers/Api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/tradze/www/app/Modules/Users/Http/Controllers/Api/ApiClientGeneral.php
<?php

namespace App\Modules\Users\Http\Controllers\Api;

use App\Http\Controllers\ApiController;
use App\Modules\Accounts\Models\Setting;
use App\Modules\Faq\Models\Faq;
use App\Modules\Pages\Models\Page;
use App\Modules\Schedules\Models\BookingOrder;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use App\Modules\Testimonials\Models\SalonReviews;
use Illuminate\Support\Facades\Validator;
use Carbon\Carbon;
use App\Modules\Pages\Http\Requests\ContactFormRequest;
use App\Modules\Pages\Models\ContactForm;
use Illuminate\Support\Facades\Mail;

class ApiClientGeneral extends ApiController
{

    /**
    * Get default radius
    */
    public function getDefaultRadius()
    {
        $radius = Setting::where('key', 'default_radius')->select('value')->first(); // Default to 10 if not set
        $radius = $radius ? $radius->value : 10;

        return response([
            'success' => true,
            'message' => null,
            'data' => ['radius' => $radius],
        ], 200);
    }

    /**
     * Get FAQ
     */
    public function get_faq()
    {
        $results = Faq::all();
        $items = [];
        foreach ($results as $res)
            $items[] = [
                'id' => $res->id,
                'name' => $res->name,
                'body' => html_entity_decode(strip_tags(preg_replace('#<a.*?>(.*?)</a>#i', '\1', $this->formatText($res->body)))),
            ];


        //return booking data
        return response([
            'success' => true,
            'message' => null,
            'items_no' => count($items),
            'items' => $items,
        ], 200);
    }

    /**
     * Get Legals
     */
    public function get_legals()
    {
        $object = Page::where('slug', 'legal')->first();

        $data = [
            'title' => $object->title,
            'shortText' => $this->formatText($object->subtitle),
            'body' => $object->body,
            'url' => url('legal'),
        ];

        //return booking data
        return response([
            'success' => true,
            'message' => null,
            'data' => $data,
        ], 200);
    }

    /**
     * Get Legals
     */
    public function get_customer_service()
    {

        $object = Page::where('slug', 'contact')->first();

        $data = [
            'title' => $object->title,
            'shortText' => $object->subtitle,
            'body' => $object->body,
            'url' => url('contact'),
            // 'phone'=>env('API_CONTACT_PHONE'),
            'email' => env('API_CONTACT_EMAIL'),
        ];

        //return booking data
        return response([
            'success' => true,
            'message' => null,
            'data' => $data,
        ], 200);
    }

    /**
     * Get Legals
     */
    public function get_corporate()
    {
        $object = Page::where('slug', 'commercial')->first();

        $data = [
            'title' => $object->title,
            'shortText' => $object->subtitle,
            'body' => str_limit(strip_tags($object->body), 455, ''),
            'image' => $object->ImageFeatureUrl,
            'url' => url('commercial'),
        ];

        //return booking data
        return response([
            'success' => true,
            'message' => null,
            'data' => $data,
        ], 200);
    }

    /**
     * Get therapist contract
     */
    public function get_therapist_contract()
    {

        $data = [
            'file_link' => url('documents/Tradze-service-provider-agreement.pdf'),
        ];

        //return booking data
        return response([
            'success' => true,
            'message' => null,
            'data' => $data,
        ], 200);
    }

    // public function postReviewAndRating(Request $request)
    // {
    //     $validator = Validator::make($request->all(), [
    //         'therapist_id' => 'required|numeric|min:1',
    //         'booking_id' => 'required',
    //         'salon_rating'   => 'required|integer|min:1|max:5',
    //         'atmosphere'     => 'required|integer|min:1|max:5',  // Fixed rule
    //         'sanitation'     => 'required|integer|min:1|max:5',
    //         'employees'      => 'required|integer|min:1|max:5',
    //         'satisfaction'   => 'required|integer|min:1|max:5',
    //     ]);

    //     if ($validator->fails()) {
    //         $errFields = [];
    //         foreach ($request->except('api_token') as $field => $value) {
    //             if ($validator->errors()->first($field))
    //                 $errFields[$field] = $validator->errors()->first($field);
    //         } //endforeach

    //         return response([
    //             'success' => false,
    //             'message' => 'All the fields are required!',
    //             'data' => [],
    //             'errors' => $errFields,
    //         ], 422);
    //     } //endif validator fails

    //     $user = $this->user;

    //     $data = [
    //         'user_id' => $user->id,
    //         'salon_id' => $request->salon_id ?? null,
    //         'therapist_id' => $request->therapist_id,
    //         'booking_id' => $request->booking_id,
    //         'salon_rating' => $request->salon_rating,
    //         'atmosphere' => $request->atmosphere,
    //         'sanitation' => $request->sanitation,
    //         'employees' => $request->employees,
    //         'satisfaction' => $request->satisfaction,
    //         'review' => $request->review,
    //     ];

    //     SalonReviews::create($data);

    //     $booking = BookingOrder::where('user_id', $user->id)
    //         ->where('id', $request->booking_id)
    //         ->first(); // Get the first matching record

    //     if ($booking) {
    //         $booking->update(['is_modal_triggered' => 1]);
    //     }

    //     //return booking data
    //     return response([
    //         'success' => true,
    //         'message' => 'Review added successfully',
    //     ], 200);
    // }

    public function postReviewAndRating(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'therapist_id' => 'required|numeric|min:1',
            'booking_id' => 'required',
            'salon_rating'   => 'required|integer|min:1|max:5',
            'atmosphere'     => 'required|integer|min:1|max:5',
            'sanitation'     => 'required|integer|min:1|max:5',
            'employees'      => 'required|integer|min:1|max:5',
            'satisfaction'   => 'required|integer|min:1|max:5',
        ]);

        if ($validator->fails()) {
            $errFields = [];
            foreach ($request->except('api_token') as $field => $value) {
                if ($validator->errors()->first($field))
                    $errFields[$field] = $validator->errors()->first($field);
            }

            return response([
                'success' => false,
                'message' => 'All the fields are required!',
                'data' => [],
                'errors' => $errFields,
            ], 422);
        }

        $user = $this->user;

        // Check if a review already exists for this booking
        $existingReview = SalonReviews::where('booking_id', $request->booking_id)->first();
        if ($existingReview) {
            return response([
                'success' => false,
                'message' => 'Review already completed for this booking',
            ], 409); // 409 Conflict
        }

        // Create review
        $data = [
            'user_id' => $user->id,
            'user_name' => $user->name,
            'salon_id' => $request->salon_id ?? null,
            'therapist_id' => $request->therapist_id,
            'booking_id' => $request->booking_id,
            'salon_rating' => $request->salon_rating,
            'atmosphere' => $request->atmosphere,
            'sanitation' => $request->sanitation,
            'employees' => $request->employees,
            'satisfaction' => $request->satisfaction,
            'review' => $request->review,
        ];

        SalonReviews::create($data);

        // Update booking
        $booking = BookingOrder::where('user_id', $user->id)
            ->where('id', $request->booking_id)
            ->first();

        if ($booking) {
            $booking->update(['is_modal_triggered' => 1]);
        }

        return response([
            'success' => true,
            'message' => 'Review added successfully',
        ], 200);
    }

    public function reviewModal(Request $request)
    {
        try {
            $user = $this->user;
            $lastestBooking = BookingOrder::where('user_id', $user->id)
                ->latest('id') // shorthand for orderBy('id', 'desc')
                ->first();

            if (!$lastestBooking) {
                return response([
                    'success' => false,
                    'message' => 'No booking found',
                ], 200);
            }

            $is_modal_triggered = $lastestBooking->is_modal_triggered;
            $booking_id = $lastestBooking->id;
            $reviews = SalonReviews::where('booking_id', $booking_id)->first();

            if (!$reviews && $is_modal_triggered == 0) {
                return response([
                    'success' => true,
                    'message' => 'Leave your feedback',
                    'data' => [
                        'booking_id' => $lastestBooking->id,
                        'booking_info' => json_decode($lastestBooking->orderInfo)
                    ],
                ], 200);
            }

            return response([
                'success' => false,
                'message' => 'No booking found',
            ], 200);
        } catch (\Throwable $th) {
            return response([
                'success' => false,
                'message' => $th->getMessage(),
            ], 200);
        }
    }

    public function handelSkipCancel(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'booking_id' => 'required',
            ]);

            if ($validator->fails()) {
                return response($validator->getMessageBag());
            }


            $user = $this->user;
            $booking = BookingOrder::where('id', $request->booking_id)
                ->where('user_id', $user->id)
                ->first(); // Get the first matching record

            if ($booking) {
                $booking->update(['is_modal_triggered' => 1]);
            }

            return response([
                'success' => true,
                'message' => 'Declined!',
            ], 200);
        } catch (\Throwable $th) {
            return response([
                'success' => false,
                'message' => $th->getMessage(),
            ], 500);
        }
    }

    /**
     * Contact form
     *
     * @return Response
     */
    public function contactUs(Request $request)
    {

        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'phone' => 'required',
            'email' => 'required',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return response()->json(['success' => false, 'message' => $validator->errors()->first()], 400);
        }
        //create data array
        $data = [
            'name' => $request->name,
            'phone' => $request->phone,
            'email' => $request->email,
            'body' => $request->body,
        ];

        //save new contact form
        $obj = ContactForm::create($data);

        $responseData = ['success' => true, 'message' => 'Thank you! We will contact you as soon as possible.'];

        //send email
        Mail::send('pages::frontend.emails.contactform', ['data' => $data], function ($m) use ($data) {
            $m->from(env('MAIL_FROM'), env('APP_NAME'));
            $m->to(env('MAIL_ADMIN_ADDR'), env('MAIL_ADMIN_NAME'));
            $m->bcc(explode(',', env('MAIL_NEWORDER_BCC')), env('MAIL_NEWORDER_BCC_NAME'));
            $m->subject(env('APP_NAME') . ' – Contact form');
        });
        //redirect
        return response(json_encode($responseData), 200);
    }
}

ZeroDay Forums Mini