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