Your IP : 216.73.217.77


Current Path : /home/users/unlimited/www/admin.ondemand.codeskitter.site/app/Controllers/admin/
Upload File :
Current File : /home/users/unlimited/www/admin.ondemand.codeskitter.site/app/Controllers/admin/Chats.php

<?php

namespace App\Controllers\admin;

use App\Models\Chat_model;
use App\Models\Enquiries_model;

class Chats extends Admin
{
    protected $db; // Declare the $db property
    protected Chat_model $chat; 
    protected Enquiries_model $enquiry; 

    protected $validation; // Declare the $validation property
    public function __construct()
    {
        parent::__construct();
        $this->validation = \Config\Services::validation();
        $this->db      = \Config\Database::connect();
        $this->chat = new Chat_model();
        $this->enquiry = new Enquiries_model();
        helper('ResponceServices');
        helper('api');
    }
    public function index()
    {               
        $disk =fetch_current_file_manager();
                                                                                                                           
        try {
            if ($this->isLoggedIn && $this->userIsAdmin) {
                setPageInfo($this->data, labels('chat', 'Chat') . ' | ' . labels('admin_panel', 'Admin Panel'), 'chat');
                $db = \Config\Database::connect();
                $builder = $db->table('users u');
                $builder->select('u.*,u.image as profile_image, MAX(c.created_at) AS last_chat_date')
                    ->join('chats c', "(c.sender_id = u.id AND c.sender_type = 2)
                     OR (c.sender_id = u.id AND c.receiver_type = 0) 
                         OR (c.receiver_id = u.id AND c.receiver_type = 0)
                     OR (c.receiver_id = u.id AND c.receiver_type = 2) ")
                    ->where('c.booking_id', NULL)
                    ->where('c.receiver_type', 0)->orwhere('c.receiver_type', 2)
                    ->groupBy('u.id')
                    ->orderBy('last_chat_date', 'DESC');
                $customers_with_chats = $builder->get()->getResultArray();
                foreach ($customers_with_chats as $key => $row) {
                    if($disk=="local_server"){

                        $customers_with_chats[$key]['profile_image'] = base_url('public/backend/assets/profiles/' . $row['profile_image']);
                    }else if($disk=="aws_s3"){
                        $customers_with_chats[$key]['profile_image']=fetch_cloud_front_url('profile',$row['profile_image']);
                    }else{
                        $customers_with_chats[$key]['profile_image'] = base_url('public/backend/assets/profiles/' . $row['profile_image']);

                    }
                }



                foreach ($customers_with_chats as $key => $customer) {
                    $check_user = fetch_details('users_groups', ['user_id' => $customer['id'], 'group_id' => 2]);
                
                    if (empty($check_user)) {
                        unset($customers_with_chats[$key]); 
                    }
                }
                $this->data['customers'] = $customers_with_chats;


            
                $builder = $db->table('users u');
                $builder->select('u.*,pd.company_name as username, u.image as profile_image, MAX(c.created_at) AS last_chat_date')
                    ->join('chats c', "(c.sender_id = u.id AND c.sender_type = 1 AND c.receiver_type = 0) OR (c.receiver_id = u.id AND c.receiver_type = 1 AND c.sender_type = 0)")
                    ->join('partner_details pd', 'pd.partner_id = u.id')
                    ->groupBy('u.id')
                    ->orderBy('last_chat_date', 'DESC');
                $provider_with_chats = $builder->get()->getResultArray();
                foreach ($provider_with_chats as $key => $row) {
                    if (isset($row['profile_image'])) {
                        if($disk=="local_server"){

                            $provider_with_chats[$key]['profile_image'] = base_url('public/backend/assets/profiles/' . $row['profile_image']);
                        }else if($disk=="aws_s3"){
                            $provider_with_chats[$key]['profile_image']=fetch_cloud_front_url('profile',$row['profile_image']);
                        }else{
                            $provider_with_chats[$key]['profile_image'] = base_url('public/backend/assets/profiles/' . $row['profile_image']);
                        }
               
                    }
                }
                $this->data['providers'] = $provider_with_chats;
                $this->data['current_user_id'] = $this->userId;
                $chat_settings = get_settings('general_settings', true);
                $this->data['maxFilesOrImagesInOneMessage'] = $chat_settings['maxFilesOrImagesInOneMessage'] ?? 10;
                $this->data['maxFileSizeInBytesCanBeSent'] = $chat_settings['maxFileSizeInBytesCanBeSent'] ?? 20000000;
                $this->data['maxCharactersInATextMessage'] = $chat_settings['maxCharactersInATextMessage'] ?? 500;
                return view('backend/admin/template', $this->data);
            } else {
                return redirect('unauthorised');
            }
        } catch (\Throwable $th) {
            log_the_responce($th, date("Y-m-d H:i:s") . ' -->  app/Controllers/admin/Chats.php - index()');
            return ErrorResponse("Something Went Wrong", true, [], [], 200, csrf_token(), csrf_hash());
        }
    }
    public function store_chat()
    {

        if (defined('ALLOW_MODIFICATION') && ALLOW_MODIFICATION == 0) {
       
            $response['error'] = true;
            $response['message'] = DEMO_MODE_ERROR;
            $response['csrfName'] = csrf_token();
            $response['csrfHash'] = csrf_hash();
            return $response;
        }     
        try {
            $message = isset($_POST['message']) ? trim($_POST['message']) : '';
            
            
            $sender_id = $this->userId;
            $receiver_id = isset($_POST['receiver_id']) ? $_POST['receiver_id'] : '';
            $user_type_for_send_message = $_POST['user_type_for_send_message'];
            $attachment_image = null;
            $is_file = false;
            if (!empty($_FILES['attachment']['name'])) {
                $attachment_image = $_FILES['attachment'];
                $is_file = true;
            }
            if ($user_type_for_send_message == "provider") {
                $data['receiver_type'] = 1;
                $receiver_type = 1;

                $enquiry = fetch_details('enquiries', ['customer_id' => null, 'userType' => 1, 'booking_id' => NULL, 'provider_id' => $receiver_id]);
                if (empty($enquiry[0])) {
                    $user = fetch_details('users', ['id' => $sender_id], ['username'])[0];
                    $data['title'] =  $user['username'] . '_query';
                    $data['status'] =  1;
                    $data['userType'] =  1;
                    $data['customer_id'] = null;
                    $data['provider_id'] = $sender_id;
                    $data['date'] =  now();
                    $store = insert_details($data, 'enquiries');
                    $e_id = $store['id'];
                } else {
                    $e_id = $enquiry[0]['id'];
                }

                // $e_id = add_enquiry_for_chat($user_type_for_send_message, $receiver_id);
            } elseif ($user_type_for_send_message == "customer") {
                $data['receiver_type'] = 2;
                $receiver_type = 2;
                $enquiry = fetch_details('enquiries', ['customer_id' => $receiver_id, 'userType' => 2, 'booking_id' => NULL, 'provider_id' => NULL]);
                if (empty($enquiry[0])) {
                    $customer = fetch_details('users', ['id' => $receiver_id], ['username'])[0];
                    $data['title'] =  $customer['username'] . '_query';
                    $data['status'] =  1;
                    $data['userType'] =  2;
                    $data['customer_id'] = $receiver_id;
                    $data['provider_id'] = NULL;
                    $data['date'] =  now();
                    $store = insert_details($data, 'enquiries');
                    $e_id = $store['id'];
                } else {
                    $e_id = $enquiry[0]['id'];
                }
            }
            $data = insert_chat_message_for_chat($sender_id, $receiver_id, $message, $e_id, 0, $receiver_type, date('Y-m-d H:i:s'), $is_file, $attachment_image);
            $last_date = getLastMessageDateFromChat($e_id);
            if ($data) {
                if (!empty($data)) {
                    if ($user_type_for_send_message == "provider") {
                        $new_data = getSenderReceiverDataForChatNotification($sender_id, $receiver_id, $data['id'], $last_date, 'admin');
                        send_panel_chat_notification('Check New Messages', $message, $receiver_id, '', 'new_chat', $new_data);
                        send_app_chat_notification('Provider Support', $message, $receiver_id, '', 'new_chat', $new_data);
                    } else if ($user_type_for_send_message == "customer") {
                        $new_data = getSenderReceiverDataForChatNotification($sender_id, $receiver_id, $data['id'], $last_date, 'admin');
                        send_app_chat_notification('Customer Support', $message, $receiver_id, '', 'new_chat', $new_data);
                        send_customer_web_chat_notification('Customer Support', $message, $receiver_id, '', 'new_chat', $new_data);
                    }
                    return successResponse("Chat successfully", false, $data, [], 200, csrf_token(), csrf_hash());
                } else {
                    return ErrorResponse("Chat not found after saving", true, [], [], 200, csrf_token(), csrf_hash());
                }
            } else {
                return ErrorResponse("Please try again....", true, [], [], 200, csrf_token(), csrf_hash());
            }
        } catch (\Throwable $th) {
            throw $th;
          
            log_the_responce($th, date("Y-m-d H:i:s") . '--> app/Controllers/admin/Chats.php - store_chat()');
            return ErrorResponse("Something Went Wrong", true, [], [], 200, csrf_token(), csrf_hash());
        }
    }
    public function getAllMessage()
    {


        // if (defined('ALLOW_MODIFICATION') && ALLOW_MODIFICATION == 0) {
        //     return ErrorResponse("Modification in demo version is not allowed", true, [], [], 200, csrf_token(), csrf_hash());
           
        // }     
        try {
            $user_type = $_POST['user_type'];
            if ($user_type == 'provider') {
                $enquiry = fetch_details('enquiries', ['customer_id' => null, 'userType' => 1, 'booking_id' => NULL, 'provider_id' => $_POST['receiver_id']]);
                if (empty($enquiry[0])) {
                    $provider = fetch_details('users', ['id' => $_POST['receiver_id']], ['username'])[0];
                    $data['title'] =  $provider['username'] . '_query';
                    $data['status'] =  1;
                    $data['userType'] =  1;
                    $data['customer_id'] = NULL;
                    $data['provider_id'] = $_POST['receiver_id'];
                    $data['date'] =  now();
                    $store = insert_details($data, 'enquiries');
                    $e_id = $store['id'];
                } else {
                    $e_id = $enquiry[0]['id'];
                }
            } else if ($user_type == "customer") {
                $enquiry = fetch_details('enquiries', ['customer_id' =>  $_POST['receiver_id'], 'userType' => 2, 'booking_id' => NULL, 'provider_id' => NULL]);
                if (empty($enquiry[0])) {
                    $provider = fetch_details('users', ['id' => $_POST['receiver_id']], ['username'])[0];
                    $data['title'] =  $provider['username'] . '_query';
                    $data['status'] =  1;
                    $data['userType'] =  2;
                    $data['customer_id'] =  $_POST['receiver_id'];
                    $data['provider_id'] = NULL;
                    $data['date'] =  now();
                    $store = insert_details($data, 'enquiries');
                    $e_id = $store['id'];
                } else {
                    $e_id = $enquiry[0]['id'];
                }
            } else {
                $e_id = 0;
            }
            $limit = (isset($_GET['limit']) && !empty($_GET['limit'])) ? $_GET['limit'] : 10;
            $offset = (isset($_GET['offset']) && !empty($_GET['offset'])) ? $_GET['offset'] : 0;
            $sort = (isset($_GET['sort']) && !empty($_GET['sort'])) ? $_GET['sort'] : 'id';
            $order = (isset($_GET['order']) && !empty($_GET['order'])) ? $_GET['order'] : 'ASC';
            $search = (isset($_GET['search']) && !empty($_GET['search'])) ? $_GET['search'] : '';
            $receiver_id = $_POST['receiver_id'];
            $data = $this->chat->chat_list($limit, $offset, $sort, $order, $e_id = $e_id, ['e_id' => $e_id], [], $search, false, $receiver_id, $user_type);
            return $data;
        } catch (\Throwable $th) {
            log_the_responce($th, date("Y-m-d H:i:s") . '--> app/Controllers/admin/Chats.php - getAllMessage()');
            return ErrorResponse("Something Went Wrong", true, [], [], 200, csrf_token(), csrf_hash());
        }
    }
    public function get_customers()
    {
        try {
            $db = \Config\Database::connect();
            $builder = $db->table('users u');
            $builder->select('u.*,u.image as profile_image,ug.group_id')
                ->join('users_groups ug', 'ug.user_id = u.id')
                ->where('ug.group_id', 2);
            $search = $this->request->getPost('search');
            $users = [];
            if ($search != "") {
                $builder->groupStart()
                    ->like('u.id', $search)
                    ->orLike('u.username', $search)
                    ->orLike('u.email', $search)
                    ->orLike('u.phone', $search)
                    ->groupEnd();
                $users = $builder->get()->getResultArray();
            } else {
                $db = \Config\Database::connect();
                $builder = $db->table('chats c');
                $builder->distinct()->select('c.e_id');
                $customer_chat = $builder->get()->getResultArray();
                $e_ids = [];
                $users = [];
                foreach ($customer_chat as $row) {
                    $e_ids[] = $row['e_id'];
                }
                if (!empty($e_ids)) {
                    $customer_ids = fetch_chat_ids('enquiries', 'customer', [], ['customer_id'], '', 0, 'id', 'ASC', ['id' => $e_ids],);
                    $db = \Config\Database::connect();
                    $builder = $db->table('users u');
                    $builder->select('u.*,u.image as profile_image, ug.group_id')
                        ->join('users_groups ug', 'ug.user_id = u.id')
                        ->where('ug.group_id', 2)
                        ->whereIn('u.id', $customer_ids);
                    $users = $builder->get()->getResultArray();
                }
            }
            foreach ($users as $key => $row) {
                $users[$key]['profile_image'] = base_url('public/backend/assets/profiles/' . $row['profile_image']);
            }
            return json_encode($users);
        } catch (\Throwable $th) {
            log_the_responce($th, date("Y-m-d H:i:s") . '--> app/Controllers/admin/Chats.php - get_customers()');
            return ErrorResponse("Something Went Wrong", true, [], [], 200, csrf_token(), csrf_hash());
        }
    }
    public function get_providers()
    {
        try {
            $db = \Config\Database::connect();
            $builder = $db->table('users u');
            $builder->select('u.id,ug.group_id,pd.company_name as username,pd.id as partner_id ,u.image as profile_image,u.phone,u.country_code')
                ->join('users_groups ug', 'ug.user_id = u.id')
                ->join('partner_details pd', 'pd.partner_id = u.id')
                ->where('ug.group_id', 3);
            $search = $this->request->getPost('search');
            $users = [];
            if ($search != "") {
                $builder->groupStart()
                    ->like('u.id', $search)
                    ->orLike('u.username', $search)
                    ->orLike('pd.company_name', $search)
                    ->orLike('u.email', $search)
                    ->orLike('u.phone', $search)
                    ->groupEnd();
                $users = $builder->get()->getResultArray();
                foreach ($users as $key => $row) {
                    if (check_exists(base_url('public/backend/assets/profiles/' . $row['profile_image'])) || check_exists(base_url('/public/uploads/users/partners/' . $row['profile_image'])) || check_exists($row['profile_image'])) {
                        if (filter_var($row['profile_image'], FILTER_VALIDATE_URL)) {
                            $users[$key]['profile_image'] = $row['profile_image'];
                        } else {
                            $users[$key]['profile_image'] = (file_exists(FCPATH . 'public/backend/assets/profiles/' . $row['profile_image'])) ? base_url('public/backend/assets/profiles/' . $row['profile_image']) : ((file_exists(FCPATH . $row['profile_image'])) ? base_url($row['profile_image']) : ((!file_exists(FCPATH . "public/uploads/users/partners/" . $row['profile_image'])) ? base_url("public/backend/assets/profiles/default.png") : base_url("public/uploads/users/partners/" . $row['profile_image'])));
                        }
                    }
                }
            } else {
                $db = \Config\Database::connect();
                $builder = $db->table('chats c');
                $builder->distinct()->select('c.e_id');
                $provider_chat = $builder->where("(c.sender_id = u.id AND c.sender_type = 1) OR (c.receiver_id = u.id AND c.receiver_type = 1)")
                    ->join('users u', 'u.id = c.sender_id OR u.id = c.receiver_id')->get()->getResultArray();
                $e_ids = [];
                $users = [];
                foreach ($provider_chat as $row) {
                    $e_ids[] = $row['e_id'];
                }
                if (!empty($e_ids)) {
                    $provider_ids = fetch_chat_ids('enquiries', 'provider', [], ['provider_id'], '', 0, 'id', 'ASC', ['id' => $e_ids]);
                    $db = \Config\Database::connect();
                    $builder = $db->table('users u');
                    $builder->select('u.id,ug.group_id,pd.company_name as username,pd.id as partner_id ,u.image as profile_image ,u.phone,u.country_code')
                        ->join('users_groups ug', 'ug.user_id = u.id')
                        ->join('partner_details pd', 'pd.partner_id = u.id')
                        ->where('ug.group_id', 3)
                        ->whereIn('u.id', $provider_ids);
                    $users = $builder->get()->getResultArray();
                }
            }
            foreach ($users as $key => $row) {
                if (check_exists(base_url('public/backend/assets/profiles/' . $row['profile_image'])) || check_exists(base_url('/public/uploads/users/partners/' . $row['profile_image'])) || check_exists($row['profile_image'])) {
                    if (filter_var($row['profile_image'], FILTER_VALIDATE_URL)) {
                        $users[$key]['profile_image'] = $row['profile_image'];
                    } else {
                        $users[$key]['profile_image'] = (file_exists(FCPATH . 'public/backend/assets/profiles/' . $row['profile_image'])) ? base_url('public/backend/assets/profiles/' . $row['profile_image']) : ((file_exists(FCPATH . $row['profile_image'])) ? base_url($row['profile_image']) : ((!file_exists(FCPATH . "public/uploads/users/partners/" . $row['profile_image'])) ? base_url("public/backend/assets/profiles/default.png") : base_url("public/uploads/users/partners/" . $row['profile_image'])));
                    }
                }
            }
            return json_encode($users);
        } catch (\Throwable $th) {
            log_the_responce($th, date("Y-m-d H:i:s") . '--> app/Controllers/admin/Chats.php - get_providers()');
            return ErrorResponse("Something Went Wrong", true, [], [], 200, csrf_token(), csrf_hash());
        }
    }
}