• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_call.php
  • Класс: CIMCall
  • Вызов: CIMCall::AddUser
static function AddUser($arParams)
{
	$arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
	if ($arConfig['CHAT_ID'] <= 0)
		return false;

	$arConfig['USERS'] = Array();
	if (is_array($arParams['USERS']))
	{
		foreach ($arParams['USERS'] as $value)
			$arConfig['USERS'][] = intval($value);
	}
	else
	{
		$arConfig['USERS'][] = intval($arParams['USERS']);
	}
	if (empty($arConfig['USERS']))
		return false;

	global $DB, $USER;

	$arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID'], 'USER_ID' => $USER->GetId()));
	if (empty($arChat['chat']))
		return false;

	$arConfig['CALL_TYPE'] = intval($arChat['chat'][$arConfig['CHAT_ID']]['call']);
	$arConfig['LAST_CHAT_ID'] = $arConfig['CHAT_ID'];
	if ($arChat['chat'][$arConfig['CHAT_ID']]['message_type'] == IM_MESSAGE_PRIVATE)
	{
		$strSql = "UPDATE b_im_chat SET CALL_TYPE = ".IM_CALL_NONE." WHERE ID = ".$arConfig['CHAT_ID'];
		$DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_NONE." WHERE CHAT_ID = ".$arConfig['CHAT_ID']; $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); $arUserToConnect = Array(); $arUser = Array(); foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus) { $arUser[] = $userId; $arUserToConnect[$userId] = $callStatus; } $arUser = array_merge($arUser, $arConfig['USERS']); if (!is_array($arUser)) return false; $CIMChat = new CIMChat(); $chatId = $CIMChat->Add(Array('USERS' => $arUser)); if (!$chatId) return false; $arConfig['CHAT_ID'] = $chatId; $strSql = "UPDATE b_im_chat SET CALL_TYPE = ".$arConfig['CALL_TYPE']." WHERE ID = ".$arConfig['CHAT_ID']; $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_WAIT." WHERE CHAT_ID = ".$arConfig['CHAT_ID']; $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); foreach ($arUserToConnect as $userId => $callStatus) { $strSql = "UPDATE b_im_relation SET CALL_STATUS = ".$callStatus." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$userId; $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } } else { $CIMChat = new CIMChat(); $result = $CIMChat->AddUser($arConfig['CHAT_ID'], $arConfig['USERS']); if (!$result) return false; $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']).")"; $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); $arUserToConnect = Array(); $arUser = Array(); foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus) { $arUser[] = $userId; $arUserToConnect[$userId] = $callStatus; } foreach ($arConfig['USERS'] as $userId) { $arUserToConnect[$userId] = IM_CALL_STATUS_WAIT; } } $arUserData = CIMContactList::GetUserData(Array('ID' => $arUser, 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y')); $arConfig['USER_DATA']['USERS'] = $arUserData['users']; $arConfig['USER_DATA']['HR_PHOTO'] = $arUserData['hrphoto']; $arSend = Array(); $arSend['users'] = $arUserData['users']; $arSend['hrphoto'] = $arUserData['hrphoto']; $arSend['lastChatId'] = $arConfig['LAST_CHAT_ID']; foreach ($arUserToConnect as $userId => $callStatus) self::Command($arConfig['CHAT_ID'], $userId, 'invite_user', $arSend); $arSend['video'] = $arConfig['CALL_TYPE'] == IM_CALL_VIDEO? true: false; $arSend['callToGroup'] = true; foreach ($arConfig['USERS'] as $userId) self::Command($arConfig['CHAT_ID'], $userId, 'join', $arSend); return $arConfig; }