chat_id; $chat = ChatGroup::find($chat_id); if($chat){ $chat->status = 'closed'; $chat->save(); return true; }else{ return false; } } public function getChat(Request $request){ $chat_id = $request->chat_id; return ChatGroup::find($chat_id); } public function getMessages(Request $request){ $chat_id = $request->chat_id; return Message::where('chat_id',$chat_id)->get(); } /** * Start a new chat by creating a chat group. * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function startChat(Request $request) { $validator = Validator::make($request->all(), [ 'company_id' => 'required|integer|exists:companies,id', //'user_id' => 'required|integer|exists:users,id', 'customer_id' => 'required|string|max:255', 'name' => 'required|string|max:255', 'email' => 'required|email|max:255', 'subject' => 'required|string|max:1000', //'status' => 'required|string|max:255' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } $company_id = $request->company_id; $user = $this->select_user($company_id); if($user){ $data = [ 'company_id' => $company_id, 'user_id' => $user->user_id, 'customer_id' => $request->customer_id, 'name' => $request->name, 'email' => $request->email, 'subject' => $request->subject, 'status' => 'open', ]; $chatGroup = ChatGroup::create($data); return response()->json(['chat' => $chatGroup], 200); }else{ return response()->json(['message' => 'user not found'], 400); } } public function sendMessage(Request $request) { $validator = Validator::make($request->all(), [ 'chat_id' => 'required|integer|exists:chat_group,id', 'from' => 'required|string|max:255', //'to' => 'required|string|max:255', //'message' => 'required|string', 'type' => 'required|string|max:255' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } $fileUrl = ''; if ($request->hasFile('file')) { $file = $request->file('file'); $filePath = $file->store('chat', 'public'); // Store in the 'public/uploads' directory $fileUrl = url(Storage::url($filePath)); // Generate the file URL } $data = [ 'chat_id' => $request->chat_id, 'from' => $request->from, 'to' => $request->from == 'user'?'company':'user', 'message' => $request->hasFile('file')? $fileUrl: $request->message, 'type' => $request->type, ]; $message = Message::create($data); return response()->json(['message' => 'Message sent successfully', 'data' => $message], 200); } public function select_user($company_id){ $companyUsers = get_company_users($company_id); //Get Max Number f Chats $get_max_number_of_chats = CompanyMeta::where('company_id', $company_id)->where('key', 'max_number_of_chats_per_editor')->first(); if(!is_null($get_max_number_of_chats)){ $get_max_number_of_chats = $get_max_number_of_chats->value; }else{ $get_max_number_of_chats = 5; } $selected = false; foreach($companyUsers as $user){ $access = json_decode($user->access); //Get Chat Groups $chat_groups = ChatGroup::where('user_id', $user->user_id)->where('status', 'open')->count(); if(in_array('chat',$access) && $user->user->is_available == 1 && $chat_groups <= $get_max_number_of_chats){ $selected = $user; break; } } return $selected; } public function getChatGroupsByCompany(Request $request) { $companyId = getSelectedCompany(); $chatGroups = ChatGroup::where('company_id', $companyId) ->where(function($query) { $query->where('status', '!=', 'ticket_created') ->where('status', '!=', 'closed'); }) ->get(); return response()->json($chatGroups); } public function getIpAdresses($companyId) { return CompanyMeta::where('company_id', $companyId) ->where('type', 'Chat Setting') ->where('key', 'ip_addresses') ->pluck('value') ->toArray(); } public function checkChat(Request $request){ $company_id = $request->company_id; $domain = $request->domain; $company = get_company('id',$company_id); $ip_addresses = $this->getIpAdresses($company_id); $ip = $_SERVER['REMOTE_ADDR']; if(in_array($ip, $ip_addresses)) { return response()->json(['status' => 'error', 'message' => 'this IP Address ' . $ip . ' has been blocked.']); } if($company){ // Str::contains('This is my name', 'my') if( $company->domain == $domain ){ $start_message = getChatSetting('start_message',$company_id)?getChatSetting('start_message',$company_id)->value:"What can we help you with?"; //welcome message $message_when_chat_is_closed = getChatSetting('message_when_chat_is_closed',$company_id)?getChatSetting('message_when_chat_is_closed',$company_id)->value:"No user is availble right now! Try later."; $wellcome_text = getChatSetting('wellcome_text',$company_id)?getChatSetting('wellcome_text',$company_id)->value:"Hi, welcome how i can help you today?"; //Get Style $styles = [ 'text_theme_color' => getChatSetting('text_theme_color', $company_id) ? getChatSetting('text_theme_color', $company_id)->value : null, 'background_theme_color' => getChatSetting('background_theme_color', $company_id) ? getChatSetting('background_theme_color', $company_id)->value : null, 'text_color_for_sent_message' => getChatSetting('text_color_for_sent_message', $company_id) ? getChatSetting('text_color_for_sent_message', $company_id)->value : null, 'background_color_of_sent_message' => getChatSetting('background_color_of_sent_message', $company_id) ? getChatSetting('background_color_of_sent_message', $company_id)->value : null, 'background_color_of_received_message' => getChatSetting('background_color_of_received_message', $company_id) ? getChatSetting('background_color_of_received_message', $company_id)->value : null, 'text_color_of_received_message' => getChatSetting('text_color_of_received_message', $company_id) ? getChatSetting('text_color_of_received_message', $company_id)->value : null, 'text_color_of_notification' => getChatSetting('text_color_of_notification', $company_id) ? getChatSetting('text_color_of_notification', $company_id)->value : null, 'text_color_of_error_message' => getChatSetting('text_color_of_error_message', $company_id) ? getChatSetting('text_color_of_error_message', $company_id)->value : null, 'background_color_of_error_message' => getChatSetting('background_color_of_error_message', $company_id) ? getChatSetting('background_color_of_error_message', $company_id)->value : null, 'link_color' => getChatSetting('link_color', $company_id) ? getChatSetting('link_color', $company_id)->value : null, ]; //Get Display $settings = getChatSettings('Display Chat', $company_id); $display_chats = $settings ? $settings->pluck('value')->map(function($value) { return json_decode($value); }) : null; $hide_chats = getChatSetting('Hide Chat', $company_id) ? getChatSetting('Hide Chat', $company_id)->value : null; $displays = [ 'display_chats' => $display_chats, 'hide_chat' => $hide_chats, ]; //Get Canned Responses $canned_responses = getChatSettings('Chat Canned Responses', $company_id); $canned_responses = $canned_responses ? $canned_responses->pluck('value')->map(function($value) { return json_decode($value); }) : null; //Terms And Conditions $link_text = "https://kundesone.no/terms-and-conditions/$company_id";//getChatSetting('link_text', $company_id) ? getChatSetting('link_text', $company_id)->value : null; $user = $this->select_user($company_id); if($user){ return response()->json(['status' => 'success','data' => ['welcome' => $wellcome_text, 'start_message' => $start_message, 'user' => $user->user->name, 'styles' => $styles, 'displays' => $displays, 'canned_responses' => $canned_responses, 'link_text' => $link_text] ]); }else{ return response()->json(['status' => 'error', 'message' => $message_when_chat_is_closed]); } }else{ return response()->json(['status' => 'error', 'message' => "You are not authorized!"]); } } return response()->json(['status' => 'error', 'message' => "You are not authorized!"]); } }