denisbespyatov/directchat

Yii2 direct chat

Installs: 4

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Type:yii2-extension

v1.0.0.1 2023-10-19 09:46 UTC

This package is not auto-updated.

Last update: 2024-05-17 10:50:08 UTC


README

#Yii2 Direct chat A simple chat for your yii2 application

##Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist denisbespyatov/directchat

or add

"denisbespyatov/directchat": "*"

to the require section of your composer.json file.

##Demo

Once the extension is installed, simply modify your application configuration as follows:

return [
    'bootstrap' => ['directchat'],
    'modules' => [
        'directchat' => [
            'class' => 'denisbespyatov\directchat\Module',
        ],
        // ...
    ],
    // ...
];

##Usage

Extend the main conversation class like follow:

namespace common\models;

use common\models\User;
//...

class Conversation extends \denisbespyatov\directchat\db\Conversation
{
    public function getContact()
    {
        return $this->hasOne(User::className(), ['id' => 'contact_id']);
    }
    
    /**
     * @inheritDoc
     */
    protected static function baseQuery($userId)
    {
        return parent::baseQuery($userId) ->with(['contact.profile']);
    }
    
    /**
     * @inheritDoc
     */
    public function fields()
    {
        return [
            //...
            'contact' => function ($model) {
                return $model['contact'];
            },
            'deleteUrl',
            'readUrl',
            'unreadUrl',
            //...
        ];
    }
}

Extend the main message class like follow:

namespace common\models;

//...

class Message extends \denisbespyatov\directchat\db\Message
{
    /**
     * @inheritDoc
     */
    public function fields()
    {
        return [
            //...
            'text',
            'date' => 'created_at',
            //...
        ];
    }
}

Create a controller like follow:

namespace frontend\controllers;

//...
use yii\web\Controller;
use common\models\Conversation;
use common\models\Message;
use denisbespyatov\directchat\controllers\ControllerTrait;
//...

class MessageController extends Controller
{
    use ControllerTrait;
    
    /**
     * @return string
     */
    public function getMessageClass()
    {
        return Message::className();
    }

    /**
     * @return string
     */
    public function getConversationClass()
    {
        return Conversation::className();
    }
}

Note: If you are using this extension in your frontend application, you can find the usage of widgets in index.twig.