- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/merger/leadmerger.php
- Класс: Bitrix\Crm\Merger\LeadMerger
- Вызов: LeadMerger::mergeBoundEntitiesBatch
protected function mergeBoundEntitiesBatch(array &$seeds, array &$targ, $skipEmpty = false, array $options = array())
{
$contactMerger = new LeadContactBindingMerger();
$contactMerger->merge($seeds, $targ, $skipEmpty, $options);
$resultSeedObserverIDs = array();
$resultSeedProductRows = array();
foreach($seeds as $seed)
{
$seedID = isset($seed['ID']) ? (int)$seed['ID'] : 0;
//region Observers
$seedObserverIDs = null;
if(isset($seed['OBSERVER_IDS']) && is_array($seed['OBSERVER_IDS']))
{
$seedObserverIDs = $seed['OBSERVER_IDS'];
}
elseif($seedID > 0)
{
$seedObserverIDs = Crm\Observer\ObserverManager::getEntityObserverIDs(\CCrmOwnerType::Lead, $seedID);
}
if($seedObserverIDs !== null)
{
$addedObserverIDs = array_diff($seedObserverIDs, $resultSeedObserverIDs);
if(!empty($addedObserverIDs))
{
$resultSeedObserverIDs = array_merge($resultSeedObserverIDs, $addedObserverIDs);
}
}
//endregion
//region Product Rows
$seedProductRows = null;
if(isset($seed['PRODUCT_ROWS']) && is_array($seed['PRODUCT_ROWS']))
{
$seedProductRows = $seed['PRODUCT_ROWS'];
}
elseif($seedID > 0)
{
$seedProductRows = \CCrmLead::LoadProductRows($seedID);
}
if($seedProductRows !== null)
{
\CCrmProductRow::Merge($seedProductRows, $resultSeedProductRows);
}
//endregion
}
//TODO: Rename SKIP_MULTIPLE_USER_FIELDS -> ENABLE_MULTIPLE_FIELDS_ENRICHMENT
$skipMultipleFields = isset($options['SKIP_MULTIPLE_USER_FIELDS']) && $options['SKIP_MULTIPLE_USER_FIELDS'];
$targID = isset($targ['ID']) ? (int)$targ['ID'] : 0;
//region Merge Observers bindings
if(!empty($resultSeedObserverIDs))
{
$targObserverIDs = null;
if(isset($targ['OBSERVER_IDS']) && is_array($targ['OBSERVER_IDS']))
{
$targObserverIDs = $targ['OBSERVER_IDS'];
}
elseif($targID > 0)
{
$targObserverIDs = Crm\Observer\ObserverManager::getEntityObserverIDs(\CCrmOwnerType::Lead, $targID);
}
if(!$skipMultipleFields)
{
if($targObserverIDs === null || count($targObserverIDs) === 0)
{
$targObserverIDs = $resultSeedObserverIDs;
}
else
{
$addedObserverIDs = array_diff($resultSeedObserverIDs, $targObserverIDs);
if(!empty($addedObserverIDs))
{
$targObserverIDs = array_merge($targObserverIDs, $addedObserverIDs);
}
}
$targ['OBSERVER_IDS'] = $targObserverIDs;
}
elseif($targObserverIDs === null || (count($targObserverIDs) === 0 && !$skipEmpty))
{
$targ['OBSERVER_IDS'] = $resultSeedObserverIDs;
}
}
//endregion
//region Merge Product Rows
$targProductRows = null;
if(isset($targ['PRODUCT_ROWS']) && is_array($targ['PRODUCT_ROWS']))
{
$targProductRows = $targ['PRODUCT_ROWS'];
}
elseif($targID > 0)
{
$targProductRows = \CCrmLead::LoadProductRows($targID);
}
if(!empty($resultSeedProductRows))
{
if(!$skipMultipleFields)
{
if($targProductRows === null || count($targProductRows) === 0)
{
$targ['PRODUCT_ROWS'] = $resultSeedProductRows;
}
else
{
\CCrmProductRow::Merge($resultSeedProductRows, $targProductRows);
$targ['PRODUCT_ROWS'] = $targProductRows;
}
}
elseif($targProductRows === null || (count($targProductRows) === 0 && !$skipEmpty))
{
$targ['PRODUCT_ROWS'] = $resultSeedProductRows;
}
}
//endregion
parent::mergeBoundEntitiesBatch($seeds, $targ, $skipEmpty, $options);
}