• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/provider/network/input.php
  • Класс: BitrixImConnectorProviderNetworkInput
  • Вызов: Input::processingFinishSession
protected function processingFinishSession(array $params, $message): Result
{
	$result = clone $this->result;

	$sessions = array_map(function($value){return (int)$value;}, $params['SESSIONS']);

	if (
		empty($sessions)
		&& $result->isSuccess()
	)
	{
		$result->addError(new Error(
			'No session',
			'ERROR_IMCONNECTOR_ERROR_NO_SESSION',
			__METHOD__,
			$params
		));
	}

	if ($result->isSuccess())
	{
		$querySession = ImConnectorDataSession::getInstance()->query();
		$orm = $querySession
			->setSelect(['ID', 'CONFIG_ID', 'USER_ID', 'SOURCE', 'CHAT_ID', 'USER_CODE'])
			->setFilter([
				'=ID' => $sessions,
				'=CLOSED' => 'N',
			])
			->exec()
		;
		while (
			($row = $orm->fetch())
			&& $result->isSuccess()
		)
		{
			/** @var BitrixImOpenLinesServicesMessage $messenger */
			$messenger = ServiceLocator::getInstance()->get('ImOpenLines.Services.Message');
			$messenger->addMessage([
				'MESSAGE_TYPE' => IM_MESSAGE_OPEN_LINE,
				'TO_CHAT_ID' => $row['CHAT_ID'],
				'MESSAGE' => $params['MESSAGE'] ? : $message,
				'SYSTEM' => 'Y',
				'SKIP_COMMAND' => 'Y',
				'RECENT_ADD' => 'N',
				'PARAMS' => [
					'CLASS' => 'bx-messenger-content-item-system'
				],
			]);

			/** @var BitrixImOpenLinesServicesSessionManager $sessionManager */
			$sessionManager = ServiceLocator::getInstance()->get('ImOpenLines.Services.SessionManager');
			$session = $sessionManager->create();

			$resultSessionStart = $session->start(array_merge($row, [
				'SKIP_CREATE' => 'Y',
			]));

			if (
				!$resultSessionStart->isSuccess() ||
				$resultSessionStart->getResult() !== true
			)
			{
				$result->addError(new Error(
					'Failed to load session',
					'ERROR_IMCONNECTOR_FAILED_LOAD_SESSION',
					__METHOD__,
					$params
				));
			}
			else
			{
				$session->finish();
			}
		}
	}

	return $result;
}