• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/tracking/ui/details.php
  • Класс: Bitrix\Crm\Tracking\UI\Details
  • Вызов: Details::saveEntityData
static function saveEntityData($entityTypeId, $entityId, array $data, $isNew = false)
{
	if (!array_key_exists(self::SourceId, $data))
	{
		return;
	}

	$sourceId = isset($data[self::SourceId]) ? $data[self::SourceId] : null;
	$actualSources = Tracking\Provider::getActualSources();
	$actualSources = array_combine(
		array_column($actualSources, 'ID'),
		array_values($actualSources)
	);
	if (!$sourceId || !isset($actualSources[$sourceId]))
	{
		$sourceId = null;
	}

	$row = Tracking\Internals\TraceEntityTable::getRowByEntity($entityTypeId, $entityId);
	if ($row && !$isNew)
	{
		$trace = Tracking\Internals\TraceTable::getRow([
			'select' => ['ID', 'SOURCE_ID'],
			'filter' => ['=ID' => $row['TRACE_ID']]
		]);
		if ($trace)
		{
			if ($trace['SOURCE_ID'] == $sourceId)
			{
				return;
			}

			Tracking\Internals\TraceTable::update($trace['ID'], ['SOURCE_ID' => $sourceId]);
			return;
		}
	}

	if (!$sourceId)
	{
		return;
	}

	$traceId = Tracking\Trace::create()->setSource($sourceId)->save();
	if (!$traceId)
	{
		return;
	}

	if ($row)
	{
		return;
	}

	Tracking\Trace::appendEntity($traceId, $entityTypeId, $entityId);
}