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