HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/AdminSettingController.php
<?php

namespace App\Http\Controllers\Api;

use App\AdminSettings;
use App\Http\Controllers\Controller;
use App\Http\Requests\AdminSettingUpdateRequest;
use App\User;
use App\WebSetting;
use App\Country;
use App\UserSettingsNotification;
use Auth;
use Carbon\Carbon;
use Config;
use DB;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use Throwable;
use App\Library\S3Library;
use Illuminate\Support\Facades\Hash;
use App\Http\Requests\UserIdRequest;
use Storage;

class AdminSettingController extends Controller
{
    public function updateAdminSettings(AdminSettingUpdateRequest $request)
    {
        try {
            $validated = $request->validated();
            DB::beginTransaction();
            $auth = Auth::user();
            $admin_id = auth()->user()->id;

            $data = $request->all();

            $AdminSettings = AdminSettings::firstOrNew(['user_id' => $admin_id]);
            $AdminSettings->user_id = $admin_id;

            if (isset($data['ondemand'])) {
                $ondemand = Carbon::parse($data['ondemand'])->format('H:i:s');
                $AdminSettings->ondemand = $ondemand;
            }
            if (isset($data['home_visit'])) {
                $home_visit = Carbon::parse($data['home_visit'])->format('H:i:s');
                $AdminSettings->home_visit = $home_visit;
            }
            if (isset($data['schedule_appointment'])) {
                $schedule_appointment = Carbon::parse($data['schedule_appointment'])->format('H:i:s');
                $AdminSettings->schedule_appointment = $schedule_appointment;
            }
            if (isset($data['ondemand_time_limit'])) {
                $ondemand_time_limit = Carbon::parse($data['ondemand_time_limit'])->format('H:i:s');
                $AdminSettings->ondemand_time_limit = $ondemand_time_limit;
            }
            if (isset($data['dependant_limit'])) {
                $dependant_limit = $data['dependant_limit'];
                $AdminSettings->dependant_limit = $dependant_limit;
            }
            if (isset($data['appointment_reminder'])) {
                $appointment_reminder = Carbon::parse($data['appointment_reminder'])->format('H:i:s');
                $AdminSettings->appointment_reminder = $appointment_reminder;
            }
            if (isset($data['tax'])) {
                $tax = $data['tax'];
                $AdminSettings->tax = $tax;
            }
            if (isset($data['lab_tax'])) {
                $lab_tax = $data['lab_tax'];
                $AdminSettings->lab_tax = $lab_tax;
            }
            if (isset($data['platform_fee'])) {
                $platform_fee = $data['platform_fee'];
                $AdminSettings->platform_fee = $platform_fee;
            }
            if (isset($data['transaction_fee'])) {
                $transaction_fee = $data['transaction_fee'];
                $AdminSettings->transaction_fee = $transaction_fee;
            }
            if (isset($data['tokbox_api_key'])) {
                $tokbox_api_key = $data['tokbox_api_key'];
                $AdminSettings->tokbox_api_key = $tokbox_api_key;
            }
            if (isset($data['tokbox_secret'])) {
                $tokbox_secret = $data['tokbox_secret'];
                $AdminSettings->tokbox_secret = $tokbox_secret;
            }
            if (isset($data['stripe_public_key'])) {
                $stripe_public_key = $data['stripe_public_key'];
                $AdminSettings->stripe_public_key = $stripe_public_key;
            }
            if (isset($data['stripe_secret'])) {
                $stripe_secret = $data['stripe_secret'];
                $AdminSettings->stripe_secret = $stripe_secret;
            }
            if (isset($data['twilio_status'])) {
                $twilio_status = $data['twilio_status'];
                $AdminSettings->twilio_status = $twilio_status;
            }
            if (isset($data['twilio_sid'])) {
                $twilio_sid = $data['twilio_sid'];
                $AdminSettings->twilio_sid = $twilio_sid;
            }
            if (isset($data['twilio_auth_token'])) {
                $twilio_auth_token = $data['twilio_auth_token'];
                $AdminSettings->twilio_auth_token = $twilio_auth_token;
            }
            if (isset($data['twilio_verify_sid'])) {
                $twilio_verify_sid = $data['twilio_verify_sid'];
                $AdminSettings->twilio_verify_sid = $twilio_verify_sid;
            }
            if (isset($data['twilio_number'])) {
                $twilio_number = $data['twilio_number'];
                $AdminSettings->twilio_number = $twilio_number;
            }
            // if (isset($data['email_driver'])) {
            //     $email_driver = $data['email_driver'];
            //     $AdminSettings->email_driver = $email_driver;
            // }
            if (isset($data['email_host'])) {
                $email_host = $data['email_host'];
                $AdminSettings->email_host = $email_host;
            }
            if (isset($data['email_port'])) {
                $email_port = $data['email_port'];
                $AdminSettings->email_port = $email_port;
            }
            if (isset($data['email_username'])) {
                $email_username = $data['email_username'];
                $AdminSettings->email_username = $email_username;
            }
            if (isset($data['email_password'])) {
                $email_password = $data['email_password'];
                $AdminSettings->email_password = $email_password;
            }
            if (isset($data['google_api_key'])) {
                $google_api_key = $data['google_api_key'];
                $AdminSettings->google_api_key = $google_api_key;
            }
            if (isset($data['pusher_app_id'])) {
                $pusher_app_id = $data['pusher_app_id'];
                $AdminSettings->pusher_app_id = $pusher_app_id;
            }
            if (isset($data['pusher_app_key'])) {
                $pusher_app_key = $data['pusher_app_key'];
                $AdminSettings->pusher_app_key = $pusher_app_key;
            }
            if (isset($data['pusher_app_secret'])) {
                $pusher_app_secret = $data['pusher_app_secret'];
                $AdminSettings->pusher_app_secret = $pusher_app_secret;
            }
            if (isset($data['pusher_app_cluster'])) {
                $pusher_app_cluster = $data['pusher_app_cluster'];
                $AdminSettings->pusher_app_cluster = $pusher_app_cluster;
            }
            if (isset($data['google_analytics_tracking_id'])) {
                $AdminSettings->google_analytics_tracking_id = $data['google_analytics_tracking_id'];
            }
            
            $AdminSettings->created_by = $admin_id;
            $AdminSettings->save();
            DB::commit();

            return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
        } catch (Exception | Throwable | QueryException $e) {
            DB::rollback();

            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function fetchAdminSettings()
    {
        try {
            $settings = AdminSettings::firstOrFail();

            $web = WebSetting::firstOrFail();
            /** @var object $settings */
            $settings->web_settings = $web;

            return self::sentResponse(200, $settings, __('digimed_validation.success_response.data_fetch_success'));
        } catch (ModelNotFoundException $e) {
            return self::sentResponse(200, [], __('digimed_validation.error_response.records_not_found'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function keyFileUpload(Request $request)
    {
        try {
            $key_name = $request->key_name;
            if($key_name == 'vonage' && $request->hasFile('key_file')) {
                $file = $request->file('key_file');
                Storage::disk('local')->putFileAs('vonage', $file, 'vonage-private.key');
                return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
            }
            return self::sentResponse(200, [], __('digimed_validation.error_response.records_not_found'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function adminDetailUpdate(Request $request, S3Library $S3Library) {
        try {
            $auth = Auth::user();
            $admin_id = $auth->id;
            // $admin_id = 1;
            // $auth = User::find($admin_id);

            DB::beginTransaction();

            $data_country_code = $request->country_code;
            $data_mobile_number = $request->mobile_number;
            $data_type = $request->type;
            /**
            * @var string $data_country_code
            * @var string $data_mobile_number
            * @var string $data_type
            */

            $country = Country::where('phone_code', $data_country_code)->first();
            if(!$country) {
                return self::sentResponse(200, [], __('digimed_validation.error_response.country_code_not_valid'));
            }

            $auth->first_name = $request->first_name;
            $auth->last_name = $request->last_name;
            $auth->country_id = $request->country_id;
            // $auth->state_id = $request->state_id;
            // $auth->city_id = $request->city_id;
            $auth->post_code = $request->post_code;
            $auth->address = $request->address;
            $auth->country_code = trim($data_country_code);
            $auth->mobile_number = trim($data_mobile_number);
            if ($request->hasFile('signature')) {
                $fileSignature = $request->file('signature');
                $digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|pdf|docx|doc|DOCX|DOC', true, $fileSignature, config('app.s3_folder').'/images/signature/'.$admin_id.'/');
                if($digimedFile['code'] == 500) {
                    return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
                }
                if($digimedFile['code'] == 200) {
                    $auth->signature = $digimedFile['data'];
                }
            }
            $auth->save();

            DB::commit();
            return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
        } catch (Exception | Throwable | QueryException $e) {
            DB::rollback();
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function adminDetail(Request $request) {
        try {
            $auth = Auth::user();
            $admin_id = $auth->id;

            $admin = User::with(['adminUserDetail'])->find($admin_id);

            return self::sentResponse(200, $admin, __('digimed_validation.success_response.data_fetch_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function adminUsersList(Request $request) {
        try {
            $paginate = $request->count_per_page ? $request->count_per_page : 10;
            $orderBy = $request->order_by ? $request->order_by : 'desc';
            $pageNumber = $request->page ? $request->page : 1;
            $offset = ($pageNumber * $paginate) - $paginate; // for pagination
            $sort_by = $request->sort_by ? $request->sort_by : 'id';
            $search_key = $request->search ? $request->search : '';
            $list_type = $request->list_type ? $request->list_type : '';
            $limit = $request->limit ? $request->limit : '';
                
            $list = User::where(function($q){
                $q->where('type','admin');
                $q->whereHas('roles',function($r){
                    $r->where('name','admin');
                });
            });

            if(!empty($search_key)) {
                $list = $list->where(function($q) use($search_key){
                    $q->where('first_name', 'LIKE', "%{$search_key}%");
                    $q->orWhere('last_name', 'LIKE', "%{$search_key}%");
                });
            }

            $list = $list->orderBy($sort_by,$orderBy);

            if($list_type == 'paginate') {
                return self::sentResponse(200, $list->paginate($paginate), __('digimed_validation.success_response.data_fetch_success'));
            } else {
                if(!empty($limit)) {
                    $list = $list->limit($limit);
                }
                return self::sentResponse(200, $list->get(), __('digimed_validation.success_response.data_fetch_success'));
            }
        } catch(Exception | Throwable $e) {
            return self::sentResponse(500,[],$e->getMessage());
        }
    }

    public function addUser(Request $request) {
        try {
            $auth = Auth::user();
            $admin_id = $auth->id;

            DB::beginTransaction();

            $data_country_code = $request->country_code;
            $data_mobile_number = $request->mobile_number;
            /**
            * @var string $data_country_code
            * @var string $data_mobile_number
            */

            $country = Country::find($request->country_id);
            if(!$country) {
                return self::sentResponse(500, [], __('digimed_validation.error_response.country_code_not_valid'));
            }

            $user = User::where('country_code', trim($country->phone_code))->where('mobile_number', trim($data_mobile_number))->where(function($q) {
                $q->where('type', 'admin');
                $q->orWhere('type', 'super_admin');
            })->first();
            if($user) {
                return self::sentResponse(500, [], __('digimed_validation.error_response.mobileno_in_use'));
            }

            $user = User::where('email', $request->email)->where(function($q) {
                $q->where('type', 'admin');
                $q->orWhere('type', 'super_admin');
            })->first();
            if($user) {
                return self::sentResponse(500, [], __('digimed_validation.error_response.email_in_use'));
            }

            $user = User::firstOrNew([
                'country_code' => trim($country->phone_code),
                'mobile_number' => trim($data_mobile_number),
                'type' => 'admin',
            ]);
            $user->first_name = $request->first_name;
            $user->last_name = $request->last_name;
            $user->email = $request->email;
            $user->passcode = Hash::make($request->password);
            $user->password = Hash::make($request->password);
            $user->country_id = $request->country_id;
            // $user->state_id = $request->state_id;
            // $user->city_id = $request->city_id;
            $user->post_code = $request->post_code;
            $user->address = $request->address;
            $user->is_mobile_number_verified = '1';
            $user->email_verification_code = '123456';
            $user->is_email_verified = '1';
            $user->two_step_verification_type = '1';
            $user->is_two_step_verified = '1';
            $user->status = '2';
            // if ($request->hasFile('signature')) {
            //     $fileSignature = $request->file('signature');
            //     $digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|pdf|docx|doc|DOCX|DOC', true, $fileSignature, config('app.s3_folder').'/images/signature/'.$admin_id.'/');
            //     if($digimedFile['code'] == 500) {
            //         return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
            //     }
            //     if($digimedFile['code'] == 200) {
            //         $user->signature = $digimedFile['data'];
            //     }
            // }
            $user->created_by = $admin_id;
            $user->save();

            $user->assignRole('admin');

            $userSettings = UserSettingsNotification::firstOrNew(['user_id' => $user->id]);

            DB::commit();
            return self::sentResponse(200, [], __('digimed_validation.success_response.data_store_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function editUser(UserIdRequest $request) {
        try {
            $auth = Auth::user();
            $admin_id = $auth->id;
            // $admin_id = 1;

            DB::beginTransaction();

            $data_country_code = $request->country_code;
            $data_mobile_number = $request->mobile_number;
            /**
            * @var string $data_country_code
            * @var string $data_mobile_number
            */

            $country = Country::find($request->country_id);
            if(!$country) {
                return self::sentResponse(500, [], __('digimed_validation.error_response.country_code_not_valid'));
            }

            $user = User::where('country_code', trim($country->phone_code))->where('mobile_number', trim($data_mobile_number))->where(function($q) {
                $q->where('type', 'admin');
                $q->orWhere('type', 'super_admin');
            })->where('id', '!=', $request->user_id)->first();
            if($user) {
                return self::sentResponse(500, [], __('digimed_validation.error_response.mobileno_in_use'));
            }

            $user = User::where('email', $request->email)->where(function($q) {
                $q->where('type', 'admin');
                $q->orWhere('type', 'super_admin');
            })->where('id', '!=', $request->user_id)->first();
            if($user) {
                return self::sentResponse(500, [], __('digimed_validation.error_response.email_in_use'));
            }

            $user = User::find($request->user_id);
            $user->first_name = $request->first_name;
            $user->last_name = $request->last_name;
            $user->email = $request->email;
            $user->country_id = $request->country_id;
            // $user->state_id = $request->state_id;
            // $user->city_id = $request->city_id;
            $user->post_code = $request->post_code;
            $user->address = $request->address;
            $user->country_code = trim($country->phone_code);
            $user->mobile_number = trim($data_mobile_number);
            // if ($request->hasFile('signature')) {
            //     $fileSignature = $request->file('signature');
            //     $digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|pdf|docx|doc|DOCX|DOC', true, $fileSignature, config('app.s3_folder').'/images/signature/'.$admin_id.'/');
            //     if($digimedFile['code'] == 500) {
            //         return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
            //     }
            //     if($digimedFile['code'] == 200) {
            //         $user->signature = $digimedFile['data'];
            //     }
            // }
            $user->updated_by = $admin_id;
            $user->save();

            DB::commit();
            return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function deleteUser(UserIdRequest $request) {
        try {
            $auth = Auth::user();
            $admin_id = $auth->id;
            // $admin_id = 1;

            $user = User::find($request->user_id);
            $user->deleted_by = $admin_id;
            $user->save();
            $user->delete();

            return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function moduleList(Request $request)
    {
        try {
            $list = [
                // [
                //     'parent' => '',
                //     'module' => 'dashboard',
                //     'name' => __('Dashboard'),
                //     'status' => '1',
                // ],
                [
                    'parent' => '',
                    'module' => 'doctor',
                    'name' => __('Doctors'),
                    'status' => '1',
                ],
                [
                    'parent' => 'doctor',
                    'module' => 'doctor_list',
                    'name' => __('Doctors List'),
                    'status' => '1',
                ],
                [
                    'parent' => 'doctor',
                    'module' => 'doctor_request',
                    'name' => __('Doctors Request'),
                    'status' => '1',
                ],
                [
                    'parent' => 'doctor',
                    'module' => 'fare_consultation',
                    'name' => __('Fare Consultation'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'patient',
                    'name' => __('Patients'),
                    'status' => '1',
                ],
                [
                    'parent' => 'patient',
                    'module' => 'patient_list',
                    'name' => __('Patients List'),
                    'status' => '1',
                ],
                [
                    'parent' => 'patient',
                    'module' => 'dependant_list',
                    'name' => __('Dependants List'),
                    'status' => '1',
                ],
                [
                    'parent' => 'patient',
                    'module' => 'dependant_request',
                    'name' => __('Dependants Request'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'appointment',
                    'name' => __('Appointments'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'rating',
                    'name' => __('Ratings'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'chat',
                    'name' => __('Chat'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'blog',
                    'name' => __('Blogs'),
                    'status' => '1',
                ],
                [
                    'parent' => 'blog',
                    'module' => 'category',
                    'name' => __('Categories'),
                    'status' => '1',
                ],
                [
                    'parent' => 'blog',
                    'module' => 'sub_category',
                    'name' => __('Sub Categories'),
                    'status' => '1',
                ],
                [
                    'parent' => 'blog',
                    'module' => 'blogs',
                    'name' => __('Blogs'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'landing_page',
                    'name' => __('Landing Page'),
                    'status' => '1',
                ],
                [
                    'parent' => 'landing_page',
                    'module' => 'banner',
                    'name' => __('Banners'),
                    'status' => '1',
                ],
                [
                    'parent' => 'landing_page',
                    'module' => 'client_logo',
                    'name' => __('Client Logos'),
                    'status' => '1',
                ],
                [
                    'parent' => 'landing_page',
                    'module' => 'doctor_image',
                    'name' => __('Doctors Images'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'speciality',
                    'name' => __('Speciality'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'subscription',
                    'name' => __('Subscriptions'),
                    'status' => '1',
                ],
                [
                    'parent' => 'subscription',
                    'module' => 'subscription_plan',
                    'name' => __('Subscription Plans'),
                    'status' => '1',
                ],  
                [
                    'parent' => 'subscription',
                    'module' => 'subscription_history',
                    'name' => __('Subscription History'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'hospital',
                    'name' => __('Hospitals'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'lab',
                    'name' => __('Laboratory'),
                    'status' => '1',
                ],
                [
                    'parent' => 'lab',
                    'module' => 'lab_list',
                    'name' => __('Labs'),
                    'status' => '1',
                ],
                [
                    'parent' => 'lab',
                    'module' => 'lab_order',
                    'name' => __('Orders'),
                    'status' => '1',
                ],
                [
                    'parent' => '',
                    'module' => 'setting',
                    'name' => __('Settings'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'change_password',
                    'name' => __('Change Password'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'sms_setting',
                    'name' => __('SMS Settings'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'tokbox_setting',
                    'name' => __('Tokbox Settings'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'google_analytic_setting',
                    'name' => __('Google Analytics Settings'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'email_setting',
                    'name' => __('Email Settings'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'stripe_setting',
                    'name' => __('Stripe Settings'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'faq_category',
                    'name' => __('FAQ Categories'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'faq_list',
                    'name' => __('FAQ List'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'policy',
                    'name' => __('Policies'),
                    'status' => '1',
                ],
                [
                    'parent' => 'setting',
                    'module' => 'other_setting',
                    'name' => __('Other Settings'),
                    'status' => '1',
                ],
            ];
            return self::sentResponse(200, $list, __('digimed_validation.success_response.data_fetch_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function userAssignPermission(UserIdRequest $request)
    {
        try {
            $user = User::find($request->user_id);
            $user->permission = json_encode($request->permissions);
            $user->updated_by = auth()->user()->id;
            $user->save();
            return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function userPermission(UserIdRequest $request)
    {
        try {
            $user = User::find($request->user_id);
            $permission = json_decode($user->permission);
            return self::sentResponse(200, $permission, __('digimed_validation.success_response.data_fetch_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }
}