mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
feat: mensajes directos cliente
This commit is contained in:
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Models\Chat;
|
||||
|
||||
use App\Models\ChatNotification;
|
||||
use App\Models\Usuarios\UserModel;
|
||||
use CodeIgniter\Model;
|
||||
|
||||
@ -75,7 +76,9 @@ class ChatMessageModel extends Model
|
||||
{
|
||||
$conversationArray = [];
|
||||
$userModel = model(UserModel::class);
|
||||
$chatNotificationModel = model(ChatNotification::class);
|
||||
$receiverUser = $userModel->find($receiver_id);
|
||||
$chat_id = null;
|
||||
$messagesFromClient = $this->builder()
|
||||
->where("sender_id", auth()->user()->id)
|
||||
->where("receiver_id", $receiverUser->id)
|
||||
@ -95,7 +98,9 @@ class ChatMessageModel extends Model
|
||||
$conversationArray[] = $message;
|
||||
}
|
||||
$dates = array();
|
||||
|
||||
foreach ($conversationArray as $key => $row) {
|
||||
$chatNotificationModel->builder()->set("viewed", true)->where("chat_message_id", $row->id)->where("user_id", auth()->user()->id)->update();
|
||||
$dates[$key] = strtotime($row->created_at);
|
||||
}
|
||||
array_multisort($dates, SORT_ASC, $conversationArray);
|
||||
@ -110,11 +115,25 @@ class ChatMessageModel extends Model
|
||||
->where("receiver_id", auth()->user()->id)->countAllResults();
|
||||
return $messagesFromReceiver;
|
||||
}
|
||||
public function get_chat_messages_count(int $sender_id): int
|
||||
{
|
||||
$messagesFromReceiver = $this->builder()
|
||||
->groupStart()
|
||||
->where("sender_id", $sender_id)
|
||||
->where("receiver_id", auth()->user()->id)
|
||||
->orGroupStart()
|
||||
->where("receiver_id", $sender_id)
|
||||
->where("sender_id", auth()->user()->id)
|
||||
->groupEnd()
|
||||
->groupEnd()
|
||||
->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("user_id", $sender_id)
|
||||
->where("receiver_id", auth()->user()->id)->update();
|
||||
return $messagesFromReceiver;
|
||||
}
|
||||
@ -122,23 +141,32 @@ class ChatMessageModel extends Model
|
||||
{
|
||||
$chatDepartmentModel = model(ChatDeparmentModel::class);
|
||||
$chatModel = model(ChatModel::class);
|
||||
|
||||
if(auth()->user()->cliente_id){
|
||||
$messagesFromReceiver = 0;
|
||||
$auth_user = auth()->user();
|
||||
$chat_department_id = $chatModel->find($chat_id)->chat_department_id;
|
||||
$users_in_chat = array_map(fn($x) => $x->id, $chatDepartmentModel->getChatDepartmentUsers($chat_department_id));
|
||||
if (auth()->user()->cliente_id) {
|
||||
// Si el usuario es cliente, marca como leídos todos los mensajes exceptos los suyos
|
||||
$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();
|
||||
->set("viewed", true)
|
||||
->where("chat_id", $chat_id)
|
||||
->whereNotIn("sender_id", [$auth_user->id])->update();
|
||||
} else {
|
||||
// Si el usuario no es cliente y está dentro de los usuarios de departamento
|
||||
// marca como leido todos los mensajes, excepto los mensajes de los usuarios
|
||||
// de dentro del departamento
|
||||
if (in_array($auth_user->id, $users_in_chat) == true) {
|
||||
// if (($key = array_search($auth_user->id, $users_in_chat)) !== false) {
|
||||
// unset($users_in_chat[$key]);
|
||||
// }
|
||||
$messagesFromReceiver = $this->builder()
|
||||
->set("viewed", true)
|
||||
->where("chat_id", $chat_id)
|
||||
->whereNotIn("sender_id", $users_in_chat)
|
||||
->update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $messagesFromReceiver;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user