- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/queue/event/queue.php
- Класс: BitrixImOpenLinesQueueEventQueue
- Вызов: Queue::returnSessionsUsersToQueue
public function returnSessionsUsersToQueue(array $userIds, string $reasonReturn = ImOpenLinesQueue::REASON_DEFAULT): void
{
if (!empty($userIds))
{
$sessionNotAccepted = [];
$sessionAccepted = [];
$sessionWaitClient = [];
$managerSessionCheck = SessionCheckTable::getList([
'select' => [
'ID' => 'SESSION_ID',
'STATUS' => 'SESSION.STATUS',
'DATE_CLOSE'
],
'filter' => [
'=SESSION.CONFIG_ID' => $this->configLine['ID'],
'=SESSION.OPERATOR_ID' => $userIds,
]
]);
while ($session = $managerSessionCheck->fetch())
{
$status = $session['STATUS'];
unset($session['STATUS']);
if ($status == Session::STATUS_WAIT_CLIENT)
{
$sessionWaitClient[$session['ID']] = $session;
}
elseif ($status < Session::STATUS_ANSWER)
{
$sessionNotAccepted[$session['ID']] = $session;
}
else
{
$sessionAccepted[$session['ID']] = $session;
}
}
if (!empty($sessionWaitClient))
{
$this->returnSessionsWaitClientUsersToQueue($sessionWaitClient, $reasonReturn);
}
if (!empty($sessionNotAccepted) || !empty($sessionAccepted))
{
$freeSlotsCount = $this->getCountFreeSlots();
$sessionsCount = count($sessionNotAccepted) + count($sessionAccepted);
if (!empty($sessionAccepted))
{
$this->returnSessionsAcceptedUsersToQueue(array_keys($sessionAccepted), $reasonReturn);
}
if ($sessionsCount > $freeSlotsCount)
{
$managerSessionCheck = SessionCheckTable::getList([
'select' => [
'ID' => 'SESSION_ID',
],
'filter' => [
'=SESSION.CONFIG_ID' => $this->configLine['ID'],
' Session::STATUS_ANSWER,
'!=SESSION.OPERATOR_FROM_CRM' => 'Y'
]
]);
while ($sessionId = $managerSessionCheck->fetch()['ID'])
{
$sessionNotAccepted[$sessionId] = $sessionId;
}
}
if (!empty($sessionNotAccepted))
{
$this->returnSessionsNotAcceptedUsersToQueue(array_keys($sessionNotAccepted), $reasonReturn);
}
}
}
}