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