- Модуль: 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;
}