/** * Delete message (change status) * * @param integer $messageId * @param null $userId * @return int */ public static function deleteMessage($messageId, $userId = null) { $userId = $userId ? $userId : Yii::$app->user->id; $message = PoprigunChatMessage::find()->select([PoprigunChatMessage::tableName() . '.id', PoprigunChatUser::tableName() . '.id as chat_user_id'])->innerJoinWith('dialog')->innerJoinWith('dialog.poprigunChatUsers')->andWhere([PoprigunChatMessage::tableName() . '.id' => $messageId])->andWhere([PoprigunChatUser::tableName() . '.user_id' => $userId])->asArray()->one(); if (empty($message)) { return false; } return self::updateAll(['status' => self::STATUS_DELETED], ['message_id' => $message['id'], 'chat_user_id' => $message['chat_user_id']]); }
/** * Delete dialog/delete dialog messages (change status) * * @param integer $dialogId * @param integer|null $userId * @return int */ public static function deleteDialog($dialogId, $userId = null) { $userId = $userId ? $userId : Yii::$app->user->id; $messageIds = PoprigunChatMessage::find()->select([PoprigunChatMessage::tableName() . '.id', PoprigunChatUser::tableName() . '.id as chat_user_id'])->innerJoinWith('chatUserRel')->innerJoinWith('chatUserRel.chatUser')->andWhere([PoprigunChatMessage::tableName() . '.dialog_id' => $dialogId])->andWhere([PoprigunChatUser::tableName() . '.user_id' => $userId])->asArray()->all(); if (empty($messageIds)) { return false; } return PoprigunChatUserRel::updateAll(['status' => PoprigunChatUserRel::STATUS_DELETED], ['message_id' => ArrayHelper::map($messageIds, 'id', 'id'), 'chat_user_id' => ArrayHelper::map($messageIds, 'chat_user_id', 'chat_user_id')]); }
/** * @return \yii\db\ActiveQuery */ public function getMessage() { return $this->hasOne(PoprigunChatMessage::className(), ['id' => 'message_id']); }
/** * Send message * * @return bool * @throws BadRequestHttpException */ public function actionSendMessage() { $model = new PoprigunChatMessage(); if ($model->load(Yii::$app->request->post())) { $model->author_id = $this->user->id; $validate = ActiveForm::validate($model); if (empty($validate)) { $newMessage = $model->sendMessage(); $result = $newMessage === false ? $newMessage : $this->getMessageArray([$newMessage]); } else { $result = $validate; } } else { $result = $model->errors; } return $result; }