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