/** * AJAX * Получает новые сообщения * Эта функция стоит как слушатель и вызывается каждые 10 секунд * Возвращаемые сообщения будут отсортировны от ранних до поздних * * REQUEST: * - from - int - идентификатор пользователя, от кого * - last_datetime - int - время от которого нужно получить сообщения * * @return string json array * [ * { * 'datetime' => int, * 'html' => string * }, ... * ] */ public function actionGet_new_messages() { // self::validateRequestJson([ // [['last_datetime', 'from'], 'required'], // [['last_datetime', 'from'], 'integer'], // ]); $last_datetime = self::getParam('last_datetime'); $items = ChatMessage::query(['user_id_from' => self::getParam('from'), 'user_id_to' => \Yii::$app->user->id])->andWhere(['>', 'datetime', $last_datetime])->orderBy(['datetime' => SORT_ASC])->all(); $new = []; foreach ($items as $item) { $new[] = ['datetime' => $item['datetime'], 'html' => $this->renderFile('@app/views/cabinet_chat/get_new_messages.php', ['message' => new ChatMessage($item), 'user' => User::find($item['user_id_from'])])]; } return self::jsonSuccess($new); }
/** * Показывает разговор с конкретным пользователем * * @return string|\yii\web\Response */ public function actionUser($id) { return $this->render(['items' => ChatMessage::getItems($id), 'userFrom' => Yii::$app->user->id, 'userTo' => $id]); }
/** * @return \yii\db\ActiveQuery */ public function getChatMessages() { return $this->hasMany(ChatMessage::className(), ['profile_id' => 'id']); }