• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session.php
  • Класс: BitrixImOpenLinesSession
  • Вызов: Session::start
public function start($params)
{
	Debug::addSession($this, 'begin ' . __METHOD__, $params);
	$result = new Result();

	$result->setResult(false);

	$this->connectorId = $params['SOURCE'];

	$fields = [];
	$fields['PARENT_ID'] = (int)($params['PARENT_ID'] ?? 0);
	$fields['USER_CODE'] = $params['USER_CODE'];

	$fields['USER_CODE_FAIL'] = $params['USER_CODE_FAIL'];

	$fields['CONFIG_ID'] = (int)$params['CONFIG_ID'];
	$fields['USER_ID'] = (int)$params['USER_ID'];
	$fields['OPERATOR_ID'] = (int)($params['OPERATOR_ID'] ?? 0);
	$params['CRM_TRACE_DATA'] = (string)($params['CRM_TRACE_DATA'] ?? '');
	$params['CRM_SKIP_PHONE_VALIDATE'] = (string)($params['CRM_SKIP_PHONE_VALIDATE'] ?? '');
	$fields['SOURCE'] = (string)($params['SOURCE'] ?? '');
	$fields['MODE'] =  (isset($params['MODE']) && $params['MODE'] === self::MODE_OUTPUT ? self::MODE_OUTPUT : self::MODE_INPUT);
	$params['DEFERRED_JOIN'] = (isset($params['DEFERRED_JOIN']) && $params['DEFERRED_JOIN'] === 'Y' ? 'Y' : 'N');
	$params['SKIP_CREATE'] = (isset($params['SKIP_CREATE']) && $params['SKIP_CREATE'] === 'Y' ? 'Y' : 'N');
	$params['REOPEN'] = (isset($params['REOPEN']) && $params['REOPEN'] === 'Y' ? 'Y' : 'N');
	$params['SKIP_CRM'] = (isset($params['SKIP_CRM']) && $params['SKIP_CRM'] === 'Y' ? 'Y' : 'N');

	//Check open line configuration load
	if (empty($this->config) && !empty($fields['CONFIG_ID']))
	{
		$configManager = new Config();
		$this->config = $configManager->get($fields['CONFIG_ID']);
	}
	if (empty($this->config))
	{
		$result->addError(new Error(
			Loc::getMessage('IMOL_SESSION_ERROR_NO_IMOL_CONFIGURATION'),
			'NO IMOL CONFIGURATION',
			__METHOD__,
			$params
		));
	}

	if ($result->isSuccess())
	{
		if ($this->prepareUserChat($params) !== true || empty($this->chat))
		{
			$result->addError(new Error(Loc::getMessage('IMOL_SESSION_ERROR_NO_CHAT'), 'NO CHAT', __METHOD__, $params));
		}
	}

	if ($result->isSuccess())
	{
		//Load session
		$resultReading = $this->readingSession($fields, $params);

		if ($resultReading->isSuccess())
		{
			if ($resultReading->getResult() == true)
			{
				$result->setResult(true);
			}
			//If you do create a session
			elseif
			(
				$params['SKIP_CREATE'] !== 'Y' &&
				!$this->isCloseVote()
			)
			{
				//Creating a new session
				$resultCreate = $this->createSession($fields, $params);

				if ($resultCreate->isSuccess())
				{
					$result->setResult(true);
				}
				else
				{
					$result->addErrors($resultCreate->getErrors());
				}
			}
		}
		else
		{
			$result->addErrors($resultReading->getErrors());
		}
	}

	Debug::addSession($this, 'end ' . __METHOD__, ['SUCCESS' => $result->isSuccess(), 'ERRORS' => $result->getErrorMessages()]);

	return $result;
}