builder()->where("chat_id", $chat_id)->orderBy("created_at", "asc")->get()->getResultObject(); foreach ($messages as $message) { $message->pos = auth()->user()->id == $message->sender_id ? "right" : "left"; if (auth()->user()->id == $message->sender_id) { $message->user = auth()->user(); } else { $message->user = $user->find($message->sender_id); } } return $messages; } public function get_chat_contact_messages(int $receiver_id): array { $conversationArray = []; $userModel = model(UserModel::class); $receiverUser = $userModel->find($receiver_id); $messagesFromClient = $this->builder() ->where("sender_id", auth()->user()->id) ->where("receiver_id", $receiverUser->id) ->get()->getResultObject(); $messagesFromReceiver = $this->builder() ->where("sender_id", $receiver_id) ->where("receiver_id", auth()->user()->id) ->get()->getResultObject(); foreach ($messagesFromClient as $message) { $message->pos = "right"; $message->user = auth()->user(); $conversationArray[] = $message; } foreach ($messagesFromReceiver as $message) { $message->pos = "left"; $message->user = $receiverUser; $conversationArray[] = $message; } $dates = array(); foreach ($conversationArray as $key => $row) { $dates[$key] = strtotime($row->created_at); } array_multisort($dates, SORT_ASC, $conversationArray); return $conversationArray; } public function get_chat_unread_messages_count(int $sender_id): int { $messagesFromReceiver = $this->builder() ->where("sender_id", $sender_id) ->where("viewed", false) ->where("receiver_id", auth()->user()->id)->countAllResults(); return $messagesFromReceiver; } public function set_chat_messages_as_read(int $sender_id): int { $messagesFromReceiver = $this->builder() ->set("viewed", true) ->where("sender_id", $sender_id) ->where("receiver_id", auth()->user()->id)->update(); return $messagesFromReceiver; } public function set_chat_department_messages_as_read(int $chat_id): int { $chatDepartmentModel = model(ChatDeparmentModel::class); $chatModel = model(ChatModel::class); if(auth()->user()->cliente_id){ $messagesFromReceiver = $this->builder() ->set("viewed", true) ->where("chat_id", $chat_id) ->whereNotIn("sender_id", [auth()->user()->id])->update(); }else{ $chat_department_id = $chatModel->find($chat_id)->chat_department_id; $users_in_chat = array_map(fn($x) => $x->id, $chatDepartmentModel->getChatDepartmentUsers($chat_department_id)); $messagesFromReceiver = $this->builder() ->set("viewed", true) ->where("chat_id", $chat_id) ->whereNotIn("sender_id", $users_in_chat) ->update(); } return $messagesFromReceiver; } }