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