• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/integration/intranet/user.php
  • Класс: BitrixImIntegrationIntranetUser
  • Вызов: User::onInviteAccepted
static function onInviteAccepted(array $params): bool
{
	if (!BitrixMainModuleManager::isModuleInstalled('intranet'))
	{
		return true;
	}

	$userData = $params['user_fields'];

	if (in_array($userData['EXTERNAL_AUTH_ID'], BitrixMainUserTable::getExternalUserTypes()))
	{
		return true;
	}

	if ($userData['LAST_LOGIN'])
	{
		return true;
	}

	$userId = (int)$userData['ID'];
	if ($userData['LAST_ACTIVITY_DATE'])
	{
		return true;
	}

	if (!self::isEmployee($userId))
	{
		return false;
	}

	CUser::SetLastActivityDate($userId);

	CIMContactList::SetRecent(Array('ENTITY_ID' => $userId));

	$userCount = BitrixMainUserTable::getActiveUsersCount();
	if ($userCount > self::INVITE_MAX_USER_NOTIFY)
	{
		self::sendInviteEvent([
			'ID' => $userId,
			'INVITED' => false
		]);

		if (!CIMChat::GetGeneralChatAutoMessageStatus(CIMChat::GENERAL_MESSAGE_TYPE_JOIN))
		{
			return false;
		}

		return self::sendMessageToGeneralChat($userId, [
			"MESSAGE" => Loc::getMessage('IM_INT_USR_JOIN_GENERAL_2'),
			"PARAMS" => [
				"CODE" => 'USER_JOIN_GENERAL',
			]
		]);
	}

	self::sendInviteEvent([
		'ID' => $userId,
		'INVITED' => false
	]);

	$orm = BitrixMainUserTable::getList([
		'select' => ['ID'],
		'filter' => [
			'=ACTIVE' => 'Y',
			'=IS_REAL_USER' => 'Y',
			'!=UF_DEPARTMENT' => false
		]
	]);
	while($row = $orm->fetch())
	{
		if ($row['ID'] == $userId)
		{
			continue;
		}

		$viewCommonUsers = (bool)CIMSettings::GetSetting(CIMSettings::SETTINGS, 'viewCommonUsers', $row['ID']);
		if (!$viewCommonUsers)
		{
			continue;
		}

		CIMMessage::Add([
			"TO_USER_ID" => $row['ID'],
			"FROM_USER_ID" => $userId,
			"MESSAGE" => Loc::getMessage('IM_INT_USR_JOIN_2'),
			"SYSTEM" => 'Y',
			"RECENT_SKIP_AUTHOR" => 'Y',
			"MESSAGE_OUT" => IM_MAIL_SKIP,
			"PARAMS" => [
				"CODE" => 'USER_JOIN',
			],
		]);
	}

	return true;
}