• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/sender/segment.php
  • Класс: Bitrix\Crm\Integration\Sender\Segment
  • Вызов: Segment::uploadAction
public function uploadAction(?string $segmentId = null, string $entityTypeName = '', array $entities = [], ?string $gridId = null)
{
	if (!GridPanel::canCurrentUserModifySegments())
	{
		return ['errors' => ['Access denied.']];
	}

	$entityTypeId = \CCrmOwnerType::resolveID($entityTypeName);
	if (!$entityTypeId)
	{
		return ['errors' => ['Wrong entity type.']];
	}
	if (!in_array($entityTypeId, [\CCrmOwnerType::Contact, \CCrmOwnerType::Company, \CCrmOwnerType::Lead]))
	{
		return ['errors' => ['Entity type does not allowed.']];
	}

	if ($gridId) // for all
	{
		$entitiesResult = self::getEntitiesByGridId($entityTypeId, $gridId);
		if (!$entitiesResult->isSuccess())
		{
			return ['errors' => $entitiesResult->getErrorMessages()];
		}
		$entities = $entitiesResult->getData();
	}

	$segment = new Sender\Entity\Segment((int)$segmentId);
	if (!$segment->getId())
	{
		$segmentName = Loc::getMessage(
			'CRM_INTEGRATION_SENDER_SEGMENT_NAME_PATTERN_' . $entityTypeName,
			['%date%' => Sender\Internals\PrettyDate::formatDate()]
		);
		$segment
			->set('NAME', $segmentName)
			->set('HIDDEN', 'N')
			->appendContactSetConnector()
			->save();
		if ($segment->hasErrors())
		{
			return ['errors' => $segment->getErrorMessages()];
		}
	}


	$segment->upload(self::getAddresses($entityTypeName, $entities));
	if ($segment->hasErrors())
	{
		return ['errors' => $segment->getErrorMessages()];
	}
	$segment->save();

	$segmentId = $segment->getId();
	$segmentName = $segment->get('NAME');
	$textSuccess = Loc::getMessage(
		'CRM_INTEGRATION_SENDER_SEGMENT_UPLOAD_SUCCESS',
		[
			'%name%' => $segmentName,
			'%path%' => '/marketing/segment/'
		]
	);

	return [
		'id' => $segmentId,
		'name' => $segmentName,
		'textSuccess' => str_replace('%name%', $segmentName, $textSuccess),
	];
}