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