- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/site.php
- Класс: BitrixLandingSite
- Вызов: Site::copyFolders
static function copyFolders(int $fromSite, int $toSite, array &$folderMap = []): BitrixMainResult
{
$result = new BitrixMainResult();
$fromSiteAccess = Site::ping($fromSite) && Rights::hasAccessForSite($fromSite, Rights::ACCESS_TYPES['read']);
$toSiteAccess = Site::ping($toSite) && Rights::hasAccessForSite($toSite, Rights::ACCESS_TYPES['edit']);
if ($fromSiteAccess && $toSiteAccess)
{
Landing::disableCheckUniqueAddress();
$childrenExist = false;
$res = Folder::getList([
'filter' => [
'SITE_ID' => $fromSite
]
]);
while ($row = $res->fetch())
{
$oldId = $row['ID'];
unset($row['ID']);
if ($row['PARENT_ID'])
{
$childrenExist = true;
}
else
{
unset($row['PARENT_ID']);
}
if ($row['INDEX_ID'])
{
unset($row['INDEX_ID']);
}
$row['SITE_ID'] = $toSite;
$resAdd = Folder::add($row);
$folderMap[$oldId] = $resAdd->isSuccess() ? $resAdd->getId() : null;
}
// update child-parent
if ($childrenExist)
{
$res = Folder::getList([
'select' => [
'ID', 'PARENT_ID'
],
'filter' => [
'SITE_ID' => $toSite,
'!PARENT_ID' => false
]
]);
while ($row = $res->fetch())
{
Folder::update($row['ID'], [
'PARENT_ID' => $folderMap[$row['PARENT_ID']] ?: null
]);
}
}
Landing::enableCheckUniqueAddress();
}
else
{
$result->addError(new BitrixMainError(
Loc::getMessage('LANDING_COPY_ERROR_SITE_NOT_FOUND'),
'ACCESS_DENIED'
));
}
return $result;
}