- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/chat.php
- Класс: BitrixImOpenLinesChat
- Вызов: Chat::startSessionByMessage
public function startSessionByMessage($userId, $messageId): bool
{
$result = false;
if ($this->isDataLoaded())
{
$keyLock = self::PREFIX_KEY_LOCK_NEW_SESSION . $this->chat['ENTITY_ID'];
if (ToolsLock::getInstance()->set($keyLock))
{
$session = new Session();
$session->setChat($this);
$resultLoad = $session->load([
'USER_CODE' => $this->chat['ENTITY_ID']
]);
if (
$resultLoad
&& $this->validationAction($session->getData('CHAT_ID'))
)
{
$message = CIMMessenger::GetById($messageId);
if ($message['CHAT_ID'] == $this->chat['ID'])
{
$user = User::getInstance($userId);
Im::addMessage([
'TO_CHAT_ID' => $this->chat['ID'],
'SYSTEM' => 'Y',
'MESSAGE' => Loc::getMessage('IMOL_CHAT_CLOSE_FOR_OPEN_'.$user->getGender(), [
'#USER#' => '[USER='.$user->getId().'][/USER]',
]),
]);
$configId = $session->getData('CONFIG_ID');
$sessionId = $session->getData('SESSION_ID');
$dateFirstLastUserAction = $session->getData('DATE_FIRST_LAST_USER_ACTION');
$session->finish(false, true, false);
$newSession = new Session();
$newSession->setChat($this);
$newSession->load([
'USER_CODE' => $this->chat['ENTITY_ID'],
'MODE' => Session::MODE_OUTPUT,
'OPERATOR_ID' => $userId,
'CONFIG_ID' => $configId,
'PARENT_ID' => $sessionId,
]);
if ($this->chat['AUTHOR_ID'] == $userId)
{
$resultAnswer = true;
}
else
{
$resultAnswer = $this->answer($userId, false, true)->isSuccess();
}
if ($resultAnswer)
{
Im::addMessage([
'TO_CHAT_ID' => $this->chat['ID'],
'FROM_USER_ID' => $message['AUTHOR_ID'],
'MESSAGE' => $message['MESSAGE'],
'PARAMS' => $message['PARAMS'],
'SKIP_CONNECTOR' => 'Y',
]);
$dateClose = new DateTime();
$dateClose->add('1 MONTH');
$sessionUpdate = [
'CHECK_DATE_CLOSE' => $dateClose,
'DATE_FIRST_LAST_USER_ACTION' => $dateFirstLastUserAction
];
if ($session->getData('EXTRA_TARIFF'))
{
$sessionUpdate['EXTRA_TARIFF'] = $session->getData('EXTRA_TARIFF');
}
$newSession->update($sessionUpdate);
$result = true;
}
}
}
ToolsLock::getInstance()->delete($keyLock);
}
}
return $result;
}