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/HomePageController.php
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use App\HomePage;
use App\DoctorsHomePage;
use App\PageContent;
use App\PageModule;
use Storage;
use Auth;
use Carbon\Carbon;
use Config;
use DB;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\Validator;
use Illuminate\Database\QueryException;
use App\ClientLogo;
use App\Library\S3Library;
use Throwable;
use App\Http\Resources\UserCollection;

class HomePageController extends Controller
{
    public function updateBanner(Request $request, S3Library $S3Library)
    {
        try {
            $rules = [               
                'banner_image' => 'required',   
            ];
            $messages = [
                'banner_image.required' => __('digimed_validation.form_validation_error.banner_image_required'),
                
            ];
            $validator = Validator::make($request->all(), $rules, $messages);

            if ($validator->fails()) {
                return self::errorResponse(422, $validator->errors()->all());
            } 

            $bannerImage = HomePage::firstOrNew(['id' => 1]);

            if ($request->hasFile('banner_image')) {
                $file = $request->file('banner_image');
                $uploadPath = 'digimed/images/home-page/banner/1/';

                $uploadedImage = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|gif|svg', true, $file, $uploadPath);
               
                if ($uploadedImage['code'] == 500) {
                    return response()->json([
                        'code' => 500,
                        'message' => __('digimed_validation.image_upload_error', ['error' => $uploadedImage['msg']]),
                    ], 500);
                }

                if ($uploadedImage['code'] == 200) {
                    $bannerImage->banner_image = $uploadedImage['data'];
                }
            }

            $bannerImage->save();

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

    // Fetch Banner
    public function fetchBannerImage(Request $request)
    {
        try {
            
            $bannerImage = HomePage::where('id',1)->first();
            if (!$bannerImage) {
                $data[] = [
                    'id' => '',
                    'banner_image' => '',
                ];
            } else {

                // Build the response as an array
                $data[] = [
                    'id' => $bannerImage->id,
                    'banner_image' => $bannerImage->banner_image,
                ];
            }
        
            // $data['banner_image'] = $bannerImage->banner_image;
            return self::sentResponse(200,$data, __('digimed_validation.success_response.data_fetch_success'));

        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }


    public function uploadClientLogo(Request $request, S3Library $S3Library)
    {
        try {
            $rules = [               
                'logo' => 'required',
                'title' => 'required'   
            ];
            $messages = [
                'logo.required' => __('digimed_validation.form_validation_error.lab_logo_required'),
                'title.required'=> __('digimed_validation.form_validation_error.title_required'),
            ];
            $validator = Validator::make($request->all(), $rules, $messages);

            if ($validator->fails()) {
                return self::errorResponse(422, $validator->errors()->all());
            } 
                  
            if ($request->hasFile('logo')) {
                   
                $files = $request->file('logo'); // Multiple file input
                $titles = explode(',',$request->title);
                
                foreach ($files as $key => $file) { 
                                       
                    $uploadPath = 'digimed/images/clients/logo/1/';
                    $uploadedDoc = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|gif|svg|pdf|PDF|txt|doc|DOC|docx|DOCX', true, $file, $uploadPath);
                      
                    if ($uploadedDoc['code'] === 500) {
                        DB::rollback();
                        return self::sentResponse(500, $uploadedDoc['data'], $uploadedDoc['msg']);
                    }
        
                    if ($uploadedDoc['code'] === 200) {                    
                        $clientLogo = new ClientLogo();
                        $clientLogo->logo = $uploadedDoc['data'];
                        $clientLogo->title = $titles[$key];
                  
                        $clientLogo->save();
                    }
                }
                
            }
            return self::sentResponse(200, [], __('digimed_validation.success_response.client_logo_store_success'));
    
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    //delete Image document
    public function deleteClientLogoDocument(Request $request)
    {
        try {
            $rules = [               
                'id' => 'required',
               
            ];
            $messages = [
                'id.required' => __('digimed_validation.form_validation_error.upload_doc_id_req'),
               
            ];
            $validator = Validator::make($request->all(), $rules, $messages);

            if ($validator->fails()) {
                return self::errorResponse(422, $validator->errors()->all());   
            } 
            $clientLogo = ClientLogo::find($request->id);
            if (!$clientLogo) {
                return self::sentResponse(201, [], __('digimed_validation.error_response.records_not_found'));
            }
         
            if(Config::get('filesystems.default') == "s3") {
                Storage::disk('s3')->delete('digimed/images/clients/logo/1/'.$clientLogo['logo']);
            } else {
                Storage::delete('digimed/images/clients/logo/1/'.$clientLogo['logo']);
            }

            if($clientLogo->delete()){
                return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));               
            }

        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    //Fetch client logos
    public function fetchClientLogo(Request $request, S3Library $S3Library)
    {
        try {
                            
            $clientLogo = ClientLogo::select('id', 'title', 'logo')->whereNull('deleted_at')->get();
            
            if ($clientLogo->isEmpty()) {
                return self::sentResponse(201, [], __('digimed_validation.error_response.records_not_found'));
            }

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

    //Doctors Home Page

    public function updateDoctor(Request $request, S3Library $S3Library)
    {
    try {
        // Validation Rules
        $rules = [               
            'id' => 'sometimes|integer',
            'name' => 'required',
            'rating' => 'required',
            'specialization' => 'required',
            // 'doctor_image' => 'nullable|file|mimes:jpeg,jpg,png,gif,svg',
            'language_spoken' => 'required'   
        ];
        
        $messages = [
            'name.required' => __('digimed_validation.form_validation_error.doctor_name_req'),
            'specialization.required' => __('digimed_validation.form_validation_error.specialization_req'),
            // 'doctor_image.required' => __('digimed_validation.form_validation_error.doctor_image_req'),
            'language_spoken.required' => __('digimed_validation.form_validation_error.language_spoken_req'),
        ];
        
        // Validate the Request
        $validator = Validator::make($request->all(), $rules, $messages);
        
        if ($validator->fails()) {
            return self::errorResponse(422, $validator->errors()->all());
        }

        // Check if ID exists and fetch or create a new record
        $doctorImage = DoctorsHomePage::updateOrCreate(
            ['id' => $request->id], // Search condition
            [
                'name' => $request->name,
                'specialization' => $request->specialization,
                'language_spoken' => $request->language_spoken,
                'rating' => $request->rating, // Default rating
            ]
        );

        // Handle Doctor Image Upload
        if ($request->hasFile('doctor_image')) {
            $file = $request->file('doctor_image');
            $uploadPath = 'digimed/images/home-page/doctor_image/';

            $uploadedImage = $S3Library->fileUpload(
                true,
                'jpeg|JPEG|jpg|JPG|png|PNG|gif|svg',
                true,
                $file,
                $uploadPath
            );

            if ($uploadedImage['code'] == 500) {
                return response()->json([
                    'code' => 500,
                    'message' => __('digimed_validation.image_upload_error', ['error' => $uploadedImage['msg']]),
                ], 500);
            }

            if ($uploadedImage['code'] == 200) {
                $doctorImage->doctor_image = $uploadedImage['data'];
                $doctorImage->save(); // Save the updated image path
            }
        }

        return self::sentResponse(200, [], __('digimed_validation.success_response.doctors_details_success'));

    } catch (Exception | Throwable | QueryException $e) {
        return self::sentResponse(500, [], $e->getMessage());
    }
}


    //list doctors
    public function fetchDoctorsHomePage(Request $request, S3Library $S3Library)
    {
        try {

            // $doctorHomePage = DoctorsHomePage::select('id', 'name', 'specialization','doctor_image','rating','language_spoken')->whereNull('deleted_at')->get();
            
            // if ($doctorHomePage->isEmpty()) {
            //     return self::sentResponse(201, [], __('digimed_validation.error_response.records_not_found'));
            // }

            $limit = $request->limit ? $request->limit : 10;
            $doctors = User::role('doctor')->where('status', '2')->where('landing_feature','yes')->limit($limit)->get();

            return new UserCollection($doctors, 200, 'doctors', __('digimed_validation.success_response.data_fetch_success'));

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

    public function fetchDoctorDetailHomePage(UserIdRequest $request)
    {
        try {

            $doctor = User::find($request->user_id);

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

    //delete Image document
    public function deleteDoctorsHomePage(Request $request)
    {
        try {
            $rules = [               
                'id' => 'required',
            ];
            $messages = [
                'id.required' => __('digimed_validation.form_validation_error.doctor_id_req'),
            ];
            $validator = Validator::make($request->all(), $rules, $messages);

            if ($validator->fails()) {
                return self::errorResponse(422, $validator->errors()->all());   
            } 
            $doctorsHomePage = DoctorsHomePage::find($request->id);
            if (!$doctorsHomePage) {
                return self::sentResponse(201, [], __('digimed_validation.error_response.records_not_found'));
            }
         
            if(Config::get('filesystems.default') == "s3") {
                Storage::disk('s3')->delete('digimed/home-page/doctor_image/'.$doctorsHomePage['doctor_image']);
            } else {
                Storage::delete('digimed/home-page/doctor_image/'.$doctorsHomePage['doctor_image']);
            }

            if($doctorsHomePage->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 pageContent(Request $request)
    {
        try {

            $validator = Validator::make($request->all(), [ 
                'type' => 'required|in:text,image',             
                'key' => 'required_if:type,text',
                'file' => 'required_if:type,image',
                'value' => 'required_if:type,text',
            ]);

            if ($validator->fails()) {
                return self::errorResponse(422, $validator->errors()->all());
            }

            $page = PageContent::where('key', $request->key)->first();

            if(!$page) {
                $page = new PageContent();
                $page->key = $request->key;
                $page->page = $request->page;
                $page->section = $request->section;
                $page->type = $request->type;
            }

            if($request->type == 'image') {
                if ($request->hasFile('file')) {
                    $file = $request->file('file');
                    $uploadPath = 'images/landing/'.$request->key.'/';
                    Storage::disk('public')->putFileAs($uploadPath, $file, $file->getClientOriginalName());
                    $page->value = $file->getClientOriginalName();
                } else {
                    return self::sentResponse(500, [], __('digimed_validation.error_response.image_upload_faild_try'));
                }
            } else {
                $page->value = $request->value;
            }
            $page->save();

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

    public function pageContentList(Request $request)
    {
        try {

            $paginate = $request->count_per_page ? $request->count_per_page : 10;
            $pageNumber = $request->page ? $request->page : 1;
            $search_key = $request->search ? $request->search : '';
            $list_type = $request->list_type ? $request->list_type : 'list';

            $sort_by_col = (isset($request->sort_by)) ? $request->sort_by : 'id';
            $data_order_by = $request->order_by;
            $orderBy = $data_order_by ? strtoupper($data_order_by) : strtoupper('asc');

            $list = PageContent::whereNotNull('id');

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

            if($sort_by_col) {
                $list = $list->orderBy($sort_by_col, $orderBy);
            }

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

    public function pageModule(Request $request)
    {
        try {

            $validator = Validator::make($request->all(), [              
                'page' => 'required',
                'section' => 'required',
                'is_enabled' => 'required|in:yes,no',
            ]);

            if ($validator->fails()) {
                return self::errorResponse(422, $validator->errors()->all());  
            }

            $page = PageModule::where('page', $request->page)->where('section', $request->section)->first();

            if(!$page) {
                $page = new PageModule();
                $page->page = $request->page;
                $page->section = $request->section;
            }
            
            $page->is_enabled = $request->is_enabled;
            $page->save();

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

    public function pageModuleList(Request $request)
    {
        try {

            $paginate = $request->count_per_page ? $request->count_per_page : 10;
            $pageNumber = $request->page ? $request->page : 1;
            $search_key = $request->search ? $request->search : '';
            $list_type = $request->list_type ? $request->list_type : 'list';

            $sort_by_col = (isset($request->sort_by)) ? $request->sort_by : 'id';
            $data_order_by = $request->order_by;
            $orderBy = $data_order_by ? strtoupper($data_order_by) : strtoupper('asc');

            $list = PageModule::whereNotNull('id');

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

            if($sort_by_col) {
                $list = $list->orderBy($sort_by_col, $orderBy);
            }

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