Chat.php 2.71 KB
<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "chat".
 *
 * @property integer $chat_id
 * @property integer $status
 * @property string $comment
 * @property integer $from_user
 * @property integer $to_user
 *
 * @property User $fromUser
 * @property User $toUser
 * @property Message[] $messages
 */
class Chat extends \yii\db\ActiveRecord
{
    public $newMessage;

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'chat';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['status', 'from_user', 'to_user'], 'integer'],
            [['comment'], 'string'],
            [['from_user'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['from_user' => 'id']],
            [['to_user'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['to_user' => 'id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'chat_id' => 'Chat ID',
            'status' => 'Status',
            'comment' => 'Comment',
            'from_user' => 'From User',
            'to_user' => 'To User',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getFromUser()
    {
        return $this->hasOne(User::className(), ['id' => 'from_user']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getToUser()
    {
        return $this->hasOne(User::className(), ['id' => 'to_user']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getMessages()
    {
        return $this->hasMany(Message::className(), ['chat_id' => 'chat_id']) ;

    }


    public function getAllMessages(){
        $messages = $this->hasMany(Message::className(), ['chat_id' => 'chat_id'])->orderBy('message_id');
        $messages_clone = clone($messages);
        Message::updateAll(['status' => 0], ['message_id' => $messages->select(['message_id'])->where(['status' => 1])->column()]);

        return $messages_clone;
    }


    public function getInterlocutor(){
        if($this->from_user == \Yii::$app->user->id){
            return UserInfo::findOne(['user_id'=>$this->to_user]);
        } else {
            return UserInfo::findOne(['user_id'=>$this->from_user]);
        }
    }

    public function hasNewMessage(){
        $newMessages = $this->getMessages()->where(['status'=>'1', ])
            ->andWhere(['<>','user_id', \Yii::$app->user->id])->all();
        if($newMessages){

            $this->newMessage = $newMessages;

            return true;

        } else {
            return false;
        }
    }


}