Registrar::registerByBindingsChange

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Registrar
  4. registerByBindingsChange
  • Модуль: 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;
}

Добавить комментарий