- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/recycling/activitycontroller.php
- Класс: Bitrix\Crm\Recycling\ActivityController
- Вызов: ActivityController::moveToBin
public function moveToBin($entityID, array $params = array())
{
if(!Main\Loader::includeModule('recyclebin'))
{
throw new Main\InvalidOperationException("Could not load module RecycleBin.");
}
if(!is_int($entityID))
{
$entityID = (int)$entityID;
}
$fields = isset($params['FIELDS']) && is_array($params['FIELDS']) ? $params['FIELDS'] : null;
if(empty($fields))
{
$fields = $params['FIELDS'] = $this->getEntityFields($entityID);
}
if(empty($fields))
{
throw new Main\ObjectNotFoundException("Could not find entity: #{$entityID}.");
}
if(!self::lockItem($entityID))
{
return new Main\Result();
}
$entityData = $this->prepareEntityData(
$entityID,
array_merge($params, [ 'ENABLE_BINDINGS' => true ])
);
$recyclingEntity = Crm\Integration\Recyclebin\Activity::createRecycleBinEntity($entityID);
$recyclingEntity->setTitle($entityData['TITLE']);
$slots = isset($entityData['SLOTS']) && is_array($entityData['SLOTS']) ? $entityData['SLOTS'] : array();
$this->notifyTimelineMonitorAboutMoveToBin($slots['BINDINGS'] ?? []);
$relations = ActivityRelationManager::getInstance()->buildCollection($entityID, $slots);
foreach($slots as $slotKey => $slotData)
{
$recyclingEntity->add($slotKey, $slotData);
}
//region Files
\CCrmActivity::PrepareStorageElementIDs($fields);
$storageElementIDs = isset($fields['STORAGE_ELEMENT_IDS']) && is_array($fields['STORAGE_ELEMENT_IDS'])
? $fields['STORAGE_ELEMENT_IDS'] : [];
if(!empty($storageElementIDs))
{
$storageTypeID = isset($fields['STORAGE_TYPE_ID'])
? (int)$fields['STORAGE_TYPE_ID'] : \CCrmActivity::GetDefaultStorageTypeID();
$storageTypeName = Crm\Integration\StorageType::resolveName($storageTypeID);
foreach($storageElementIDs as $storageElementID)
{
$recyclingEntity->addFile($storageElementID, $storageTypeName);
}
}
//endregion
$saveResult = $recyclingEntity->save();
$saveErrors = $saveResult->getErrors();
if(!empty($saveErrors))
{
throw new Main\SystemException($saveErrors[0]->getMessage(), $saveErrors[0]->getCode());
}
$recyclingEntityID = $recyclingEntity->getId();
$this->entityIdToRecyclingEntityId[$entityID] = $recyclingEntityID;
//region Relations
foreach($relations as $relation)
{
/** @var Relation $relation */
$relation->setRecycleBinID(\CCrmOwnerType::Activity, $entityID, $recyclingEntityID);
$relation->save();
}
ActivityRelationManager::getInstance()->registerRecycleBin($recyclingEntityID, $entityID, $slots);
//endregion
//region Convert User Fields to Suspended Type
$suspendedUserFields = $this->prepareSuspendedUserFields($entityID);
if(!empty($suspendedUserFields))
{
$this->saveSuspendedUserFields($recyclingEntityID, $suspendedUserFields);
}
//endregion
$this->suspendTimeline($entityID, $recyclingEntityID);
$this->suspendLiveFeed($entityID, $recyclingEntityID);
$this->suspendBadges((int)$entityID, (int)$recyclingEntityID);
$this->suspendNotes((int)$entityID, (int)$recyclingEntityID);
\CCrmActivity::DoDeleteElementIDs($entityID);
$result = new Main\Result();
$result->setData([ 'recyclingEntityId' => $recyclingEntityID ]);
$provider = \CCrmActivity::GetActivityProvider($fields);
if($provider)
{
$providerResult = $provider::processMovingToRecycleBin(
$fields,
[ 'deletionParams' => [ 'MOVED_TO_RECYCLE_BIN' => true ] ]
);
if($providerResult->isSuccess())
{
$result->setData(
array_merge(
$result->getData(),
$providerResult->getData()
)
);
}
}
self::unlockItem($entityID);
$this->fireAfterMoveToBinEvent($entityID, $recyclingEntityID);
return $result;
}