3namespace Bitrix\Im\V2\Chat;
6use Bitrix\Im\Call\Conference;
8use Bitrix\Im\Model\BlockUserTable;
9use Bitrix\IM\Model\ConferenceTable;
10use Bitrix\IM\Model\ConferenceUserRoleTable;
12use Bitrix\Im\V2\Entity\User\User;
13use Bitrix\Im\V2\Relation\DeleteUserConfig;
14use Bitrix\Im\V2\Result;
15use Bitrix\Im\V2\Service\Context;
16use Bitrix\Main\Application;
17use Bitrix\Main\DB\SqlExpression;
18use Bitrix\Main\Localization\Loc;
20use CIMMessageParamAttach;
24 private const MAX_CONF_NUMBER = 999;
28 return self::ENTITY_TYPE_VIDEOCONF;
39 if (!$addResult->isSuccess() || !$addResult->hasResult())
44 $chatResult = $addResult->getResult();
46 $chat = $chatResult[
'CHAT'];
50 !isset(
$params[
'VIDEOCONF'][
'ALIAS_DATA'])
51 || !isset(
$params[
'VIDEOCONF'][
'ALIAS_DATA'][
'ID'])
52 || !isset(
$params[
'VIDEOCONF'][
'ALIAS_DATA'][
'LINK'])
57 "ENTITY_ID" => $chat->getChatId(),
62 $aliasData =
$params[
'VIDEOCONF'][
'ALIAS_DATA'];
64 Alias::update($aliasData[
'ID'], [
'ENTITY_ID' => $chat->getChatId()]);
68 'ALIAS_ID' => $aliasData[
'ID']
71 if (isset(
$params[
'VIDEOCONF'][
'PASSWORD']))
73 $conferenceData[
'PASSWORD'] =
$params[
'VIDEOCONF'][
'PASSWORD'];
77 $conferenceData[
'PASSWORD'] =
$params[
'CONFERENCE_PASSWORD'] ??
'';
80 if (isset(
$params[
'VIDEOCONF'][
'INVITATION']))
82 $conferenceData[
'INVITATION'] =
$params[
'VIDEOCONF'][
'INVITATION'];
85 $conferenceData[
'IS_BROADCAST'] = isset(
$params[
'VIDEOCONF'][
'IS_BROADCAST']) &&
$params[
'VIDEOCONF'][
'IS_BROADCAST'] ===
'Y'?
'Y':
'N';
87 $creationResult = ConferenceTable::add($conferenceData);
88 if (isset(
$params[
'VIDEOCONF'][
'PRESENTERS']))
90 foreach (
$params[
'VIDEOCONF'][
'PRESENTERS'] as $presenter)
92 ConferenceUserRoleTable::add([
93 'CONFERENCE_ID' => $creationResult->getId(),
94 'USER_ID' => $presenter,
95 'ROLE' => Conference::ROLE_PRESENTER
101 .
GetMessage(
"IM_VIDEOCONF_LINK_TITLE") .
': [URL]' . $aliasData[
'LINK'] .
'[/URL][BR]'
103 $attach =
new CIMMessageParamAttach(
null,
Color::getColor($chat->getColor()));
104 $attach->SetDescription(CIMMessageParamAttach::FIRST_MESSAGE);
107 $keyboard = new \Bitrix\Im\Bot\Keyboard();
108 $keyboard->addButton(
110 "TEXT" =>
GetMessage(
"IM_VIDEOCONF_COPY_LINK"),
112 "ACTION_VALUE" => $aliasData[
'LINK'],
114 "BG_COLOR" =>
"#A4C31E",
115 "TEXT_COLOR" =>
"#FFF"
119 \CIMChat::AddMessage([
120 "TO_CHAT_ID" => $chat->getChatId(),
121 "FROM_USER_ID" => $chat->getAuthorId(),
122 "MESSAGE" =>
GetMessage(
'IM_VIDEOCONF_CREATE_WELCOME'),
125 "KEYBOARD" => $keyboard,
127 'COMPONENT_ID' =>
'ConferenceCreationMessage',
129 'SKIP_USER_CHECK' =>
'Y',
132 $addResult->setResult([
133 'CHAT_ID' => $chat->getChatId(),
135 'ALIAS' => $aliasData[
'ALIAS'],
136 'LINK' => $aliasData[
'LINK'],
139 $chat->isFilledNonCachedData =
false;
146 return 'IM_VIDEOCONF_CREATE_' . $author->getGender();
156 if (!isset(
$params[
'VIDEOCONF'][
'PASSWORD']) && isset(
$params[
'CONFERENCE_PASSWORD']))
163 $params[
'MANAGE_UI'] =
$params[
'MANAGE_UI'] ?? $this->getDefaultManageUI();
164 $params[
'MANAGE_SETTINGS'] =
$params[
'MANAGE_SETTINGS'] ?? $this->getDefaultManageSettings();
165 $params[
'MANAGE_USERS_ADD'] =
$params[
'MANAGE_USERS_ADD'] ?? $this->getDefaultManageUsersAdd();
166 $params[
'MANAGE_USERS_DELETE'] =
$params[
'MANAGE_USERS_DELETE'] ?? $this->getDefaultManageUsersDelete();
167 $params[
'MANAGE_MESSAGES'] =
$params[
'MANAGE_MESSAGES'] ?? $this->getDefaultManageMessages();
175 $paramData =
$params->getResult();
178 $confParams = Conference::prepareParamsForAdd($paramData);
179 if (!$confParams->isSuccess())
183 $confParams = $confParams->getData()[
'FIELDS'];
185 return $params->setResult(array_merge($paramData, $confParams));
190 CGlobalCounter::Increment(
'im_videoconf_count', CGlobalCounter::ALL_SITES,
false);
191 $videoconfCount = CGlobalCounter::GetValue(
'im_videoconf_count', CGlobalCounter::ALL_SITES);
193 if ($videoconfCount === self::MAX_CONF_NUMBER)
195 CGlobalCounter::Set(
'im_videoconf_count', 1, CGlobalCounter::ALL_SITES,
'',
false);
198 return Loc::GetMessage(
'IM_VIDEOCONF_NAME_FORMAT_NEW', [
199 '#NUMBER#' => $videoconfCount
215 parent::updateStateAfterRelationsAdd($usersToAdd);
217 $wasUserBlocked = BlockUserTable::query()
219 ->where(
'CHAT_ID', $this->getId())
220 ->whereIn(
'USER_ID', $usersToAdd)
225 if (empty($wasUserBlocked))
230 BlockUserTable::deleteByFilter([
'=USER_ID' => $wasUserBlocked]);
237 parent::updateStateAfterUserDelete($deletedUserId,
$config);
240 if ($externalAuthId ===
'call')
244 'CHAT_ID' => $this->getId(),
245 'USER_ID' => $deletedUserId,
246 'BLOCK_DATE' =>
new SqlExpression(Application::getConnection()->getSqlHelper()->getCurrentDateTimeFunction())
const ENTITY_TYPE_VIDEOCONF
static update($id, $fields)
static addUnique(array $fields)
add(array $params, ?Context $context=null)
needToSendGreetingMessages()
setExtranet(?bool $extranet)
updateStateAfterRelationsAdd(array $usersToAdd)
needToSendMessageUserDelete()
prepareParams(array $params=[])
updateStateAfterUserDelete(int $deletedUserId, DeleteUserConfig $config)
getCodeGreetingMessage(\Bitrix\Im\V2\Entity\User\User $author)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
GetMessage($name, $aReplace=null)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']