• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat/VideoConfChat.php
  • Класс: BitrixImV2ChatVideoConfChat
  • Вызов: VideoConfChat::add
public function add(array $params, ?Context $context = null): Result
{
	$result = new Result();

	$paramsResult = $this->prepareParams($params);
	if ($paramsResult->isSuccess())
	{
		$params = $paramsResult->getResult();
	}
	else
	{
		return $result->addErrors($paramsResult->getErrors());
	}

		if (!$params['TITLE'])
	{
		$params['TITLE'] = $this->generateTitle();
	}

	$addResult = parent::add($params, $context);
	if (!$addResult->isSuccess() || !$addResult->hasResult())
	{
		return $addResult;
	}

	$chatResult = $addResult->getResult();
	/** @var Chat $chat */
	$chat = $chatResult['CHAT'];


	if (
		!isset($params['VIDEOCONF']['ALIAS_DATA'])
		|| !isset($params['VIDEOCONF']['ALIAS_DATA']['ID'])
		|| !isset($params['VIDEOCONF']['ALIAS_DATA']['LINK'])
	)
	{
		$aliasData = Alias::addUnique([
			"ENTITY_TYPE" => Alias::ENTITY_TYPE_VIDEOCONF,
			"ENTITY_ID" => $chat->getChatId(),
		]);
	}
	else
	{
		$aliasData = $params['VIDEOCONF']['ALIAS_DATA'];

		AliasTable::update($aliasData['ID'], ['ENTITY_ID' => $chat->getChatId()]);
	}

	$conferenceData = [
		'ALIAS_ID' => $aliasData['ID']
	];

	if (isset($params['VIDEOCONF']['PASSWORD']))
	{
		$conferenceData['PASSWORD'] = $params['VIDEOCONF']['PASSWORD'];
	}
	else
	{
		$conferenceData['PASSWORD'] = $params['CONFERENCE_PASSWORD'] ?? '';
	}

	if (isset($params['VIDEOCONF']['INVITATION']))
	{
		$conferenceData['INVITATION'] = $params['VIDEOCONF']['INVITATION'];
	}

	$conferenceData['IS_BROADCAST'] = isset($params['VIDEOCONF']['IS_BROADCAST']) && $params['VIDEOCONF']['IS_BROADCAST'] === 'Y'? 'Y': 'N';

	$creationResult = ConferenceTable::add($conferenceData);
	if (isset($params['VIDEOCONF']['PRESENTERS']))
	{
		foreach ($params['VIDEOCONF']['PRESENTERS'] as $presenter)
		{
			ConferenceUserRoleTable::add([
				'CONFERENCE_ID' => $creationResult->getId(),
				'USER_ID' => $presenter,
				'ROLE' => Conference::ROLE_PRESENTER
			]);
		}
	}

	$message = ''
		. GetMessage("IM_VIDEOCONF_LINK_TITLE") . ': [URL]' . $aliasData['LINK'] . '[/URL][BR]'
	;
	$attach = new CIMMessageParamAttach(null, Color::getColor($chat->getColor()));
	$attach->SetDescription(CIMMessageParamAttach::FIRST_MESSAGE);
	$attach->AddMessage($message);

	$keyboard = new BitrixImBotKeyboard();
	$keyboard->addButton(
		[
			"TEXT" => GetMessage("IM_VIDEOCONF_COPY_LINK"),
			"ACTION" => "COPY",
			"ACTION_VALUE" => $aliasData['LINK'],
			"DISPLAY" => "LINE",
			"BG_COLOR" => "#A4C31E",
			"TEXT_COLOR" => "#FFF"
		]
	);

	CIMChat::AddMessage([
		"TO_CHAT_ID" => $chat->getChatId(),
		"FROM_USER_ID" => $chat->getAuthorId(),
		"MESSAGE" => GetMessage('IM_VIDEOCONF_CREATE_WELCOME'),
		"SYSTEM" => 'Y',
		"ATTACH" => $attach,
		"KEYBOARD" => $keyboard,
		'PARAMS' => [
			'COMPONENT_ID' => 'ConferenceCreationMessage',
		],
		'SKIP_USER_CHECK' => 'Y',
	]);

	$addResult->setResult([
		'CHAT_ID' => $chat->getChatId(),
		'CHAT' => $chat,
		'ALIAS' => $aliasData['ALIAS'],
		'LINK' => $aliasData['LINK'],
	]);

	return $addResult;
}