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