• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/timeline/logmessagecontroller.php
  • Класс: Bitrix\Crm\Timeline\LogMessageController
  • Вызов: LogMessageController::onCreate
public function onCreate(array $input, int $typeCategoryId, ?int $authorId = null): void
{
	if (empty($input))
	{
		return;
	}

	// LEAD or DEAL
	$entityTypeId = $input['ENTITY_TYPE_ID'] ?? null;
	$entityId = $input['ENTITY_ID'] ?? null;
	if (!isset($entityTypeId, $entityId))
	{
		return;
	}
	$settings = $input['SETTINGS'] ?? [];
	$bindings[] = [
		'ENTITY_TYPE_ID' => $entityTypeId,
		'ENTITY_ID' => $entityId
	];
	$sourceId = '';

	// COMPANY or CONTACT
	$baseEntityTypeId = $input['BASE_ENTITY_TYPE_ID'] ?? null;
	$baseEntityId = $input['BASE_ENTITY_ID'] ?? null;

	if (isset($entityTypeId, $entityId))
	{
		$base = [];
		if (isset($baseEntityTypeId))
		{
			$base['ENTITY_TYPE_ID'] = $baseEntityTypeId;
		}

		if (isset($baseEntityId))
		{
			$base['ENTITY_ID'] = $baseEntityId;
		}

		$settings['BASE'] = $base;

		if (isset($baseEntityTypeId, $baseEntityId))
		{
			$bindings[] = [
				'ENTITY_TYPE_ID' => $baseEntityTypeId,
				'ENTITY_ID' => $baseEntityId
			];
		}

		if (isset($input['BASE_SOURCE']))
		{
			$sourceId = $input['BASE_SOURCE'];
		}

		if (isset($input['BASE_SOURCE_ID']))
		{
			$sourceId = $input['BASE_SOURCE_ID'];
		}
	}

	$params = [
		'TYPE_CATEGORY_ID' => $typeCategoryId,
		'ENTITY_TYPE_ID' => $entityTypeId,
		'ENTITY_ID' => $entityId,
		'AUTHOR_ID' => ($authorId > 0) ? $authorId : static::getCurrentOrDefaultAuthorId(),
		//'CREATED' => (new DateTime())->add('PT1S'), // for the correct order of records in the timeline
		'SETTINGS' => $settings,
		'SOURCE_ID' => $sourceId,
		'BINDINGS' => $bindings,
	];
	if ($input['ASSOCIATED_ENTITY_TYPE_ID'])
	{
		$params['ASSOCIATED_ENTITY_TYPE_ID'] = $input['ASSOCIATED_ENTITY_TYPE_ID'];
	}
	if ($input['ASSOCIATED_ENTITY_ID'])
	{
		$params['ASSOCIATED_ENTITY_ID'] = $input['ASSOCIATED_ENTITY_ID'];
	}
	if (isset($input['CREATED']) && $input['CREATED'])
	{
		$params['CREATED'] = $input['CREATED'];
	}
	
	$timelineEntryId = $this->getTimelineEntryFacade()->create(
		Facade::LOG_MESSAGE,
		$params
	);
	if ($timelineEntryId <= 0)
	{
		return;
	}

	foreach ($bindings as $binding)
	{
		$this->sendPullEventOnAdd(
			new ItemIdentifier($binding['ENTITY_TYPE_ID'], $binding['ENTITY_ID']),
			$timelineEntryId
		);
	}
}