• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/recycling/dynamiccontroller.php
  • Класс: Bitrix\Crm\Recycling\DynamicController
  • Вызов: DynamicController::recover
public function recover($entityID, array $params = []): bool
{
	if($entityID <= 0)
	{
		return false;
	}

	$recyclingEntityID = (int)($params['ID'] ?? 0);
	if($recyclingEntityID <= 0)
	{
		return false;
	}

	$slots = ($params['SLOTS'] ?? null);
	if(!is_array($slots))
	{
		return false;
	}

	$fields = ($slots['FIELDS'] ?? null);
	if(!(is_array($fields) && !empty($fields)))
	{
		return false;
	}

	unset($fields['ID'], $fields['COMPANY_ID'], $fields['CONTACT_ID'], $fields['CONTACT_IDS'], $fields['PRODUCT_ROWS']);

	$relationMap = RelationMap::createByEntity($this->getEntityTypeID(), $entityID, $recyclingEntityID);
	$relationMap->build();

	DynamicRelationManager::getInstance($this->getEntityTypeID())
		->prepareRecoveryFields($fields, $relationMap);

	$item = $this->createItem($fields);

	$operation = $this->getFactory()->getRestoreOperation($item);
	$operation
		->disableAllChecks()
	;

	$result = $operation->launch();
	if (!$result->isSuccess())
	{
		return false;
	}

	$newEntityID = $item->getId();
	if($newEntityID <= 0)
	{
		return false;
	}

	//region Relation
	Relation::updateEntityID($this->getEntityTypeID(), $entityID, $newEntityID, $recyclingEntityID);
	//endregion

	$this->recoverDependenceElements($recyclingEntityID, $newEntityID);

	$requisiteLinks = isset($slots['REQUISITE_LINKS']) ? $slots['REQUISITE_LINKS'] : null;
	if(is_array($requisiteLinks) && !empty($requisiteLinks))
	{
		for($i = 0, $length = count($requisiteLinks); $i < $length; $i++)
		{
			$requisiteLinks[$i]['ENTITY_TYPE_ID'] = $this->getEntityTypeID();
			$requisiteLinks[$i]['ENTITY_ID'] = $newEntityID;
		}
		Crm\EntityRequisite::setLinks($requisiteLinks);
	}
	$this->recoverActivities($recyclingEntityID, $entityID, $newEntityID, $params, $relationMap);

	//region Relation
	Relation::unregisterRecycleBin($recyclingEntityID);
	Relation::deleteJunks();
	//endregion

	return true;
}