• Модуль: 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);
			}
		}
	}
}