/**
  * 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);
 }
 /**
  * Показывает все чаты
  */
 public function actionIndex()
 {
     return $this->render(['items' => ChatMessage::query()->select(['cap_chat_messages.user_id_from as id', 'max(cap_chat_messages.datetime) as datetime', 'cap_users.name_first', 'cap_users.name_last', 'cap_users.email', 'cap_users.avatar'])->groupBy('if (`cap_chat_messages`.`user_id_from` = 7, `cap_chat_messages`.`user_id_to`, `cap_chat_messages`.`user_id_from`)')->innerJoin('cap_users', 'cap_users.id = cap_chat_messages.user_id_from')->orderBy(['max(cap_chat_messages.datetime)' => SORT_DESC])->all()]);
 }