/** * Read messages. */ public function readMessages() { if (\Yii::app()->request->getParam('count', false)) { $this->controller->setMessAge(\ContactsManager::getCountByType($this->controller->identity->getId(), \ContactsManager::TYPE_NEW)); return; } $required = array('messageId' => true); $messageId = $this->controller->getParams($required)['messageId']; /** * @var \MessagingMessage $message */ $message = \MessagingMessage::model()->findByPk($messageId); $messages = \MessagingMessage::model()->forMarkAsReaded($messageId, $message->author_id, $this->controller->identity->getId())->findAll(array('limit' => 50)); $criteria = new \CDbCriteria(); $criteria->addInCondition('message_id', \CHtml::listData($messages, 'id', 'id')); $criteria->addColumnCondition(array('user_id' => $this->controller->identity->getId())); if (!\MessagingMessageUser::model()->updateAll(array('dtime_read' => new \CDbExpression('NOW()')), $criteria)) { throw new ApiException('UpdateFailed', 500); } $this->controller->setMessage('Success'); // Подготовим и отправим событие $comet = new \CometModel(); $criteria = new \CDbCriteria(); $criteria->addInCondition('message_id', \CHtml::listData($messages, 'id', 'id')); /** * @var \MessagingMessage[] $messageModels */ $messageModels = \MessagingMessage::model()->withMyStatsOnTop($this->controller->identity->getId(), false)->findAll($criteria); foreach ($messageModels as $messageModel) { $user = $messageModel->messageUsers[1]->user_id; //self $data = array('dialog' => array('id' => $user), 'message' => \DialogForm::messageToJson($messageModel, $this->controller->identity->getId(), $user, $messageModel->messageUsers[1])); $comet->send($this->controller->identity->getId(), $data, \CometModel::MESSAGING_MESSAGE_READ); //interlocutor $data = array('dialog' => array('id' => $this->controller->identity->getId()), 'message' => \DialogForm::messageToJson($messageModel, $user, $this->controller->identity->getId(), $messageModel->messageUsers[1])); $comet->send($user, $data, \CometModel::MESSAGING_MESSAGE_READ); } }