1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
im_call.php
См. документацию.
1<?
3
4class CIMCall
5{
6 public static function Invite($arParams)
7 {
8 $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
9 if ($arConfig['CHAT_ID'] <= 0)
10 return false;
11
12 global $DB, $USER;
13
14 $arConfig['RECIPIENT_ID'] = intval($arParams['RECIPIENT_ID']);
15 $arConfig['USER_ID'] = intval($arParams['USER_ID']) > 0? intval($arParams['USER_ID']): intval($USER->GetID());
16 $arConfig['VIDEO'] = isset($arParams['VIDEO']) && $arParams['VIDEO'] == 'N'? 'N': 'Y';
17 $arConfig['MOBILE'] = isset($arParams['MOBILE']) && $arParams['MOBILE'] == 'Y'? 'Y': 'N';
18
19 $arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID'], 'USER_ID' => $USER->GetId()));
20 if (empty($arChat['chat']))
21 return false;
22
23 $arConfig['CALL_TO_GROUP'] = $arChat['chat'][$arConfig['CHAT_ID']]['message_type'] != IM_MESSAGE_PRIVATE;
24 $arConfig['STATUS_TYPE'] = intval($arChat['chat'][$arConfig['CHAT_ID']]['call']);
25
26 if (!$arConfig['CALL_TO_GROUP'] && !IsModuleInstalled('intranet') && CIMSettings::GetPrivacy(CIMSettings::PRIVACY_CALL, $arConfig['RECIPIENT_ID']) == CIMSettings::PRIVACY_RESULT_CONTACT
27 && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed() && !CSocNetUserRelations::IsFriends($arConfig['USER_ID'], $arConfig['RECIPIENT_ID']))
28 {
29 $GLOBALS["APPLICATION"]->ThrowException(GetMessage('IM_ERROR_CALL_PRIVACY'), "ERROR_FROM_PRIVACY");
30 return false;
31 }
32
33 if ($arConfig['STATUS_TYPE'] != IM_CALL_NONE)
34 {
35 if ($arConfig['CALL_TO_GROUP'])
36 self::MessageToChat($arConfig['CHAT_ID'], "IM_CALL_CHAT_START_", $arConfig['USER_ID'], true);
37
38 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_ANSWER." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$arConfig['USER_ID'];
39 $DB->Query($strSql);
40
41 $arUserData = CIMContactList::GetUserData(Array('ID' => $arChat['userInChat'][$arConfig['CHAT_ID']], 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
42 $arConfig['USER_DATA']['USERS'] = $arUserData['users'];
43 $arConfig['USER_DATA']['HR_PHOTO'] = $arUserData['hrphoto'];
44
45 foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
46 {
47 if ($userId != $arConfig['USER_ID'] && in_array($callStatus, Array(IM_CALL_STATUS_WAIT, IM_CALL_STATUS_ANSWER)))
48 $arUserToConnect[$userId] = $callStatus;
49 }
50 $arConfig['USERS_CONNECT'] = $arUserToConnect;
51
52 $arSend['users'] = $arUserData['users'];
53 $arSend['hrphoto'] = $arUserData['hrphoto'];
54 $arSend['video'] = $arConfig['VIDEO'] == 'Y'? true: false;
55 $arSend['callToGroup'] = $arConfig['CALL_TO_GROUP'];
56 if ($arConfig['CALL_TO_GROUP'])
57 {
58 $arSend['chat'] = $arChat['chat'];
59 }
60 $arSend['userChatBlockStatus'] = $arChat['userChatBlockStatus'];
61 $arSend['userInChat'] = $arChat['userInChat'];
62
63 foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
64 {
65 if ($userId != $arConfig['USER_ID'] && !in_array($callStatus, Array(IM_CALL_STATUS_DECLINE)))
66 {
67 self::Command($arConfig['CHAT_ID'], $userId, 'invite_join', $arSend);
68 }
69 }
70 }
71 else
72 {
73 if ($arConfig['CALL_TO_GROUP'])
74 self::MessageToChat($arConfig['CHAT_ID'], "IM_CALL_CHAT_INIT_", $arConfig['USER_ID'], true);
75
76 $strSql = "UPDATE b_im_chat SET CALL_TYPE = ".($arConfig['VIDEO'] == 'Y'? IM_CALL_VIDEO: IM_CALL_AUDIO)." WHERE ID = ".$arConfig['CHAT_ID'];
77 $DB->Query($strSql);
78
79 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_ANSWER." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$arConfig['USER_ID'];
80 $DB->Query($strSql);
81
82 $arUserToConnect = Array();
83 foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
84 {
85 if ($userId != $arConfig['USER_ID'])
86 $arUserToConnect[$userId] = $callStatus;
87 }
88
89 $arUserData = CIMContactList::GetUserData(Array('ID' => $arChat['userInChat'][$arConfig['CHAT_ID']], 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
90 $arSend['users'] = $arUserData['users'];
91 $arSend['hrphoto'] = $arUserData['hrphoto'];
92 $arSend['video'] = $arConfig['VIDEO'] == 'Y';
93 $arSend['callToGroup'] = $arConfig['CALL_TO_GROUP'];
94 if ($arConfig['CALL_TO_GROUP'])
95 {
96 $arSend['chat'] = $arChat['chat'];
97 }
98 $arSend['userChatBlockStatus'] = $arChat['userChatBlockStatus'];
99 $arSend['userInChat'] = $arChat['userInChat'];
100 $arSend['isMobile'] = $arConfig['MOBILE'] == 'Y';
101 foreach ($arUserToConnect as $userId => $callStatus)
102 self::Command($arConfig['CHAT_ID'], $userId, 'invite', $arSend);
103
104 $arConfig['USER_DATA']['USERS'] = $arUserData['users'];
105 $arConfig['USER_DATA']['HR_PHOTO'] = $arUserData['hrphoto'];
106
107 if (!$arConfig['CALL_TO_GROUP'] && CModule::IncludeModule('pull') && CPullOptions::GetPushStatus())
108 {
109 $arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME");
110 $dbUsers = CUser::GetList('', '', array('ID_EQUAL_EXACT' => $USER->GetID()), array('FIELDS' => $arSelect));
111 if ($arUser = $dbUsers->GetNext(true, false))
112 {
114 $pushText = GetMessage('IM_CALL_INVITE', Array('#USER_NAME#' => $sName));
115 }
116 else
117 {
118 $pushText = GetMessage('IM_CALL_INVITE', Array('#USER_NAME#' => GetMessage('IM_CALL_INVITE_NA')));
119 }
120
121 $pushParams = $arSend;
122 $pushParams['senderId'] = (int)$USER->GetID();
123 $pushParams['chatId'] = $arConfig['CHAT_ID'];
124
125 \Bitrix\Pull\Push::add(array_keys($arUserToConnect), Array(
126 'module_id' => 'im',
127 'push' => Array(
128 'message' => $pushText,
129 'expiry' => 0,
130 'params' => array(
131 'ACTION' => 'IMINV_'. $USER->GetID()."_".time()."_".$arConfig['VIDEO'],
132 'PARAMS' => $pushParams
133 ),
134 'advanced_params' => Array(
135 'id' => 'IM_CALL_'.$USER->GetID(),
136 'notificationsToCancel' => array('IM_CALL_'.$USER->GetID()),
137 'androidHighPriority' => true,
138 'useVibration'=>true
139 ),
140 'app_id' => 'Bitrix24',
141 'sound'=>'call.aif',
142 'send_immediately' => 'Y'
143 )
144 ));
145 }
146 }
147 foreach(GetModuleEvents("im", "OnCallStart", true) as $arEvent)
148 ExecuteModuleEventEx($arEvent, array($arConfig));
149
150 return $arConfig;
151 }
152
153 public static function AddUser($arParams)
154 {
155 $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
156 if ($arConfig['CHAT_ID'] <= 0)
157 return false;
158
159 $arConfig['USERS'] = Array();
160 if (is_array($arParams['USERS']))
161 {
162 foreach ($arParams['USERS'] as $value)
163 $arConfig['USERS'][] = intval($value);
164 }
165 else
166 {
167 $arConfig['USERS'][] = intval($arParams['USERS']);
168 }
169 if (empty($arConfig['USERS']))
170 return false;
171
172 global $DB, $USER;
173
174 $arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID'], 'USER_ID' => $USER->GetId()));
175 if (empty($arChat['chat']))
176 return false;
177
178 $arConfig['CALL_TYPE'] = intval($arChat['chat'][$arConfig['CHAT_ID']]['call']);
179 $arConfig['LAST_CHAT_ID'] = $arConfig['CHAT_ID'];
180 if ($arChat['chat'][$arConfig['CHAT_ID']]['message_type'] == IM_MESSAGE_PRIVATE)
181 {
182 $strSql = "UPDATE b_im_chat SET CALL_TYPE = ".IM_CALL_NONE." WHERE ID = ".$arConfig['CHAT_ID'];
183 $DB->Query($strSql);
184
185 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_NONE." WHERE CHAT_ID = ".$arConfig['CHAT_ID'];
186 $DB->Query($strSql);
187
188 $arUserToConnect = Array();
189 $arUser = Array();
190
191 foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
192 {
193 $arUser[] = $userId;
194 $arUserToConnect[$userId] = $callStatus;
195 }
196
197 $arUser = array_merge($arUser, $arConfig['USERS']);
198 if (!is_array($arUser))
199 return false;
200
201 $CIMChat = new CIMChat();
202 $chatId = $CIMChat->Add(Array('USERS' => $arUser));
203 if (!$chatId)
204 return false;
205
206 $arConfig['CHAT_ID'] = $chatId;
207
208 $strSql = "UPDATE b_im_chat SET CALL_TYPE = ".$arConfig['CALL_TYPE']." WHERE ID = ".$arConfig['CHAT_ID'];
209 $DB->Query($strSql);
210
211 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_WAIT." WHERE CHAT_ID = ".$arConfig['CHAT_ID'];
212 $DB->Query($strSql);
213
214 foreach ($arUserToConnect as $userId => $callStatus)
215 {
216 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".$callStatus." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$userId;
217 $DB->Query($strSql);
218 }
219 }
220 else
221 {
222 $CIMChat = new CIMChat();
223 $result = $CIMChat->AddUser($arConfig['CHAT_ID'], $arConfig['USERS']);
224 if (!$result)
225 return false;
226
227 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_WAIT." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID IN (".implode(',', $arConfig['USERS']).")";
228 $DB->Query($strSql);
229
230 $arUserToConnect = Array();
231 $arUser = Array();
232 foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
233 {
234 $arUser[] = $userId;
235 $arUserToConnect[$userId] = $callStatus;
236 }
237 foreach ($arConfig['USERS'] as $userId)
238 {
239 $arUserToConnect[$userId] = IM_CALL_STATUS_WAIT;
240 }
241 }
242
243 $arUserData = CIMContactList::GetUserData(Array('ID' => $arUser, 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
244 $arConfig['USER_DATA']['USERS'] = $arUserData['users'];
245 $arConfig['USER_DATA']['HR_PHOTO'] = $arUserData['hrphoto'];
246
247 $arSend = Array();
248 $arSend['users'] = $arUserData['users'];
249 $arSend['hrphoto'] = $arUserData['hrphoto'];
250 $arSend['lastChatId'] = $arConfig['LAST_CHAT_ID'];
251 foreach ($arUserToConnect as $userId => $callStatus)
252 self::Command($arConfig['CHAT_ID'], $userId, 'invite_user', $arSend);
253
254 $arSend['video'] = $arConfig['CALL_TYPE'] == IM_CALL_VIDEO? true: false;
255 $arSend['callToGroup'] = true;
256 foreach ($arConfig['USERS'] as $userId)
257 self::Command($arConfig['CHAT_ID'], $userId, 'join', $arSend);
258
259 return $arConfig;
260 }
261
262 public static function Answer($arParams)
263 {
264 $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
265 if ($arConfig['CHAT_ID'] <= 0)
266 return false;
267
268 global $DB, $USER;
269 $arConfig['USER_ID'] = intval($arParams['USER_ID']) > 0? intval($arParams['USER_ID']): intval($USER->GetID());
270
271 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_ANSWER." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$arConfig['USER_ID'];
272 $DB->Query($strSql);
273
274 if ($arParams['CALL_TO_GROUP'])
275 self::MessageToChat($arConfig['CHAT_ID'], "IM_CALL_CHAT_START_", $arConfig['USER_ID'], true);
276
277 $arConfig['MOBILE'] = isset($arParams['MOBILE']) && $arParams['MOBILE'] == 'Y'? 'Y': 'N';
278
279 CIMCall::Signaling(Array(
280 'CHAT_ID' => $arConfig['CHAT_ID'],
281 'USER_ID' => $arConfig['USER_ID'],
282 'PARAMS' => Array('isMobile' => $arConfig['MOBILE'] == 'Y'),
283 'COMMAND' => 'answer',
284 ));
285 self::Command($arConfig['CHAT_ID'], $arConfig['USER_ID'], 'answer_self', Array());
286
287 $arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID'], 'USER_ID' => $arConfig['USER_ID']));
288 if (empty($arChat['chat']))
289 return false;
290
291 foreach ($arChat['userInChat'][$arConfig['CHAT_ID']] as $value)
292 {
293 if ($arConfig['USER_ID'] != $value)
294 {
295 $arConfig['RECIPIENT_ID'] = $value;
296 break;
297 }
298 }
299
300 if (!$arParams['CALL_TO_GROUP'] && CModule::IncludeModule('pull') && CPullOptions::GetPushStatus())
301 {
302 \Bitrix\Pull\Push::add($arConfig['USER_ID'], Array(
303 'module_id' => 'im',
304 'push' => Array(
305 'expiry' => 0,
306 'advanced_params' => Array(
307 'notificationsToCancel' => array('IM_CALL_'. $arConfig['RECIPIENT_ID']),
308 ),
309 'send_immediately' => 'Y'
310 )
311 ));
312 \Bitrix\Pull\Push::add($arConfig['RECIPIENT_ID'], Array(
313 'module_id' => 'im',
314 'push' => Array(
315 'expiry' => 0,
316 'advanced_params' => Array(
317 'notificationsToCancel' => array('IM_CALL_'. $arConfig['USER_ID']),
318 ),
319 'send_immediately' => 'Y'
320 )
321 ));
322 }
323
324 return true;
325 }
326
327 public static function Wait($arParams)
328 {
329 $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
330 if ($arConfig['CHAT_ID'] <= 0)
331 return false;
332
333 global $DB, $USER;
334 $arConfig['USER_ID'] = intval($arParams['USER_ID']) > 0? intval($arParams['USER_ID']): intval($USER->GetID());
335
336 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_WAIT." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$arConfig['USER_ID'];
337 $DB->Query($strSql);
338
339 CIMCall::Signaling(Array(
340 'CHAT_ID' => $arConfig['CHAT_ID'],
341 'USER_ID' => $arConfig['USER_ID'],
342 'COMMAND' => 'wait',
343 ));
344
345 return true;
346 }
347
348 public static function Start($arParams)
349 {
350 $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
351 if ($arConfig['CHAT_ID'] <= 0)
352 return false;
353
354 global $USER;
355 $arConfig['USER_ID'] = intval($arParams['USER_ID']) > 0? intval($arParams['USER_ID']): intval($USER->GetID());
356
357 if (!$arParams['CALL_TO_GROUP'])
358 self::MessageToPrivate($arConfig['USER_ID'], $arParams['RECIPIENT_ID'], "IM_CALL_CHAT_START");
359
360 CIMCall::Signaling(Array(
361 'CHAT_ID' => $arConfig['CHAT_ID'],
362 'USER_ID' => $arConfig['USER_ID'],
363 'COMMAND' => 'start',
364 ));
365
366 return true;
367 }
368
369 public static function End($arParams)
370 {
371 $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
372 if ($arConfig['CHAT_ID'] <= 0)
373 return false;
374
375 global $DB, $USER;
376 $arConfig['USER_ID'] = intval($arParams['USER_ID']) > 0? intval($arParams['USER_ID']): intval($USER->GetID());
377 $arConfig['RECIPIENT_ID'] = intval($arParams['RECIPIENT_ID']);
378
379 $arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID'], 'USER_ID' => $USER->GetId()));
380 if (empty($arChat['chat']))
381 return false;
382
383 $arUserToConnect = Array();
384 $acceptUserExists = false;
385 foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
386 {
387 if ($userId != $arConfig['USER_ID'] && in_array($callStatus, Array(IM_CALL_STATUS_WAIT, IM_CALL_STATUS_ANSWER)))
388 {
389 if ($callStatus == IM_CALL_STATUS_ANSWER)
390 $acceptUserExists = true;
391
392 $arUserToConnect[] = $userId;
393 }
394 }
395
396 if (!$acceptUserExists || empty($arUserToConnect) || count($arUserToConnect) == 1)
397 {
398 $arConfig['CLOSE_CONNECT'] = true;
399
400 $strSql = "UPDATE b_im_chat SET CALL_TYPE = ".IM_CALL_NONE." WHERE ID = ".$arConfig['CHAT_ID'];
401 $DB->Query($strSql);
402
403 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_NONE." WHERE CHAT_ID = ".$arConfig['CHAT_ID'];
404 $DB->Query($strSql);
405 }
406 else
407 {
408 $arConfig['CLOSE_CONNECT'] = false;
409
410 $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_DECLINE." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$arConfig['USER_ID'];
411 $DB->Query($strSql);
412 }
413
414 $arConfig['CALL_TO_GROUP'] = $arChat['chat'][$arConfig['CHAT_ID']]['message_type'] != IM_MESSAGE_PRIVATE;
415 if ($arParams['REASON'] == 'decline')
416 {
417 if ($arConfig['CALL_TO_GROUP'])
418 {
419 if ($arParams['ACTIVE'] == 'Y')
420 {
421 self::MessageToChat($arConfig['CHAT_ID'], $arConfig['CLOSE_CONNECT']? "IM_CALL_CHAT_CLOSE_": "IM_CALL_CHAT_END_", $arConfig['USER_ID'], true);
422 }
423 else
424 {
425 self::MessageToChat($arConfig['CHAT_ID'], $arConfig['CLOSE_CONNECT']? "IM_CALL_CHAT_CLOSE_": "IM_CALL_CHAT_G_DECLINE_", $arConfig['USER_ID'], true);
426 }
427 }
428 else
429 {
430 if ($arParams['ACTIVE'] == 'Y')
431 {
432 self::MessageToPrivate($arConfig['USER_ID'], $arConfig['RECIPIENT_ID'], "IM_CALL_CHAT_END");
433 }
434 else
435 {
436 self::MessageToPrivate($arConfig['USER_ID'], $arConfig['RECIPIENT_ID'], "IM_CALL_CHAT_DECLINE_", true);
437 }
438 }
439 }
440 else if ($arParams['REASON'] == 'busy')
441 {
442 if ($arConfig['CALL_TO_GROUP'])
443 {
444 self::MessageToChat($arConfig['CHAT_ID'], "IM_CALL_CHAT_G_BUSY_", $arConfig['USER_ID'], true);
445 }
446 else
447 {
448 self::MessageToPrivate($arConfig['USER_ID'], $arConfig['RECIPIENT_ID'], "IM_CALL_CHAT_BUSY_", true);
449 }
450 }
451 else if ($arParams['REASON'] == 'waitTimeout')
452 {
453 if ($arConfig['CALL_TO_GROUP'])
454 {
455 self::MessageToChat($arConfig['CHAT_ID'], "IM_CALL_CHAT_TIMEOUT");
456 }
457 else
458 {
459 self::MessageToPrivate($arConfig['USER_ID'], $arConfig['RECIPIENT_ID'], "IM_CALL_CHAT_WAIT", $arConfig['RECIPIENT_ID'], false);
460 }
461 }
462 else if ($arParams['REASON'] == 'errorOffline')
463 {
464 if ($arConfig['CALL_TO_GROUP'])
465 {
466 self::MessageToChat($arConfig['CHAT_ID'], "IM_CALL_CHAT_TIMEOUT");
467 }
468 else
469 {
470 self::MessageToPrivate($arConfig['RECIPIENT_ID'], $arConfig['USER_ID'], "IM_CALL_CHAT_OFFLINE", true, false);
471 }
472 }
473 else if ($arParams['REASON'] == 'errorAccess')
474 {
475 if ($arConfig['CALL_TO_GROUP'])
476 {
477 self::MessageToChat($arConfig['CHAT_ID'], "IM_CALL_CHAT_ERROR_", $arConfig['USER_ID'], true);
478 }
479 else
480 {
481 self::MessageToPrivate($arConfig['USER_ID'], $arConfig['RECIPIENT_ID'], "IM_CALL_CHAT_ERROR", true, false);
482 }
483 }
484
485 $arSend = Array();
486 $arSend['callToGroup'] = $arConfig['CALL_TO_GROUP'];
487 $arSend['closeConnect'] = $arConfig['CLOSE_CONNECT'];
488
489 if (isset($arParams['VIDEO']))
490 $arSend['video'] = $arParams['VIDEO'] == 'Y'? true: false;
491
492 foreach ($arUserToConnect as $userId)
493 {
494 self::Command($arConfig['CHAT_ID'], $userId, $arParams['REASON'], $arSend);
495 }
496
497 if ($arParams['REASON'] == 'decline')
498 {
499 self::Command($arConfig['CHAT_ID'], $arConfig['USER_ID'], 'decline_self', $arSend);
500 self::Command($arConfig['CHAT_ID'], $arConfig['RECIPIENT_ID'], 'end_call', $arSend);
501 }
502 if (!$arConfig['CALL_TO_GROUP'] && CModule::IncludeModule('pull') && CPullOptions::GetPushStatus())
503 {
504 \Bitrix\Pull\Push::add($arConfig['USER_ID'], Array(
505 'module_id' => 'im',
506 'push' => Array(
507 'expiry' => 0,
508 'advanced_params' => Array(
509 'notificationsToCancel' => array('IM_CALL_'. $arConfig['RECIPIENT_ID']),
510 ),
511 'send_immediately' => 'Y'
512 )
513 ));
514 \Bitrix\Pull\Push::add($arConfig['RECIPIENT_ID'], Array(
515 'module_id' => 'im',
516 'push' => Array(
517 'expiry' => 0,
518 'advanced_params' => Array(
519 'notificationsToCancel' => array('IM_CALL_'. $arConfig['USER_ID']),
520 ),
521 'send_immediately' => 'Y'
522 )
523 ));
524 }
525
526 return true;
527 }
528
529 public static function Signaling($arParams)
530 {
531 $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
532 if ($arConfig['CHAT_ID'] <= 0)
533 return false;
534
535 global $DB, $USER;
536 $arConfig['USER_ID'] = intval($arParams['USER_ID']) > 0? intval($arParams['USER_ID']): intval($USER->GetID());
537
538 $arConfig['COMMAND'] = isset($arParams['COMMAND'])? $arParams['COMMAND']: 'signaling';
539 $arConfig['PARAMS'] = isset($arParams['PARAMS'])? $arParams['PARAMS']: Array();
540
541 $arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID'], 'USER_ID' => $USER->GetId()));
542 if (empty($arChat['chat']))
543 return false;
544
545 foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
546 {
547 if ($userId != $arConfig['USER_ID'])
548 self::Command($arConfig['CHAT_ID'], $userId, $arConfig['COMMAND'], $arConfig['PARAMS']);
549 }
550
551 return true;
552 }
553
554 public static function Command($chatId, $recipientId, $command, $params = Array())
555 {
556 if (!CModule::IncludeModule("pull"))
557 return false;
558
559 $chatId = intval($chatId);
560 $recipientId = intval($recipientId);
561 if ($recipientId <= 0 || $chatId <= 0 || empty($command) || !is_array($params))
562 return false;
563
564 global $USER;
565 $params['senderId'] = $USER->GetID();
566 $params['chatId'] = $chatId;
567 $params['command'] = $command;
568
569 \Bitrix\Pull\Event::add($recipientId, Array(
570 'module_id' => 'im',
571 'command' => 'call',
572 'expiry' => 600,
573 'params' => $params,
574 'extra' => \Bitrix\Im\Common::getPullExtra()
575 ));
576
577 return true;
578 }
579
580 public static function MessageToChat($chatId, $messageId, $userId = 0, $getUserData = false, $addGenderToMessageId = true)
581 {
582 $chatId = intval($chatId);
583 if ($chatId <= 0 || $messageId == '')
584 return false;
585
586 $userId = intval($userId);
587 $message = '';
588
589 if ($userId > 0 && $getUserData)
590 {
591 $arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME", "PERSONAL_GENDER");
592 $dbUsers = CUser::GetList('', '', array('ID_EQUAL_EXACT' => $userId), array('FIELDS' => $arSelect));
593 if ($arUser = $dbUsers->Fetch())
594 $message = GetMessage($messageId.($addGenderToMessageId? ($arUser["PERSONAL_GENDER"] == 'F'? 'F': 'M'): ''), Array('#USER_NAME#' => \Bitrix\Im\User::formatFullNameFromDatabase($arUser)));
595 }
596 else
597 {
599 }
600
601 CIMChat::AddMessage(Array(
602 "FROM_USER_ID" => $userId,
603 "TO_CHAT_ID" => $chatId,
604 "MESSAGE" => $message,
605 "SYSTEM" => 'Y',
606 ));
607
608 return true;
609 }
610
611 public static function MessageToPrivate($fromUserId, $toUserId, $messageId, $getUserData = false, $addGenderToMessageId = true)
612 {
613 $fromUserId = intval($fromUserId);
614 $toUserId = intval($toUserId);
615 if ($fromUserId <= 0 || $toUserId <= 0)
616 return false;
617
618 $message = '';
619 if ($fromUserId > 0 && $getUserData)
620 {
621 $userSelectId = $fromUserId;
622 if ($getUserData !== true)
623 $userSelectId = intval($getUserData);
624
625 $arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME", "PERSONAL_GENDER");
626 $dbUsers = CUser::GetList('', '', array('ID_EQUAL_EXACT' => $userSelectId), array('FIELDS' => $arSelect));
627 if ($arUser = $dbUsers->Fetch())
628 $message = GetMessage($messageId.($addGenderToMessageId? ($arUser["PERSONAL_GENDER"] == 'F'? 'F': 'M'): ''), Array('#USER_NAME#' => \Bitrix\Im\User::formatFullNameFromDatabase($arUser)));
629 }
630 else
631 {
633 }
634
635 CIMMessage::Add(Array(
636 "FROM_USER_ID" => $fromUserId,
637 "TO_USER_ID" => $toUserId,
638 "MESSAGE" => $message,
639 "SYSTEM" => 'Y',
640 "PUSH" => 'Y',
641 ));
642
643 return true;
644 }
645}
646?>
$arParams
Определения access_dialog.php:21
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения callback_ismscenter.php:26
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static formatFullNameFromDatabase($fields)
Определения user.php:1243
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
Определения event.php:22
static IsFriends($firstUserID, $secondUserID)
Определения user_relations.php:355
Определения im_call.php:5
static Start($arParams)
Определения im_call.php:348
static Wait($arParams)
Определения im_call.php:327
static MessageToChat($chatId, $messageId, $userId=0, $getUserData=false, $addGenderToMessageId=true)
Определения im_call.php:580
static End($arParams)
Определения im_call.php:369
static Answer($arParams)
Определения im_call.php:262
static AddUser($arParams)
Определения im_call.php:153
static Command($chatId, $recipientId, $command, $params=Array())
Определения im_call.php:554
static Signaling($arParams)
Определения im_call.php:529
static MessageToPrivate($fromUserId, $toUserId, $messageId, $getUserData=false, $addGenderToMessageId=true)
Определения im_call.php:611
static Invite($arParams)
Определения im_call.php:6
static Add($arFields)
Определения im_message.php:28
const PRIVACY_RESULT_CONTACT
Определения im_settings.php:29
static GetPrivacy($type, $userId=false)
Определения im_settings.php:519
const PRIVACY_CALL
Определения im_settings.php:25
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
const IM_CALL_STATUS_DECLINE
Определения include.php:57
const IM_CALL_NONE
Определения include.php:48
const IM_CALL_AUDIO
Определения include.php:50
const IM_CALL_STATUS_ANSWER
Определения include.php:56
const IM_CALL_STATUS_WAIT
Определения include.php:55
const IM_MESSAGE_PRIVATE
Определения include.php:22
const IM_CALL_VIDEO
Определения include.php:49
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
IsModuleInstalled($module_id)
Определения tools.php:5301
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$message
Определения payment.php:8
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$GLOBALS['_____370096793']
Определения update_client.php:1