• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/posting/segmentdatabuilder.php
  • Класс: BitrixSenderPostingSegmentDataBuilder
  • Вызов: SegmentDataBuilder::actualize
static function actualize(int $groupId, bool $rebuild = false)
{
	$states = GroupStateTable::getList([
		'filter' => [
			'=GROUP_ID' => $groupId
		],
	])->fetchAll();

	$connectors = GroupConnectorTable::getList([
		'select' => [
			'FILTER_ID',
			'ENDPOINT'
		],
		'filter' => [
			'=GROUP_ID' => $groupId
		],
	])->fetchAll();

	$usedFilters = [];
	$endpoints = [];
	foreach ($connectors as $connector)
	{
		if (!static::checkEndpoint($connector['ENDPOINT']))
		{
			continue;
		}

		$entityConnector = BitrixSenderConnectorManager::getConnector($connector['ENDPOINT']);

		if (!$connector['FILTER_ID'] && $entityConnector instanceof ConnectorBaseFilter)
		{
			$connector['FILTER_ID'] = $entityConnector->getUiFilterId();
		}

		if (
			!$entityConnector instanceof IncrementallyConnector
			|| !isset($connector['FILTER_ID'])
		)
		{
			continue;
		}

		$usedFilters[] = $connector['FILTER_ID'];
		$endpoints[$connector['FILTER_ID']] = $connector['ENDPOINT'];

		$isUsed = false;

		foreach ($states as $state)
		{
			if ($state['FILTER_ID'] === $connector['FILTER_ID'])
			{
				$isUsed = true;
				break;
			}
		}

		if (!$isUsed)
		{
			$dataBuilder = new SegmentDataBuilder($groupId, $connector['FILTER_ID'], $connector['ENDPOINT']);
			$dataBuilder->prepareForAgent(true);
			$dataBuilder = null;
		}
	}

	foreach ($states as $state)
	{
		$endpoint = json_decode($state['ENDPOINT'], true);
		$dataBuilder = new SegmentDataBuilder($groupId, $state['FILTER_ID'], $endpoint);

		if (!static::checkEndpoint($endpoint))
		{
			$dataBuilder->clearBuilding($state['ID']);
			continue;
		}

		if (!in_array($state['FILTER_ID'], $usedFilters))
		{
			$dataBuilder->clearBuilding($state['ID']);
		}

		if ($endpoints[$state['FILTER_ID']] && $endpoints[$state['FILTER_ID']] !== $endpoint)
		{
			$dataBuilder->setEndpoint($endpoints[$state['FILTER_ID']]);
			$dataBuilder->prepareForAgent();
		}

		if ($rebuild)
		{
			$dataBuilder->prepareForAgent(true);
		}

		$dataBuilder = null;
	}

	self::checkIsSegmentPrepared($groupId);
}