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