1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
VideoConfChat.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Chat;
4
5use Bitrix\Im\Alias;
6use Bitrix\Im\Call\Conference;
7use Bitrix\Im\Color;
8use Bitrix\Im\Model\BlockUserTable;
9use Bitrix\IM\Model\ConferenceTable;
10use Bitrix\IM\Model\ConferenceUserRoleTable;
11use Bitrix\Im\V2\Chat;
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;
19use CGlobalCounter;
20use CIMMessageParamAttach;
21
23{
24 private const MAX_CONF_NUMBER = 999;
25
26 public function getDefaultEntityType(): ?string
27 {
28 return self::ENTITY_TYPE_VIDEOCONF;
29 }
30
31 protected function needToSendGreetingMessages(): bool
32 {
33 return true;
34 }
35
36 public function add(array $params, ?Context $context = null): Result
37 {
38 $addResult = parent::add($params, $context);
39 if (!$addResult->isSuccess() || !$addResult->hasResult())
40 {
41 return $addResult;
42 }
43
44 $chatResult = $addResult->getResult();
46 $chat = $chatResult['CHAT'];
47
48
49 if (
50 !isset($params['VIDEOCONF']['ALIAS_DATA'])
51 || !isset($params['VIDEOCONF']['ALIAS_DATA']['ID'])
52 || !isset($params['VIDEOCONF']['ALIAS_DATA']['LINK'])
53 )
54 {
55 $aliasData = Alias::addUnique([
56 "ENTITY_TYPE" => Alias::ENTITY_TYPE_VIDEOCONF,
57 "ENTITY_ID" => $chat->getChatId(),
58 ]);
59 }
60 else
61 {
62 $aliasData = $params['VIDEOCONF']['ALIAS_DATA'];
63
64 Alias::update($aliasData['ID'], ['ENTITY_ID' => $chat->getChatId()]);
65 }
66
67 $conferenceData = [
68 'ALIAS_ID' => $aliasData['ID']
69 ];
70
71 if (isset($params['VIDEOCONF']['PASSWORD']))
72 {
73 $conferenceData['PASSWORD'] = $params['VIDEOCONF']['PASSWORD'];
74 }
75 else
76 {
77 $conferenceData['PASSWORD'] = $params['CONFERENCE_PASSWORD'] ?? '';
78 }
79
80 if (isset($params['VIDEOCONF']['INVITATION']))
81 {
82 $conferenceData['INVITATION'] = $params['VIDEOCONF']['INVITATION'];
83 }
84
85 $conferenceData['IS_BROADCAST'] = isset($params['VIDEOCONF']['IS_BROADCAST']) && $params['VIDEOCONF']['IS_BROADCAST'] === 'Y'? 'Y': 'N';
86
87 $creationResult = ConferenceTable::add($conferenceData);
88 if (isset($params['VIDEOCONF']['PRESENTERS']))
89 {
90 foreach ($params['VIDEOCONF']['PRESENTERS'] as $presenter)
91 {
92 ConferenceUserRoleTable::add([
93 'CONFERENCE_ID' => $creationResult->getId(),
94 'USER_ID' => $presenter,
95 'ROLE' => Conference::ROLE_PRESENTER
96 ]);
97 }
98 }
99
100 $message = ''
101 . GetMessage("IM_VIDEOCONF_LINK_TITLE") . ': [URL]' . $aliasData['LINK'] . '[/URL][BR]'
102 ;
103 $attach = new CIMMessageParamAttach(null, Color::getColor($chat->getColor()));
104 $attach->SetDescription(CIMMessageParamAttach::FIRST_MESSAGE);
105 $attach->AddMessage($message);
106
107 $keyboard = new \Bitrix\Im\Bot\Keyboard();
108 $keyboard->addButton(
109 [
110 "TEXT" => GetMessage("IM_VIDEOCONF_COPY_LINK"),
111 "ACTION" => "COPY",
112 "ACTION_VALUE" => $aliasData['LINK'],
113 "DISPLAY" => "LINE",
114 "BG_COLOR" => "#A4C31E",
115 "TEXT_COLOR" => "#FFF"
116 ]
117 );
118
119 \CIMChat::AddMessage([
120 "TO_CHAT_ID" => $chat->getChatId(),
121 "FROM_USER_ID" => $chat->getAuthorId(),
122 "MESSAGE" => GetMessage('IM_VIDEOCONF_CREATE_WELCOME'),
123 "SYSTEM" => 'Y',
124 "ATTACH" => $attach,
125 "KEYBOARD" => $keyboard,
126 'PARAMS' => [
127 'COMPONENT_ID' => 'ConferenceCreationMessage',
128 ],
129 'SKIP_USER_CHECK' => 'Y',
130 ]);
131
132 $addResult->setResult([
133 'CHAT_ID' => $chat->getChatId(),
134 'CHAT' => $chat,
135 'ALIAS' => $aliasData['ALIAS'],
136 'LINK' => $aliasData['LINK'],
137 ]);
138
139 $chat->isFilledNonCachedData = false;
140
141 return $addResult;
142 }
143
144 protected function getCodeGreetingMessage(\Bitrix\Im\V2\Entity\User\User $author): string
145 {
146 return 'IM_VIDEOCONF_CREATE_' . $author->getGender();
147 }
148
149 protected function prepareParams(array $params = []): Result
150 {
151 if (!isset($params['TITLE']))
152 {
153 $params['TITLE'] = $this->generateTitle();
154 }
155
156 if (!isset($params['VIDEOCONF']['PASSWORD']) && isset($params['CONFERENCE_PASSWORD']))
157 {
158 $params['PASSWORD'] = $params['CONFERENCE_PASSWORD'];
159 }
160
161 $params['SEARCHABLE'] = 'N';
162
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();
168
169 $params = parent::prepareParams($params);
170 if (!$params->isSuccess())
171 {
172 return $params;
173 }
174
175 $paramData = $params->getResult();
176
177 //todo: drag method into this class
178 $confParams = Conference::prepareParamsForAdd($paramData);
179 if (!$confParams->isSuccess())
180 {
181 return $confParams;
182 }
183 $confParams = $confParams->getData()['FIELDS'];
184
185 return $params->setResult(array_merge($paramData, $confParams));
186 }
187
188 public function generateTitle(): string
189 {
190 CGlobalCounter::Increment('im_videoconf_count', CGlobalCounter::ALL_SITES, false);
191 $videoconfCount = CGlobalCounter::GetValue('im_videoconf_count', CGlobalCounter::ALL_SITES);
192
193 if ($videoconfCount === self::MAX_CONF_NUMBER)
194 {
195 CGlobalCounter::Set('im_videoconf_count', 1, CGlobalCounter::ALL_SITES, '', false);
196 }
197
198 return Loc::GetMessage('IM_VIDEOCONF_NAME_FORMAT_NEW', [
199 '#NUMBER#' => $videoconfCount
200 ]);
201 }
202
203 public function setExtranet(?bool $extranet): \Bitrix\Im\V2\Chat
204 {
205 return $this;
206 }
207
208 public function getExtranet(): ?bool
209 {
210 return false;
211 }
212
213 protected function updateStateAfterRelationsAdd(array $usersToAdd): self
214 {
215 parent::updateStateAfterRelationsAdd($usersToAdd);
216
217 $wasUserBlocked = BlockUserTable::query()
218 ->setSelect(['ID'])
219 ->where('CHAT_ID', $this->getId())
220 ->whereIn('USER_ID', $usersToAdd)
221 ->fetchCollection()
222 ->getIdList()
223 ;
224
225 if (empty($wasUserBlocked))
226 {
227 return $this;
228 }
229
230 BlockUserTable::deleteByFilter(['=USER_ID' => $wasUserBlocked]);
231
232 return $this;
233 }
234
235 protected function updateStateAfterUserDelete(int $deletedUserId, DeleteUserConfig $config): Chat
236 {
237 parent::updateStateAfterUserDelete($deletedUserId, $config);
238
239 $externalAuthId = User::getInstance($deletedUserId)->getExternalAuthId();
240 if ($externalAuthId === 'call')
241 {
242 BlockUserTable::add(
243 [
244 'CHAT_ID' => $this->getId(),
245 'USER_ID' => $deletedUserId,
246 'BLOCK_DATE' => new SqlExpression(Application::getConnection()->getSqlHelper()->getCurrentDateTimeFunction())
247 ]
248 );
249 }
250
251 return $this;
252 }
253
254 protected function needToSendMessageUserDelete(): bool
255 {
256 return false;
257 }
258}
const ENTITY_TYPE_VIDEOCONF
Определения alias.php:14
static update($id, $fields)
Определения alias.php:75
static addUnique(array $fields)
Определения alias.php:57
static getColor($code)
Определения color.php:121
add(array $params, ?Context $context=null)
Определения GroupChat.php:99
setExtranet(?bool $extranet)
Определения VideoConfChat.php:203
updateStateAfterRelationsAdd(array $usersToAdd)
Определения VideoConfChat.php:213
prepareParams(array $params=[])
Определения VideoConfChat.php:149
updateStateAfterUserDelete(int $deletedUserId, DeleteUserConfig $config)
Определения VideoConfChat.php:235
getCodeGreetingMessage(\Bitrix\Im\V2\Entity\User\User $author)
Определения VideoConfChat.php:144
static getInstance()
Определения application.php:98
Определения result.php:20
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$context
Определения csv_new_setup.php:223
GetMessage($name, $aReplace=null)
Определения tools.php:3397
Определения ActionUuid.php:3
Определения culture.php:9
Определения ufield.php:9
$message
Определения payment.php:8
$config
Определения quickway.php:69
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799