8 $arConfig[
'CHAT_ID'] = intval(
$arParams[
'CHAT_ID']);
9 if ($arConfig[
'CHAT_ID'] <= 0)
14 $arConfig[
'RECIPIENT_ID'] = intval(
$arParams[
'RECIPIENT_ID']);
17 $arConfig[
'MOBILE'] = isset(
$arParams[
'MOBILE']) &&
$arParams[
'MOBILE'] ==
'Y'?
'Y':
'N';
19 $arChat = CIMChat::GetChatData(Array(
'ID' => $arConfig[
'CHAT_ID'],
'USER_ID' =>
$USER->GetId()));
20 if (empty($arChat[
'chat']))
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']);
27 && CModule::IncludeModule(
'socialnetwork') && CSocNetUser::IsFriendsAllowed() && !
CSocNetUserRelations::IsFriends($arConfig[
'USER_ID'], $arConfig[
'RECIPIENT_ID']))
29 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
'IM_ERROR_CALL_PRIVACY'),
"ERROR_FROM_PRIVACY");
35 if ($arConfig[
'CALL_TO_GROUP'])
36 self::MessageToChat($arConfig[
'CHAT_ID'],
"IM_CALL_CHAT_START_", $arConfig[
'USER_ID'],
true);
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'];
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'];
45 foreach ($arChat[
'userCallStatus'][$arConfig[
'CHAT_ID']] as
$userId => $callStatus)
48 $arUserToConnect[
$userId] = $callStatus;
50 $arConfig[
'USERS_CONNECT'] = $arUserToConnect;
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'])
58 $arSend[
'chat'] = $arChat[
'chat'];
60 $arSend[
'userChatBlockStatus'] = $arChat[
'userChatBlockStatus'];
61 $arSend[
'userInChat'] = $arChat[
'userInChat'];
63 foreach ($arChat[
'userCallStatus'][$arConfig[
'CHAT_ID']] as
$userId => $callStatus)
73 if ($arConfig[
'CALL_TO_GROUP'])
74 self::MessageToChat($arConfig[
'CHAT_ID'],
"IM_CALL_CHAT_INIT_", $arConfig[
'USER_ID'],
true);
76 $strSql =
"UPDATE b_im_chat SET CALL_TYPE = ".($arConfig[
'VIDEO'] ==
'Y'?
IM_CALL_VIDEO:
IM_CALL_AUDIO).
" WHERE ID = ".$arConfig[
'CHAT_ID'];
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'];
82 $arUserToConnect = Array();
83 foreach ($arChat[
'userCallStatus'][$arConfig[
'CHAT_ID']] as
$userId => $callStatus)
85 if (
$userId != $arConfig[
'USER_ID'])
86 $arUserToConnect[
$userId] = $callStatus;
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'])
96 $arSend[
'chat'] = $arChat[
'chat'];
98 $arSend[
'userChatBlockStatus'] = $arChat[
'userChatBlockStatus'];
99 $arSend[
'userInChat'] = $arChat[
'userInChat'];
100 $arSend[
'isMobile'] = $arConfig[
'MOBILE'] ==
'Y';
101 foreach ($arUserToConnect as
$userId => $callStatus)
104 $arConfig[
'USER_DATA'][
'USERS'] = $arUserData[
'users'];
105 $arConfig[
'USER_DATA'][
'HR_PHOTO'] = $arUserData[
'hrphoto'];
107 if (!$arConfig[
'CALL_TO_GROUP'] && CModule::IncludeModule(
'pull') && CPullOptions::GetPushStatus())
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))
114 $pushText =
GetMessage(
'IM_CALL_INVITE', Array(
'#USER_NAME#' => $sName));
118 $pushText =
GetMessage(
'IM_CALL_INVITE', Array(
'#USER_NAME#' =>
GetMessage(
'IM_CALL_INVITE_NA')));
121 $pushParams = $arSend;
122 $pushParams[
'senderId'] = (int)
$USER->GetID();
123 $pushParams[
'chatId'] = $arConfig[
'CHAT_ID'];
125 \Bitrix\Pull\Push::add(array_keys($arUserToConnect), Array(
128 'message' => $pushText,
131 'ACTION' =>
'IMINV_'.
$USER->GetID().
"_".time().
"_".$arConfig[
'VIDEO'],
132 'PARAMS' => $pushParams
134 'advanced_params' => Array(
135 'id' =>
'IM_CALL_'.
$USER->GetID(),
136 'notificationsToCancel' =>
array(
'IM_CALL_'.
$USER->GetID()),
137 'androidHighPriority' =>
true,
140 'app_id' =>
'Bitrix24',
142 'send_immediately' =>
'Y'
155 $arConfig[
'CHAT_ID'] = intval(
$arParams[
'CHAT_ID']);
156 if ($arConfig[
'CHAT_ID'] <= 0)
159 $arConfig[
'USERS'] = Array();
163 $arConfig[
'USERS'][] = intval($value);
167 $arConfig[
'USERS'][] = intval(
$arParams[
'USERS']);
169 if (empty($arConfig[
'USERS']))
174 $arChat = CIMChat::GetChatData(Array(
'ID' => $arConfig[
'CHAT_ID'],
'USER_ID' =>
$USER->GetId()));
175 if (empty($arChat[
'chat']))
178 $arConfig[
'CALL_TYPE'] = intval($arChat[
'chat'][$arConfig[
'CHAT_ID']][
'call']);
179 $arConfig[
'LAST_CHAT_ID'] = $arConfig[
'CHAT_ID'];
182 $strSql =
"UPDATE b_im_chat SET CALL_TYPE = ".IM_CALL_NONE.
" WHERE ID = ".$arConfig[
'CHAT_ID'];
185 $strSql =
"UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_NONE.
" WHERE CHAT_ID = ".$arConfig[
'CHAT_ID'];
188 $arUserToConnect = Array();
191 foreach ($arChat[
'userCallStatus'][$arConfig[
'CHAT_ID']] as
$userId => $callStatus)
194 $arUserToConnect[
$userId] = $callStatus;
197 $arUser = array_merge($arUser, $arConfig[
'USERS']);
198 if (!is_array($arUser))
201 $CIMChat =
new CIMChat();
202 $chatId = $CIMChat->Add(Array(
'USERS' => $arUser));
206 $arConfig[
'CHAT_ID'] = $chatId;
208 $strSql =
"UPDATE b_im_chat SET CALL_TYPE = ".$arConfig[
'CALL_TYPE'].
" WHERE ID = ".$arConfig[
'CHAT_ID'];
211 $strSql =
"UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_WAIT.
" WHERE CHAT_ID = ".$arConfig[
'CHAT_ID'];
214 foreach ($arUserToConnect as
$userId => $callStatus)
216 $strSql =
"UPDATE b_im_relation SET CALL_STATUS = ".$callStatus.
" WHERE CHAT_ID = ".$arConfig[
'CHAT_ID'].
" AND USER_ID = ".
$userId;
222 $CIMChat =
new CIMChat();
223 $result = $CIMChat->AddUser($arConfig[
'CHAT_ID'], $arConfig[
'USERS']);
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']).
")";
230 $arUserToConnect = Array();
232 foreach ($arChat[
'userCallStatus'][$arConfig[
'CHAT_ID']] as
$userId => $callStatus)
235 $arUserToConnect[
$userId] = $callStatus;
237 foreach ($arConfig[
'USERS'] as
$userId)
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'];
248 $arSend[
'users'] = $arUserData[
'users'];
249 $arSend[
'hrphoto'] = $arUserData[
'hrphoto'];
250 $arSend[
'lastChatId'] = $arConfig[
'LAST_CHAT_ID'];
251 foreach ($arUserToConnect as
$userId => $callStatus)
254 $arSend[
'video'] = $arConfig[
'CALL_TYPE'] ==
IM_CALL_VIDEO?
true:
false;
255 $arSend[
'callToGroup'] =
true;
256 foreach ($arConfig[
'USERS'] as
$userId)
264 $arConfig[
'CHAT_ID'] = intval(
$arParams[
'CHAT_ID']);
265 if ($arConfig[
'CHAT_ID'] <= 0)
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'];
275 self::MessageToChat($arConfig[
'CHAT_ID'],
"IM_CALL_CHAT_START_", $arConfig[
'USER_ID'],
true);
277 $arConfig[
'MOBILE'] = isset(
$arParams[
'MOBILE']) &&
$arParams[
'MOBILE'] ==
'Y'?
'Y':
'N';
280 'CHAT_ID' => $arConfig[
'CHAT_ID'],
281 'USER_ID' => $arConfig[
'USER_ID'],
282 'PARAMS' => Array(
'isMobile' => $arConfig[
'MOBILE'] ==
'Y'),
283 'COMMAND' =>
'answer',
285 self::Command($arConfig[
'CHAT_ID'], $arConfig[
'USER_ID'],
'answer_self', Array());
287 $arChat = CIMChat::GetChatData(Array(
'ID' => $arConfig[
'CHAT_ID'],
'USER_ID' => $arConfig[
'USER_ID']));
288 if (empty($arChat[
'chat']))
291 foreach ($arChat[
'userInChat'][$arConfig[
'CHAT_ID']] as $value)
293 if ($arConfig[
'USER_ID'] != $value)
295 $arConfig[
'RECIPIENT_ID'] = $value;
300 if (!
$arParams[
'CALL_TO_GROUP'] && CModule::IncludeModule(
'pull') && CPullOptions::GetPushStatus())
302 \Bitrix\Pull\Push::add($arConfig[
'USER_ID'], Array(
306 'advanced_params' => Array(
307 'notificationsToCancel' =>
array(
'IM_CALL_'. $arConfig[
'RECIPIENT_ID']),
309 'send_immediately' =>
'Y'
312 \Bitrix\Pull\Push::add($arConfig[
'RECIPIENT_ID'], Array(
316 'advanced_params' => Array(
317 'notificationsToCancel' =>
array(
'IM_CALL_'. $arConfig[
'USER_ID']),
319 'send_immediately' =>
'Y'
329 $arConfig[
'CHAT_ID'] = intval(
$arParams[
'CHAT_ID']);
330 if ($arConfig[
'CHAT_ID'] <= 0)
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'];
340 'CHAT_ID' => $arConfig[
'CHAT_ID'],
341 'USER_ID' => $arConfig[
'USER_ID'],
350 $arConfig[
'CHAT_ID'] = intval(
$arParams[
'CHAT_ID']);
351 if ($arConfig[
'CHAT_ID'] <= 0)
361 'CHAT_ID' => $arConfig[
'CHAT_ID'],
362 'USER_ID' => $arConfig[
'USER_ID'],
363 'COMMAND' =>
'start',
371 $arConfig[
'CHAT_ID'] = intval(
$arParams[
'CHAT_ID']);
372 if ($arConfig[
'CHAT_ID'] <= 0)
377 $arConfig[
'RECIPIENT_ID'] = intval(
$arParams[
'RECIPIENT_ID']);
379 $arChat = CIMChat::GetChatData(Array(
'ID' => $arConfig[
'CHAT_ID'],
'USER_ID' =>
$USER->GetId()));
380 if (empty($arChat[
'chat']))
383 $arUserToConnect = Array();
384 $acceptUserExists =
false;
385 foreach ($arChat[
'userCallStatus'][$arConfig[
'CHAT_ID']] as
$userId => $callStatus)
390 $acceptUserExists =
true;
396 if (!$acceptUserExists || empty($arUserToConnect) ||
count($arUserToConnect) == 1)
398 $arConfig[
'CLOSE_CONNECT'] =
true;
400 $strSql =
"UPDATE b_im_chat SET CALL_TYPE = ".IM_CALL_NONE.
" WHERE ID = ".$arConfig[
'CHAT_ID'];
403 $strSql =
"UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_NONE.
" WHERE CHAT_ID = ".$arConfig[
'CHAT_ID'];
408 $arConfig[
'CLOSE_CONNECT'] =
false;
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'];
414 $arConfig[
'CALL_TO_GROUP'] = $arChat[
'chat'][$arConfig[
'CHAT_ID']][
'message_type'] !=
IM_MESSAGE_PRIVATE;
417 if ($arConfig[
'CALL_TO_GROUP'])
421 self::MessageToChat($arConfig[
'CHAT_ID'], $arConfig[
'CLOSE_CONNECT']?
"IM_CALL_CHAT_CLOSE_":
"IM_CALL_CHAT_END_", $arConfig[
'USER_ID'],
true);
425 self::MessageToChat($arConfig[
'CHAT_ID'], $arConfig[
'CLOSE_CONNECT']?
"IM_CALL_CHAT_CLOSE_":
"IM_CALL_CHAT_G_DECLINE_", $arConfig[
'USER_ID'],
true);
442 if ($arConfig[
'CALL_TO_GROUP'])
444 self::MessageToChat($arConfig[
'CHAT_ID'],
"IM_CALL_CHAT_G_BUSY_", $arConfig[
'USER_ID'],
true);
451 else if (
$arParams[
'REASON'] ==
'waitTimeout')
453 if ($arConfig[
'CALL_TO_GROUP'])
459 self::MessageToPrivate($arConfig[
'USER_ID'], $arConfig[
'RECIPIENT_ID'],
"IM_CALL_CHAT_WAIT", $arConfig[
'RECIPIENT_ID'],
false);
462 else if (
$arParams[
'REASON'] ==
'errorOffline')
464 if ($arConfig[
'CALL_TO_GROUP'])
470 self::MessageToPrivate($arConfig[
'RECIPIENT_ID'], $arConfig[
'USER_ID'],
"IM_CALL_CHAT_OFFLINE",
true,
false);
473 else if (
$arParams[
'REASON'] ==
'errorAccess')
475 if ($arConfig[
'CALL_TO_GROUP'])
477 self::MessageToChat($arConfig[
'CHAT_ID'],
"IM_CALL_CHAT_ERROR_", $arConfig[
'USER_ID'],
true);
481 self::MessageToPrivate($arConfig[
'USER_ID'], $arConfig[
'RECIPIENT_ID'],
"IM_CALL_CHAT_ERROR",
true,
false);
486 $arSend[
'callToGroup'] = $arConfig[
'CALL_TO_GROUP'];
487 $arSend[
'closeConnect'] = $arConfig[
'CLOSE_CONNECT'];
490 $arSend[
'video'] =
$arParams[
'VIDEO'] ==
'Y'?
true:
false;
492 foreach ($arUserToConnect as
$userId)
499 self::Command($arConfig[
'CHAT_ID'], $arConfig[
'USER_ID'],
'decline_self', $arSend);
500 self::Command($arConfig[
'CHAT_ID'], $arConfig[
'RECIPIENT_ID'],
'end_call', $arSend);
502 if (!$arConfig[
'CALL_TO_GROUP'] && CModule::IncludeModule(
'pull') && CPullOptions::GetPushStatus())
504 \Bitrix\Pull\Push::add($arConfig[
'USER_ID'], Array(
508 'advanced_params' => Array(
509 'notificationsToCancel' =>
array(
'IM_CALL_'. $arConfig[
'RECIPIENT_ID']),
511 'send_immediately' =>
'Y'
514 \Bitrix\Pull\Push::add($arConfig[
'RECIPIENT_ID'], Array(
518 'advanced_params' => Array(
519 'notificationsToCancel' =>
array(
'IM_CALL_'. $arConfig[
'USER_ID']),
521 'send_immediately' =>
'Y'
531 $arConfig[
'CHAT_ID'] = intval(
$arParams[
'CHAT_ID']);
532 if ($arConfig[
'CHAT_ID'] <= 0)
538 $arConfig[
'COMMAND'] = isset(
$arParams[
'COMMAND'])?
$arParams[
'COMMAND']:
'signaling';
541 $arChat = CIMChat::GetChatData(Array(
'ID' => $arConfig[
'CHAT_ID'],
'USER_ID' =>
$USER->GetId()));
542 if (empty($arChat[
'chat']))
545 foreach ($arChat[
'userCallStatus'][$arConfig[
'CHAT_ID']] as
$userId => $callStatus)
547 if (
$userId != $arConfig[
'USER_ID'])
554 public static function Command($chatId, $recipientId, $command,
$params = Array())
556 if (!CModule::IncludeModule(
"pull"))
559 $chatId = intval($chatId);
560 $recipientId = intval($recipientId);
561 if ($recipientId <= 0 || $chatId <= 0 || empty($command) || !is_array(
$params))
574 'extra' => \
Bitrix\Im\Common::getPullExtra()
582 $chatId = intval($chatId);
589 if (
$userId > 0 && $getUserData)
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)));
601 CIMChat::AddMessage(Array(
603 "TO_CHAT_ID" => $chatId,
613 $fromUserId = intval($fromUserId);
614 $toUserId = intval($toUserId);
615 if ($fromUserId <= 0 || $toUserId <= 0)
619 if ($fromUserId > 0 && $getUserData)
621 $userSelectId = $fromUserId;
622 if ($getUserData !==
true)
623 $userSelectId = intval($getUserData);
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)));
636 "FROM_USER_ID" => $fromUserId,
637 "TO_USER_ID" => $toUserId,
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static formatFullNameFromDatabase($fields)
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
static IsFriends($firstUserID, $secondUserID)
static MessageToChat($chatId, $messageId, $userId=0, $getUserData=false, $addGenderToMessageId=true)
static AddUser($arParams)
static Command($chatId, $recipientId, $command, $params=Array())
static Signaling($arParams)
static MessageToPrivate($fromUserId, $toUserId, $messageId, $getUserData=false, $addGenderToMessageId=true)
const PRIVACY_RESULT_CONTACT
static GetPrivacy($type, $userId=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
const IM_CALL_STATUS_DECLINE
const IM_CALL_STATUS_ANSWER
const IM_CALL_STATUS_WAIT
ExecuteModuleEventEx($arEvent, $arParams=[])
IsModuleInstalled($module_id)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
$GLOBALS['_____370096793']