- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/item/usertogroup.php
- Класс: BitrixSocialnetworkItemUserToGroup
- Вызов: UserToGroup::addInfoToChat
static function addInfoToChat($params = [])
{
if (
!is_array($params)
|| !isset($params['group_id'], $params['user_id'], $params['action'])
|| (int)$params['group_id'] <= 0
|| (int)$params['user_id'] <= 0
|| !IntegrationImChatWorkgroup::getUseChat()
|| !Loader::includeModule('im')
|| !in_array($params['action'], self::getChatActionList(), true)
)
{
return false;
}
$groupId = (int)$params['group_id'];
$userId = (int)$params['user_id'];
$role = ($params['role'] ?? false);
$sendMessage = (
!isset($params['sendMessage'])
|| $params['sendMessage']
);
$chatData = IntegrationImChatWorkgroup::getChatData([
'group_id' => $groupId,
'skipAvailabilityCheck' => true,
]);
if (
empty($chatData)
|| empty($chatData[$groupId])
|| (int)$chatData[$groupId] <= 0
)
{
return false;
}
$res = CUser::getById($userId);
$user = $res->fetch();
if (
empty($user)
|| (
isset($user['ACTIVE'])
&& $user['ACTIVE'] === 'N'
)
)
{
return false;
}
$groupItem = Workgroup::getById($groupId);
$projectSuffix = ($groupItem->isProject() ? '_PROJECT' : '');
$userName = CUser::formatName(CSite::getNameFormat(), $user, true, false);
switch($user['PERSONAL_GENDER'])
{
case "M":
$genderSuffix = '_M';
break;
case "F":
$genderSuffix = '_F';
break;
default:
$genderSuffix = '';
}
$chatId = $chatData[$groupId];
$chat = new CIMChat(0);
switch ($params['action'])
{
case self::CHAT_ACTION_IN:
if ($chat->addUser($chatId, $userId, false, true, true))
{
if ($role === UserToGroupTable::ROLE_USER)
{
BitrixImChat::mute($chatId, true, $userId);
}
$chatMessage = str_replace('#USER_NAME#', $userName, Loc::getMessage('SOCIALNETWORK_ITEM_USERTOGROUP_CHAT_USER_ADD' . $projectSuffix . $genderSuffix));
}
else
{
$sendMessage = false;
}
break;
case self::CHAT_ACTION_OUT:
if ($chat->deleteUser($chatId, $userId, false, true))
{
$chatMessage = str_replace('#USER_NAME#', $userName, Loc::getMessage('SOCIALNETWORK_ITEM_USERTOGROUP_CHAT_USER_DELETE' . $projectSuffix . $genderSuffix));
}
else
{
$sendMessage = false;
}
break;
default:
$chatMessage = '';
$sendMessage = false;
}
if ($sendMessage)
{
$chatMessageFields = [
"MESSAGE" => $chatMessage,
"SYSTEM" => "Y",
"INCREMENT_COUNTER" => "N",
"PUSH" => "N"
];
$availableChatData = IntegrationImChatWorkgroup::getChatData([
'group_id' => $groupId,
]);
if (
!empty($availableChatData)
&& !empty($availableChatData[$groupId])
&& (int)$availableChatData[$groupId] > 0
)
{
return CIMChat::addMessage(array_merge(
$chatMessageFields, [
'TO_CHAT_ID' => $chatId,
]
));
}
}
else
{
return true;
}
return false;
}