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