- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/transfer/import/landing.php
- Класс: BitrixLandingTransferImportLanding
- Вызов: Landing::importBlock
static function importBlock(LandingCore $landing, array $block, ConfigurationStructure $structure, bool &$pending = false): int
{
static $sort = 0;
static $appChecked = [];
$blockId = 0;
// if this is a REST block
if (
isset($block['repo_block']['app_code']) &&
isset($block['repo_block']['xml_id']) &&
is_string($block['repo_block']['app_code']) &&
is_string($block['repo_block']['xml_id'])
)
{
unset($block['code']);
$repoId = self::getRepoId(
$block['repo_block']['app_code'],
$block['repo_block']['xml_id']
);
if ($repoId)
{
$block['code'] = 'repo_' . $repoId;
}
// force append REST blocks
if (
!isset($block['code']) &&
!empty($block['repo_info']) &&
self::$forceAppendRestBlocks
)
{
$appCode = $block['repo_block']['app_code'];
if (!array_key_exists($appCode, $appChecked))
{
$appChecked[$appCode] = BitrixLandingRepo::getAppByCode($appCode);
}
if ($appChecked[$appCode])
{
$repoInfo = $block['repo_info'];
$res = Repo::add([
'APP_CODE' => $block['repo_block']['app_code'],
'XML_ID' => $block['repo_block']['xml_id'],
'NAME' => $repoInfo['NAME'] ?? null,
'DESCRIPTION' => $repoInfo['DESCRIPTION'] ?? null,
'SECTIONS' => $repoInfo['SECTIONS'] ?? null,
'PREVIEW' => $repoInfo['PREVIEW'] ?? null,
'MANIFEST' => serialize(unserialize($repoInfo['MANIFEST'] ?? '', ['allowed_classes' => false])),
'CONTENT' => $repoInfo['CONTENT'] ?? null
]);
if ($res->isSuccess())
{
$block['code'] = 'repo_' . $res->getId();
}
}
}
if (!isset($block['code']))
{
$pending = true;
$blockId = $landing->addBlock(
AppConfiguration::SYSTEM_BLOCK_REST_PENDING,
[
'PUBLIC' => 'N',
'SORT' => $sort,
'ANCHOR' => $block['anchor'] ?? '',
'INITIATOR_APP_CODE' => $block['repo_block']['app_code'] ?? null
]
);
if ($blockId)
{
$sort += 500;
$blockInstance = $landing->getBlockById($blockId);
if ($blockInstance)
{
if (isset($block['nodes']) && is_array($block['nodes']))
{
$block['nodes'] = self::addFilesToBlock(
$blockInstance,
$block['nodes'],
$structure,
true
);
}
$blockInstance->updateNodes([
AppConfiguration::SYSTEM_COMPONENT_REST_PENDING => [
'BLOCK_ID' => $blockId,
'DATA' => base64_encode(serialize($block)),
],
]);
$blockInstance->save();
}
}
return $blockId;
}
}
if (!isset($block['code']))
{
return $blockId;
}
// add block to the landing
$blockFields = [
'PUBLIC' => 'N',
'SORT' => $sort,
'ANCHOR' => $block['anchor'] ?? '',
'INITIATOR_APP_CODE' => $block['repo_block']['app_code'] ?? null
];
if ($block['full_content'] ?? null)
{
$blockFields['CONTENT'] = str_replace(
['', '?>'],
['< ?', '? >'],
$block['full_content']
);
}
if ($block['designed'] ?? null)
{
$blockFields['DESIGNED'] = 'Y';
}
$blockId = $landing->addBlock(
$block['code'],
$blockFields
);
if ($blockId)
{
$sort += 500;
$blockInstance = $landing->getBlockById($blockId);
if (isset($block['nodes']) && is_array($block['nodes']))
{
$block['nodes'] = self::addFilesToBlock(
$blockInstance,
$block['nodes'],
$structure
);
}
if ($block['meta']['FAVORITE_META'] ?? [])
{
$favoriteMeta = $block['meta']['FAVORITE_META'];
if ($block['repo_block']['app_code'] ?? null)
{
$favoriteMeta['tpl_code'] = $block['repo_block']['app_code'];
}
if (intval($favoriteMeta['preview'] ?? 0) > 0)
{
$unpackFile = $structure->getUnpackFile($favoriteMeta['preview']);
if ($unpackFile)
{
$favoriteMeta['preview'] = AppConfiguration::saveFile($unpackFile);
File::addToBlock($blockInstance->getId(), $favoriteMeta['preview']);
}
if (!$favoriteMeta['preview'])
{
unset($favoriteMeta['preview']);
}
}
$blockInstance->changeFavoriteMeta($favoriteMeta);
BitrixLandingBlock::clearRepositoryCache();
}
if ($blockFields['CONTENT'] ?? null)
{
$blockInstance->saveContent($blockFields['CONTENT'], $block['designed'] ?? false);
}
self::saveDataToBlock($blockInstance, $block);
$blockInstance->save();
// if block is favorite
if (intval($block['meta']['LID'] ?? -1) === 0)
{
$blockInstance->changeLanding(0);
}
}
return $blockId;
}