• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/PushService.php
  • Класс: BitrixImV2MessageSendPushService
  • Вызов: PushService::getEventByCounterGroup
public function getEventByCounterGroup(array $events, int $maxUserInGroup = 100): array
{
	$groups = [];
	foreach ($events as $userId => $event)
	{
		$eventCode = $event['groupId'];
		if (!isset($groups[$eventCode]))
		{
			$groups[$eventCode]['event'] = $event;
		}
		$groups[$eventCode]['users'][] = $userId;
		$groups[$eventCode]['count'] = count($groups[$eventCode]['users']);
	}

	BitrixMainTypeCollection::sortByColumn($groups, ['count' => SORT_DESC]);

	$count = 0;
	$finalGroup = [];
	foreach ($groups as $eventCode => $event)
	{
		if ($count >= $maxUserInGroup)
		{
			if (isset($finalGroup['other']))
			{
				$finalGroup['other']['users'] = array_unique(array_merge($finalGroup['other']['users'], $event['users']));
			}
			else
			{
				$finalGroup['other'] = $event;
				$finalGroup['other']['event']['params']['counter'] = 100;
			}
		}
		else
		{
			$finalGroup[$eventCode] = $event;
		}
		$count++;
	}

	BitrixMainTypeCollection::sortByColumn($finalGroup, ['count' => SORT_ASC]);

	return $finalGroup;
}