• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/Configuration/Notification.php
  • Класс: BitrixImConfigurationNotification
  • Вызов: Notification::filterAllowedUsers
public function filterAllowedUsers(array $userList, string $type): array
{
	if (empty($userList))
	{
		return [];
	}

	$userList = General::filterAllowedUsersBySimpleNotificationSettings($userList, $type);
	if (empty($userList))
	{
		return [];
	}

	$encodedSetting = self::encodeName($this->module, $this->name, $type);

	$defaultSettings = self::getDefaultSettings();

	$defaultSettings = self::encodeSettings($defaultSettings);

	if (!array_key_exists($encodedSetting, $defaultSettings))
	{
		$encodedSetting = self::encodeName('im', 'default', $type);
	}

	$value = $defaultSettings[$encodedSetting] === 'Y' ? 'Y' : 'N';

	$filteredUsers = [];
	if (count($userList) < 1000)
	{
		$filteredUsers = $this->filterChunk($userList, $encodedSetting, $value);
	}
	else
	{
		$chunkList = array_chunk($userList, static::CHUNK_LENGTH);
		foreach ($chunkList as $chunk)
		{
			$filteredUsers = array_merge($filteredUsers, $this->filterChunk($chunk, $encodedSetting, $value));
		}
	}

	if ($type !== self::PUSH)
	{
		return $filteredUsers;
	}

	//checked push
	if (empty($filteredUsers))
	{
		return $filteredUsers;
	}

	$rowFilteredPushUsers =
		PushTable::query()
		->addSelect('USER_ID')
		->whereIn('USER_ID', $filteredUsers)
	;

	$filteredUsers = [];
	foreach ($rowFilteredPushUsers->exec() as $user)
	{
		$filteredUsers[] = (int)$user['USER_ID'];
	}

	return array_unique($filteredUsers);
}