dominservice/conversations

此包将允许您将完整的用户消息系统添加到您的Laravel应用程序中。

2.0.26 2023-10-24 20:47 UTC

README

Latest Version Total Downloads Software License

对话

此包将允许您将完整的用户消息系统添加到您的Laravel应用程序中。

注意

此包适用于Laravel

重要

由于结构发生了重大变化,此包是 dominservice/laravel_chat 包的延续,因此我决定创建一个单独的仓库。如果您有之前的版本,可以在保留数据库内容的同时卸载它,新包包含迁移,将数据移动到新结构。请在执行此操作之前记得备份!

安装

composer require dominservice/conversations

或者手动在 composer.json 中放置

"require": {
    "dominservice/conversations": "^1.0"
}

运行

composer update

将服务提供者添加到 config/app.php

'providers' => [
    Dominservice\Conversations\ConversationsServiceProvider::class,
],

(...)

'aliases' => [
    'Conversations' => Dominservice\Conversations\Facade\Conversations::class,
]

发布配置

php artisan vendor:publish --provider="Dominservice\Conversations\ConversationsServiceProvider"

迁移

php artisan migrate

记住

config/conversations.php 文件中配置此包

使用方法

创建新的对话

$convs = (new Dominservice\Conversations\Conversations)->create($users, $relationType = null, $relationId = null, $content = null, $getObject = false);

或者使用辅助工具进行简短操作

$convs = conversation_create($users, $relationType = null, $relationId = null, $content = null, $getObject = false);

如果 $getObject === true,您将获得包含所有关联和用户的“Dominservice\Conversations\Entities\Conversation”对话对象,否则方法仅返回对话ID

如果存在,向对话中添加消息或创建

$messageId = (new Dominservice\Conversations\Conversations)->addMessageOrCreateConversation($users, $content, $relationType = null, $relationId = null);

或者使用辅助工具进行简短操作

$messageId = conversation_add_or_create($users, $content, $relationType = null, $relationId = null);

向对话中添加消息

$messageId = (new Dominservice\Conversations\Conversations)->addMessage($convUuid, $content, $addUser = false);

或者使用辅助工具进行简短操作

$messageId = conversation_add_message($convUuid, $content, $addUser = false);

获取用户之间的对话ID

$conversationId = (new Dominservice\Conversations\Conversations)->getIdBetweenUsers(array $users, $relationType = null, $relationId = null);

或者使用辅助工具进行简短操作

$conversationId = conversation_id_between($users, $relationType = null, $relationId = null);

检查用户是否在对话中

$existsUser = (new Dominservice\Conversations\Conversations)->existsUser($convUuid, $userId);

或者使用辅助工具进行简短操作

$existsUser = conversation_user_exists($convUuid, $userId = null);

在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id

获取所有未读消息的数量

$count = (new Dominservice\Conversations\Conversations)->getUnreadCount($userId);

或者使用辅助工具进行简短操作

$count = conversation_unread_count($userId = null);

在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id

获取特定对话中未读消息的数量

$count = (new Dominservice\Conversations\Conversations)->getConversationUnreadCount($convUuid, $userId);

或者使用辅助工具进行简短操作

$count = conversation_unread_count_per_id($convUuid, $userId = null);

在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id

删除对话

此方法将所选用户对话中所有消息的状态设置为 DELETED。如果所有用户的所有消息状态均为 DELETED,则永久删除对话的所有值。

(new Dominservice\Conversations\Conversations)->delete($convUuid, $userId);

或者使用辅助工具进行简短操作

conversation_delete($convUuid, $userId = null);

在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id

获取特定用户的全部对话

$conversations = (new Dominservice\Conversations\Conversations)->getConversations($userId, $relationType = null, $relationId = null);

这将返回一个包含“Dominservice\Conversations\Entities\Conversation”对象的“Illuminate\Support\Collection”。对于每个对话,您将拥有对话的最后一条消息和对话的用户。示例

foreach ( $conversations as $conv ) {
    $getNumOfUsers = $conv->getNumOfUsers();
    $users = $conv->users; /* Collection */
            
    /* $lastMessage Dominservice\Conversations\Entities\Message */
    $lastMessage = $conv->getLastMessage();
            
    $senderId = $lastMessage->sender;
    $content = $lastMessage->content;
    $status = $lastMessage->status;
}

或者使用辅助工具进行简短操作

$conversations = conversations($userId = null, $relationType = null, $relationId = null, $withUsersList = true);

在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id,并且辅助工具将用户和对话设置为数组。

获取对话的消息

$messages = (new Dominservice\Conversations\Conversations)->getMessages($convUuid, $userId, $newToOld = true, $limit = null, $start = null);

或者使用辅助工具进行简短操作

$messages = conversation_messages($convUuid, $userId = null, $newToOld = true, $limit = null, $start = null);

在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id

获取对话中的未读消息

$messages = (new Dominservice\Conversations\Conversations)->getUnreadMessages($convUuid, $userId, $newToOld = true, $limit = null, $start = null);

或者使用辅助工具进行简短操作

$messages = conversation_messages_unread($convUuid, $userId = null, $newToOld = true, $limit = null, $start = null);

在辅助工具中,如果 userId 为 null,则 userId = \Auth::user()->id

设置消息的状态

标记消息。如果 userIdnull,则设置当前用户ID。

conversation_mark_as_archived($convUuid, $msgId, $userId = null);
conversation_mark_as_deleted($convUuid, $msgId, $userId = null);
conversation_mark_as_unread($convUuid, $msgId, $userId = null);
conversation_mark_as_read($convUuid, $msgId, $userId = null);

conversation_mark_as_read_all($convUuid, $userId = null);
conversation_mark_as_unread_all($convUuid, $userId = null);

示例

    public function conversations() {
        $currentUser = Auth::user();
        //get the conversations
        $conversations = conversations($currentUser->id);
        //array for storing our users data, as that Conversations only provides user id's
        $users = collect();
        
        //gathering users
        foreach ( $conversations as $conv ) {
            $users->push($conv->users);
        }
        //making sure each user appears once
        $users = $users->unique();
        
        return View::make('conversations_page')
            ->with('users', $users)
            ->with('user', $currentUser)
            ->with('conversations', $conversations);
    }

致谢

tzookb/tbmsg