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