- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/entity/segment.php
- Класс: BitrixSenderEntitySegment
- Вызов: Segment::saveData
protected function saveData($id, array $data)
{
$endpoints = $data['ENDPOINTS'];
unset($data['ENDPOINTS']);
if (!$id
&& isset($data['STATUS'])
&& $data['STATUS'] !== GroupTable::STATUS_NEW)
{
$data['STATUS'] = GroupTable::STATUS_DONE;
}
$id = $this->saveByEntity(GroupTable::getEntity(), $id, $data);
if ($this->hasErrors())
{
return $id;
}
$dataCounters = array();
GroupConnectorTable::delete(array('GROUP_ID' => $id));
if ($endpoints)
{
foreach ($endpoints as $endpoint)
{
$connector = ConnectorManager::getConnector($endpoint);
if (!$connector)
{
continue;
}
if ($this->isFilterOnly() && !($connector instanceof ConnectorBaseFilter))
{
continue;
}
$connector->setFieldValues(is_array($endpoint['FIELDS']) ? $endpoint['FIELDS'] : null);
$endpoint['FIELDS'] = $connector->getFieldValues();
$statFields = $connector->getStatFields();
foreach (array_intersect($statFields, array_keys($endpoint['FIELDS'])) as $field)
{
BitrixSenderLog::stat('segment_field', $field, $id);
}
$isIncrementally = $connector instanceof ConnectorIncrementallyConnector;
$dataCounter = $isIncrementally
? new ConnectorDataCounter([])
: $connector->getDataCounter();
$groupConnector = array(
'GROUP_ID' => $id,
'NAME' => $connector->getName(),
'ENDPOINT' => $endpoint,
'ADDRESS_COUNT' => $dataCounter->getSummary()
);
if(isset($endpoint['FILTER_ID']))
{
$groupConnector['FILTER_ID'] = $endpoint['FILTER_ID'];
}
$connectorResultDb = GroupConnectorTable::add($groupConnector);
if($connectorResultDb->isSuccess())
{
$dataCounters[] = $dataCounter;
}
$this->updateDealCategory($id, $connector);
}
if (isset($data['STATUS']) && GroupTable::STATUS_NEW === $data['STATUS'])
{
SegmentDataBuilder::actualize($id, true);
}
SegmentDataBuilder::checkIsSegmentPrepared($id);
$this->updateAddressCounters($id, $dataCounters);
}
return $id;
}