• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/transfer/import/landing.php
  • Класс: BitrixLandingTransferImportLanding
  • Вызов: Landing::importLanding
static function importLanding(Event $event): ?array
{
	$code = $event->getParameter('CODE');
	$content = $event->getParameter('CONTENT');
	$ratio = $event->getParameter('RATIO');
	$contextUser = $event->getParameter('CONTEXT_USER');
	$additional = $event->getParameter('ADDITIONAL_OPTION');
	$appId = $event->getParameter('APP_ID');
	$structure = new ConfigurationStructure($contextUser);
	$return = [
		'RATIO' => $ratio[$code] ?? [],
		'ERROR_MESSAGES' => []
	];

	if (!isset($content['~DATA']))
	{
		return null;
	}

	if (isset($return['RATIO']['TYPE']))
	{
		SiteCoreType::setScope(
			$return['RATIO']['TYPE']
		);
	}

	if (!self::isNeedImport($event))
	{
		return $return;
	}

	$data = $content['~DATA'];
	$oldId = $data['ID'] ?? null;

	if (isset($ratio[$code]['SITE_ID']) && (int)$ratio[$code]['SITE_ID'] > 0)
	{
		$data['SITE_ID'] = (int)$ratio[$code]['SITE_ID'];
	}
	elseif ($additional && (int)$additional['siteId'] > 0)
	{
		$data['SITE_ID'] = (int)$additional['siteId'];
		$return['RATIO']['SITE_ID'] = (int)$additional['siteId'];
	}

	if (($additional['siteId'] ?? 0) > 0)
	{
		LandingCore::enableCheckUniqueAddress();
	}

	$data = self::prepareData($data);
	$data = self::prepareAdditionalFiles($data, $structure);

	// folders' old format
	$convertFolderOldFormat = false;
	$return['RATIO']['FOLDERS_REF'] = $return['RATIO']['FOLDERS_REF'] ?? [];
	if ($data['FOLDER'] === 'Y')
	{
		$convertFolderOldFormat = true;
		$data['FOLDER'] = 'N';
		$res = SiteCore::addFolder($ratio[$code]['SITE_ID'], [
			'TITLE' => $data['TITLE'],
			'CODE' => $data['CODE']
		]);
		if ($res->isSuccess())
		{
			$data['FOLDER_ID'] = $res->getId();
			$return['RATIO']['FOLDERS_REF'][$oldId] = $data['FOLDER_ID'];
		}
	}
	elseif ($additional && $additional['folderId'])
	{
		$data['FOLDER_ID'] = (int)$additional['folderId'];
	}

	// set external partners info
	$appCode = null;
	if ($appId)
	{
		$app = AppTable::getById($appId)->fetch();
		$appCode = $app['CODE'] ?? null;
		if ($appCode)
		{
			$data['XML_ID'] = $data['TITLE'] . '|' . $appCode;
			$data['PREVIOUS_TPL_CODE'] = $data['TPL_CODE'];
			$data['TPL_CODE'] = $appCode;
		}
	}

	// base adding
	$data['ACTIVE'] = 'N';
	$data['PUBLIC'] = 'N';
	$data['FOLDER_SKIP_CHECK'] = 'Y';
	$data['INITIATOR_APP_CODE'] = $appCode;
	unset($data['CODE']);
	if ($additional)
	{
		$data = self::prepareAdditionalFields($data, $additional, $ratio);
	}
	$res = LandingCore::add($data);
	if ($res->isSuccess())
	{
		if ($convertFolderOldFormat && ($data['FOLDER_ID'] ?? 0))
		{
			Folder::update($data['FOLDER_ID'], ['INDEX_ID' => $res->getId()]);
		}

		if (isset($data['BLOCKS']) && is_array($data['BLOCKS']))
		{
			$data = self::prepareBlocksData($data, $event);
		}

		self::saveAdditionalFilesToLanding($data, $res->getId());

		$landing = LandingCore::createInstance($res->getId());
		// store old id and other references
		if ($oldId)
		{
			$return['RATIO']['LANDINGS'][$oldId] = $res->getId();
		}
		if (isset($data['TPL_ID']) && $data['TPL_ID'])
		{
			$return['RATIO']['TEMPLATE_LINKING'][$res->getId()] = [
				'TPL_ID' => (int) $data['TPL_ID'],
				'TEMPLATE_REF' => isset($data['TEMPLATE_REF'])
								? (array) $data['TEMPLATE_REF']
								: []
			];
		}
		if (isset($data['BLOCKS']) && is_array($data['BLOCKS']))
		{
			foreach ($data['BLOCKS'] as $oldBlockId => $blockItem)
			{
				if (is_array($blockItem))
				{
					$pending = false;
					$newBlockId = self::importBlock(
						$landing,
						$blockItem,
						$structure,
						$pending
					);
					$return['RATIO']['BLOCKS'][$oldBlockId] = $newBlockId;
					if ($pending)
					{
						$return['RATIO']['BLOCKS_PENDING'][] = $newBlockId;
					}
				}
			}
		}
	}
	else
	{
		$return['ERROR_MESSAGES'] = $res->getErrorMessages();
	}

	return $return;
}