- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/Relation/StorageStrategy/ContactToFactory.php
- Класс: Bitrix\Crm\Relation\StorageStrategy\ContactToFactory
- Вызов: ContactToFactory::replaceBindings
protected function replaceBindings(ItemIdentifier $fromItem, ItemIdentifier $toItem): Result
{
$childItems = $this->childFactory->getItems([
'select' => [Item::FIELD_NAME_ID],
'filter' => [
'=' . Item::FIELD_NAME_CONTACT_BINDINGS . '.CONTACT_ID' => $fromItem->getEntityId(),
],
]);
if (!empty($childItems))
{
$childItems = $this->childFactory->getItems([
'select' => [Item::FIELD_NAME_ID, Item::FIELD_NAME_CONTACT_BINDINGS],
'filter' => [
'@ID' => array_map(function(Item $item) {
return $item->getId();
}, $childItems),
],
]);
}
$result = new Result();
foreach ($childItems as $childItem)
{
$childItem->unbindContacts(EntityBinding::prepareEntityBindings(
\CCrmOwnerType::Contact,
[$fromItem->getEntityId()]
));
$childItem->bindContacts(EntityBinding::prepareEntityBindings(
\CCrmOwnerType::Contact,
[$toItem->getEntityId()]
));
$saveResult = $childItem->save(false);
if (!$saveResult->isSuccess())
{
$result->addErrors($saveResult->getErrors());
}
}
return $result;
}