- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/chat.php
- Класс: BitrixImOpenLinesChat
- Вызов: Chat::transfer
public function transfer($params, $session = null): bool
{
$result = false;
if ($this->isDataLoaded())
{
$keyLock = QueueQueue::PREFIX_KEY_LOCK . $this->chat['ID'];
if (ToolsLock::getInstance()->set($keyLock))
{
$mode = in_array($params['MODE'], [self::TRANSFER_MODE_AUTO, self::TRANSFER_MODE_BOT], true) ? $params['MODE']: self::TRANSFER_MODE_MANUAL;
$selfExit = !(isset($params['LEAVE']) && $params['LEAVE'] === 'N');
$skipCheck = isset($params['SKIP_CHECK']) && $params['SKIP_CHECK'] === 'Y';
if (!$session instanceof Session)
{
$session = new Session();
$session->setChat($this);
}
$resultLoadSession = $session->load([
'USER_CODE' => $this->chat['ENTITY_ID']
]);
if ($resultLoadSession)
{
if ($this->validationAction($session->getData('CHAT_ID')))
{
//Event
$event = new Event("imopenlines", "OnOperatorTransfer", [
'CHAT' => $this->chat,
'SESSION' => $session,
'TRANSFER' => [
'MODE' => $mode,
'FROM' => $params['FROM'],
'TO' => $params['TO'],
]
]);
$event->send();
foreach ($event->getResults() as $eventResult)
{
if ($eventResult->getType() !== BitrixMainEventResult::SUCCESS)
{
continue;
}
$newValues = $eventResult->getParameters();
if (!empty($newValues['TRANSFER_ID']))
{
$params['TO'] = $newValues['TRANSFER_ID'];
}
}
// END Event
//Transfer to queue
if (mb_strpos($params['TO'], 'queue') === 0)
{
$result = $this->transferToQueue($params, $session, $mode);
}
//Transfer to the operator
else
{
$result = $this->transferToOperator($params, $session, $mode, $selfExit, $skipCheck);
}
}
}
ToolsLock::getInstance()->delete($keyLock);
}
}
return $result;
}