- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/Relation/Registrar.php
- Класс: Bitrix\Crm\Relation\Registrar
- Вызов: Registrar::registerByBindingsChange
public function registerByBindingsChange(
ItemIdentifier $child,
int $parentEntityTypeId,
array $previousBindings,
array $currentBindings,
array $itemsToIgnore = [],
Context $context = null
): Result
{
$result = new Result();
[$bound, $unbound] = EntityBinding::prepareBoundAndUnboundEntities(
$parentEntityTypeId,
$previousBindings,
$currentBindings
);
foreach (EntityBinding::prepareEntityIDs($parentEntityTypeId, $unbound) as $removedParentId)
{
$oldParent = new ItemIdentifier($parentEntityTypeId, $removedParentId);
// intentional not strict comparison. it doesn't matter here if objects are the same instance
if (!in_array($oldParent, $itemsToIgnore, false))
{
$unbindResult = $this->registerUnbind($oldParent, $child, $context);
if (!$unbindResult->isSuccess())
{
$result->addErrors($unbindResult->getErrors());
}
}
}
foreach (EntityBinding::prepareEntityIDs($parentEntityTypeId, $bound) as $addedParentId)
{
$newParent = new ItemIdentifier($parentEntityTypeId, $addedParentId);
// intentional not strict comparison. it doesn't matter here if objects are the same instance
if (!in_array($newParent, $itemsToIgnore, false))
{
$bindResult = $this->registerBind($newParent, $child, $context);
if (!$bindResult->isSuccess())
{
$result->addErrors($bindResult->getErrors());
}
}
}
return $result;
}