GithubHelp home page GithubHelp logo

jensenjack / chat Goto Github PK

View Code? Open in Web Editor NEW

This project forked from musonza/chat

0.0 2.0 0.0 207 KB

A Laravel chat package. You can use this package to create a chat/messaging Laravel application.

License: MIT License

PHP 100.00%

chat's Introduction

chat

Build Status Downloads Packagist

Chat

Demo Application

Introduction

This package allows you to add a chat system to your Laravel ^5.4 application

Installation

From the command line, run:

composer require musonza/chat

Add the service provider to your config\app.php the providers array

Musonza\Chat\ChatServiceProvider::class

Add the Facade to your aliases:

'Chat' => Musonza\Chat\Facades\ChatFacade::class to your `config\app.php`

The class is bound to the ioC as chat

$chat = App::make('chat');

Publish the assets:

php artisan vendor:publish

This will publish database migrations and a configuration file musonza_chat.php in the Laravel config folder.

Configuration

return [
    'user_model' => 'App\User',

    /**
     * If not set, the package will use getKeyName() on the user_model specified above
     */
    'user_model_primary_key' => null,

    /*
     * This will allow you to broadcast an event when a message is sent
     * Example:
     * Channel: mc-chat-conversation.2,
     * Event: Musonza\Chat\Eventing\MessageWasSent
     */
    'broadcasts' => false,

    /**
     * The event to fire when a message is sent
     * See Musonza\Chat\Eventing\MessageWasSent if you want to customize.
     */
    'sent_message_event' => 'Musonza\Chat\Eventing\MessageWasSent',

    /**
     * Automatically convert conversations with more than two users to public
     */
    'make_three_or_more_users_public' => true,
];

Run the migrations:

php artisan migrate

Usage

By default the package assumes you have a User model in the App namespace.

However, you can update the user model in musonza_chat.php published in the config folder.

Creating a conversation

$participants = [$userId, $userId2,...];

$conversation = Chat::createConversation($participants);

Creating a conversation of type private / public

$participants = [$userId, $userId2,...];

// Create a private conversation
$conversation = Chat::createConversation($participants)->makePrivate();

// Create a public conversation
$conversation = Chat::createConversation($participants)->makePrivate(false);

Get a conversation by id

$conversation = Chat::conversations()->getById($id);

Update conversation details

$data = ['title' => 'PHP Channel', 'description' => 'PHP Channel Description'];
$conversation->update(['data' => $data]);

Send a text message

$message = Chat::message('Hello')
            ->from($user)
            ->to($conversation)
            ->send();

Send a message of custom type

The default message type is text. If you want to specify custom type you can call the type() function as below:

$message = Chat::message('http://example.com/img')
		->type('image')
		->from($user)
		->to($conversation)
		->send();

Get a message by id

$message = Chat::messages()->getById($id);

Mark a message as read

Chat::message($message)->setUser($user)->markRead();

Flag / mark a message

Chat::message($message)->setUser($user)->toggleFlag();

Chat::message($message)->setUser($user)->flagged(); // true

Mark whole conversation as read

Chat::conversation($conversation)->setUser($user)->readAll();

Unread messages count

$unreadCount = Chat::messages()->setUser($user)->unreadCount();

Unread messages count per Conversation

Chat::conversation($conversation)->setUser($user)->unreadCount();

Delete a message

Chat::message($message)->setUser($user)->delete();

Clear a conversation

Chat::conversation($conversation)->setUser($user)->clear();

Get a conversation between two users

$conversation = Chat::conversations()->between($user1, $user2);

Get common conversations among users

$conversations = Chat::conversations()->common($users);

$users can be an array of user ids ex. [1,4,6] or a collection (\Illuminate\Database\Eloquent\Collection) of users

Remove users from a conversation

/* removing one user */
Chat::conversation($conversation)->removeParticipants($user);
/* removing multiple users */
Chat::conversation($conversation)->removeParticipants([$user1, $user2, $user3,...,$userN]);

Add users to a conversation

/* add one user */
Chat::conversation($conversation)->addParticipants($user);
/* add multiple users */
Chat::conversation($conversation)->addParticipants([$user3, $user4]);

Note: By default, a third user will classify the conversation as not private if it was. See config on how to change this.

Get messages in a conversation

Chat::conversation($conversation)->setUser($user)->getMessages()

Get user conversations by type

// private conversations
$conversations = Chat::conversations()->setUser($user)->isPrivate()->get();

// public conversations
$conversations = Chat::conversations()->setUser($user)->isPrivate(false)->get();

// all conversations
$conversations = Chat::conversations()->setUser($user)->get();

Get recent messages

$messages = Chat::conversations()->setUser($user)->limit(25)->page(1)->get();

Example

[
      "id" => 1
      "private" => "1"
      "data" => []
      "created_at" => "2018-06-02 21:35:52"
      "updated_at" => "2018-06-02 21:35:52"
      "last_message" => array:13 [
        "id" => 2
        "message_id" => "2"
        "conversation_id" => "1"
        "user_id" => "1"
        "is_seen" => "1"
        "is_sender" => "1"
        "flagged" => false
        "created_at" => "2018-06-02 21:35:52"
        "updated_at" => "2018-06-02 21:35:52"
        "deleted_at" => null
        "body" => "Hello 2"
        "type" => "text"
        "sender" => array:7 [
          "id" => 1
          "name" => "Jalyn Ernser"
          "email" => "[email protected]"
        ]
      ]
    ]

Pagination

There are a few ways you can achieve pagination You can specify the limit and page as above using the respective functions or as below:

   $paginated = Chat::conversations()->setUser($user)
            ->setPaginationParams([
                'page' => 3,
                'perPage' => 10,
                'sorting' => "desc",
                'columns' => [
                    '*'
                ],
                'pageName' => 'test'
            ])
            ->get();

You don't have to specify all the parameters. If you leave the parameters out, default values will be used. $paginated above will return Illuminate\Pagination\LengthAwarePaginator To get the conversations simply call $paginated->items()

Get users in a conversation

$users = $conversation->users;

License

Chat is open-sourced software licensed under the MIT license

chat's People

Contributors

musonza avatar moecasts avatar abhishekpaul avatar flyingcoder avatar leohubert avatar mirzazulfan avatar mostafanobaghi avatar owenvoke avatar axe1987 avatar

Watchers

James Cloos avatar JensenJack avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.