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