• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/folder.php
  • Класс: BitrixDiskFolder
  • Вызов: Folder::copyTo
public function copyTo(Folder $targetFolder, $updatedBy, $generateUniqueName = false)
{
	$this->errorCollection->clear();

	if($this->getId() == $targetFolder->getId())
	{
		return $this;
	}

	$newRoot = $this->copyToInternal($targetFolder, $updatedBy, $generateUniqueName);
	if(!$newRoot)
	{
		return null;
	}
	$mapParentToNewParent = array(
		$this->getId() => $newRoot,
	);

	$parameters = array(
		'select' => array(
			'*',
			'DEPTH_LEVEL' => 'PATH_CHILD.DEPTH_LEVEL',
		),
		'filter' => array(
			'DELETED_TYPE' => FolderTable::DELETED_TYPE_NONE,
			'PATH_CHILD.PARENT_ID' => $this->id,
		),
		'order' => array('DEPTH_LEVEL' => 'ASC')
	);

	$objectIterator = FolderTable::getList(static::prepareGetListParameters($parameters));
	foreach ($objectIterator as $objectRow)
	{
		if ($objectRow['ID'] == $this->id)
		{
			continue;
		}

		$item = BaseObject::buildFromArray($objectRow);
		if(!isset($mapParentToNewParent[$item->getParentId()]))
		{
			return null;
		}

		/** @var Folder $newParentFolder */
		$newParentFolder = $mapParentToNewParent[$item->getParentId()];
		if($item instanceof File)
		{
			/** @var BitrixDiskFile $item */
			$item->copyTo($newParentFolder, $updatedBy, $generateUniqueName);
		}
		elseif ($item instanceof Folder)
		{
			/** @var BitrixDiskFolder $item */
			$newFolder = $item->copyToInternal($newParentFolder, $updatedBy, $generateUniqueName);
			if(!$newFolder)
			{
				continue;
			}
			$mapParentToNewParent[$item->getId()] = $newFolder;
		}
	}

	return $newRoot;
}