mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
messages view
This commit is contained in:
@ -3,12 +3,13 @@
|
||||
namespace App\Models\Chat;
|
||||
|
||||
use App\Models\ChatNotification;
|
||||
use App\Models\ChatUser;
|
||||
use App\Models\Facturas\FacturaModel;
|
||||
use App\Models\Pedidos\PedidoModel;
|
||||
use App\Models\Presupuestos\PresupuestoModel;
|
||||
use App\Models\Usuarios\UserModel;
|
||||
use CodeIgniter\Model;
|
||||
use stdClass;
|
||||
use CodeIgniter\Database\BaseBuilder;
|
||||
|
||||
class ChatModel extends Model
|
||||
{
|
||||
@ -623,5 +624,126 @@ class ChatModel extends Model
|
||||
return $q;
|
||||
|
||||
}
|
||||
public function getChatFirstUser(int $chat_id) : object
|
||||
{
|
||||
$q = $this->builder()->select(["users.id",
|
||||
"CONCAT(users.first_name,' ',users.last_name) as userFullName",
|
||||
])
|
||||
->join("chat_messages","chat_messages.chat_id = chats.id",'left')
|
||||
->join("users","users.id = chat_messages.sender_id","left")
|
||||
->where("chats.id",$chat_id)
|
||||
->where("chat_messages.deleted_at",null)
|
||||
->orderBy("chat_messages.created_at",'ASC');
|
||||
return $q->get()->getFirstRow();
|
||||
}
|
||||
/**
|
||||
* Check if all messages of a chat sended to an user have been viewed.
|
||||
*
|
||||
* @param integer $chat_id
|
||||
* @param integer $user_id
|
||||
* @return boolean True : All messages readed
|
||||
*/
|
||||
public function isMessageChatViewed(int $chat_id, int $user_id) : bool
|
||||
{
|
||||
$q = $this->builder()->select(["chat_notifications.id"])
|
||||
->join("chat_messages","chat_messages.chat_id = chats.id",'left')
|
||||
->join("chat_notifications","chat_notifications.chat_message_id = chat_messages.id",'left')
|
||||
->where("chats.id",$chat_id)
|
||||
->where("chat_notifications.user_id",$user_id)
|
||||
->where("chat_notifications.viewed",false);
|
||||
$unread_messages_count = $q->countAllResults();
|
||||
if($unread_messages_count > 0){
|
||||
$result = false;
|
||||
}else{
|
||||
$result = true;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getQueryDatatable(): BaseBuilder
|
||||
{
|
||||
$query = $this->builder()
|
||||
->select([
|
||||
"chats.id",
|
||||
"chats.created_at",
|
||||
"chats.updated_at",
|
||||
"chats.title",
|
||||
])
|
||||
->where("chat_department_id",null)
|
||||
->where("pedido_id",null)
|
||||
->where("presupuesto_id",null)
|
||||
->where("factura_id",null)
|
||||
->where("title is NOT NULL",NULL,FALSE)
|
||||
->orderBy("created_at", "DESC");
|
||||
return $query;
|
||||
}
|
||||
public function createNewDirectChat(string $title,string $message,array $users)
|
||||
{
|
||||
$chatMessageModel = model(ChatMessageModel::class);
|
||||
$chatNotificationModel = model(ChatNotification::class);
|
||||
$chatUserModel = model(ChatUser::class);
|
||||
$auth_user_id = auth()->user()->id;
|
||||
$chat_id = $this->insert(["title" => $title]);
|
||||
$chat_message_id = $chatMessageModel->insert([
|
||||
"chat_id" => $chat_id,
|
||||
"sender_id" => $auth_user_id,
|
||||
"receiver_id" => null,
|
||||
"message" => $message
|
||||
]);
|
||||
$chatUserModel->insert(["chat_id" => $chat_id,"user_id" => $auth_user_id]);
|
||||
foreach ($users as $key => $user_id) {
|
||||
$chatUserModel->insert(["chat_id" => $chat_id,"user_id" => $user_id]);
|
||||
$chatNotificationModel->insert(["chat_message_id" => $chat_message_id,"user_id" => $user_id]);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Obtain users and messages from `chat_id`
|
||||
*
|
||||
* @param integer $chat_id
|
||||
* @return array
|
||||
* [
|
||||
* "chat" => object,
|
||||
* "messages" => array ,
|
||||
* "users" => array
|
||||
* ]
|
||||
*/
|
||||
public function getChatDirect(int $chat_id) : array
|
||||
{
|
||||
$auth_user = auth()->user()->id;
|
||||
$chat = $this->find($chat_id);
|
||||
$query = $this->builder()->select([
|
||||
"users.*",
|
||||
])
|
||||
->join("chat_users","chat_users.chat_id = chats.id")
|
||||
->join("users","users.id = chat_users.user_id","left")
|
||||
->where("chats.id",$chat_id);
|
||||
$users = $query->get()->getResultObject();
|
||||
$query = $this->builder()->select([
|
||||
"chat_messages.*",
|
||||
"users.first_name as sender_first_name",
|
||||
"users.last_name as sender_last_name",
|
||||
|
||||
])
|
||||
->join("chat_messages","chat_messages.chat_id = chats.id","left")
|
||||
->join("users","chat_messages.sender_id = users.id","left")
|
||||
->where("chats.id",$chat_id);
|
||||
|
||||
$messages = $query->get()->getResultObject();
|
||||
$validatedMessages = [];
|
||||
foreach ($messages as $key => $message) {
|
||||
if($auth_user == $message->sender_id){
|
||||
$message->pos = 'right';
|
||||
$validatedMessages[] = $message;
|
||||
}else{
|
||||
$message->pos = 'left';
|
||||
$validatedMessages[] = $message;
|
||||
}
|
||||
}
|
||||
$data = [
|
||||
"chat" => $chat,
|
||||
"users" => $users,
|
||||
"messages" => $validatedMessages
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user