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