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

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

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

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

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

	$relationMap = RelationMap::createByEntity(\CCrmOwnerType::Lead, $entityID, $recyclingEntityID);
	$relationMap->build();

	LeadRelationManager::getInstance()->prepareRecoveryFields($fields, $relationMap);

	/*
	$contactIDs = isset($slots['CONTACT_IDS']) ? $slots['CONTACT_IDS'] : null;
	if(is_array($contactIDs) && !empty($contactIDs))
	{
		$fields['CONTACT_IDS'] = $contactIDs;
	}
	*/

	//region Convert User Fields from Suspended Type
	$userFields = $this->prepareRestoredUserFields($recyclingEntityID);
	if(!empty($userFields))
	{
		$fields = array_merge($fields, $userFields);
	}
	//endregion

	$fields = $this->prepareFields($fields);

	$entity = new \CCrmLead(false);
	$newEntityID = $entity->Add(
		$fields,
		true,
		array(
			'IS_RESTORATION' => true,
			'DISABLE_USER_FIELD_CHECK' => true,
		)
	);
	if($newEntityID <= 0)
	{
		return false;
	}

	//region Relation
	LeadRelationManager::getInstance()->recoverBindings($newEntityID, $relationMap);
	Relation::updateEntityID(\CCrmOwnerType::Lead, $entityID, $newEntityID, $recyclingEntityID);
	//endregion

	$this->eraseSuspendedUserFields($recyclingEntityID);

	$this->recoverMultiFields($recyclingEntityID, $newEntityID);
	$this->recoverAddresses($recyclingEntityID, $newEntityID);
	$this->recoverTimeline($recyclingEntityID, $newEntityID);
	$this->recoverDocuments($recyclingEntityID, $newEntityID);
	$this->recoverLiveFeed($recyclingEntityID, $newEntityID);
	$this->recoverUtm($recyclingEntityID, $newEntityID);
	$this->recoverTracing($recyclingEntityID, $newEntityID);
	$this->recoverObservers($recyclingEntityID, $newEntityID);
	$this->recoverWaitings($recyclingEntityID, $newEntityID);
	$this->recoverChats($recyclingEntityID, $newEntityID);
	$this->recoverProductRows($recyclingEntityID, $newEntityID);
	$this->recoverScoringHistory($recyclingEntityID, $newEntityID);
	$this->recoverCustomRelations((int)$recyclingEntityID, (int)$newEntityID);
	$this->recoverBadges((int)$recyclingEntityID, (int)$newEntityID);

	$this->recoverActivities($recyclingEntityID, $entityID, $newEntityID, $params, $relationMap);

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

	$this->rebuildSearchIndex($newEntityID);
	$this->startRecoveryWorkflows($newEntityID);
	//TODO: start automation???

	return true;
}