...Человеческий поиск в разработке...
- Модуль: 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); }