- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/chat.php
- Класс: BitrixImOpenLinesChat
- Вызов: Chat::restartSession
public function restartSession($userId, $message = ''): Result
{
$result = new Result();
if ($this->isDataLoaded())
{
$keyLock = self::PREFIX_KEY_LOCK_NEW_SESSION . $this->chat['ENTITY_ID'];
if (ToolsLock::getInstance()->set($keyLock))
{
$user = User::getInstance($userId);
$session = new Session();
$session->setChat($this);
$resultLoad = $session->load([
'USER_CODE' => $this->chat['ENTITY_ID'],
'SKIP_CREATE' => 'Y'
]);
if ($resultLoad)
{
if ($this->validationAction($session->getData('CHAT_ID')))
{
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]',
]),
]);
$session->finish(false, true, true);
$this->close();
}
else
{
$result->addError(new Error(Loc::getMessage('IMOL_CHAT_ERROR_NOT_LOAD_DATA'), 'IMOL_CHAT_ERROR_NOT_LOAD_DATA', __METHOD__, ['chat' => $this->chat]));
}
}
if ($result->isSuccess())
{
if (User::getInstance($userId)->isConnector())
{
$mode = Session::MODE_INPUT;
}
else
{
$mode = Session::MODE_OUTPUT;
}
$session = new Session();
$session->setChat($this);
$resultCreate = $session->load([
'USER_CODE' => $this->chat['ENTITY_ID'],
'MODE' => $mode,
]);
if (
$resultCreate &&
$session->isNowCreated()
)
{
$session->joinUser();
$dateClose = new DateTime();
$dateClose->add('1 MONTH');
$sessionUpdate = [
'CHECK_DATE_CLOSE' => $dateClose
];
if (User::getInstance($userId)->isConnector())
{
$sessionUpdate['DATE_FIRST_LAST_USER_ACTION'] = new DateTime();
}
$session->update($sessionUpdate);
if (
$mode === Session::MODE_INPUT &&
empty($message)
)
{
$message = Loc::getMessage('IMOL_CHAT_NEW_QUESTION_'.$user->getGender(), [
'#USER#' => '[USER='.$user->getId().'][/USER]',
]);
}
if (!empty($message))
{
Im::addMessage([
'TO_CHAT_ID' => $this->chat['ID'],
'MESSAGE' => $message,
'SYSTEM' => 'Y',
'IMPORTANT_CONNECTOR' => 'Y',
'NO_SESSION_OL' => 'Y',
'PARAMS' => [
'CLASS' => 'bx-messenger-content-item-ol-output',
'IMOL_FORM' => 'offline',
'TYPE' => 'lines',
'COMPONENT_ID' => 'bx-imopenlines-form-offline',
],
]);
}
$result->setResult(true);
}
}
ToolsLock::getInstance()->delete($keyLock);
}
else
{
$result->addError(new Error(
'This chat is blocked for this operation. Running a parallel competitive query.',
'IMOL_CHAT_ERROR_NOT_START_SESSION',
__METHOD__,
['chat' => $this->chat]
));
}
}
else
{
$result->addError(new Error(
'Chat failed to load',
'NOT_LOAD_CHAT',
__METHOD__,
['chat' => $this->chat, 'userId' => $userId, 'message' => $message]
));
}
return $result;
}