- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/block.php
- Класс: BitrixLandingBlock
- Вызов: Block::createFromRepository
static function createFromRepository(Landing $landing, string $code, array $data = array())
{
// get content and manifest
$filesFromContent = [];
$sourceParams = [];
$codeOriginal = null;
$designed = 'N';
$content = $data['CONTENT'] ?? self::getContentFromRepository($code);
if (strpos($code, '@'))
{
$codeOriginal = $code;
$normalizedBlock = self::getNormalizedBlock($code);
$designed = $normalizedBlock['DESIGNED'] ?? 'N';
$filesFromContent = $normalizedBlock['FILES'] ?? [];
$sourceParams = $normalizedBlock['SOURCE_PARAMS'] ?? [];
[$code, ] = explode('@', $code);
}
$manifest = self::getManifestFile($code);
// version control
if (
isset($manifest['block']['version']) &&
version_compare(Manager::getVersion(), $manifest['block']['version']) < 0
)
{
$landing->getError()->addError(
'BLOCK_WRONG_VERSION',
Loc::getMessage('LANDING_BLOCK_WRONG_VERSION')
);
return false;
}
// check errors
if (!$landing->exist())
{
$landing->getError()->addError(
'LANDING_NOT_EXIST',
Loc::getMessage('LANDING_BLOCK_LANDING_NOT_EXIST')
);
return false;
}
if ($content == '')
{
$landing->getError()->addError(
'BLOCK_NOT_FOUND',
Loc::getMessage('LANDING_BLOCK_NOT_FOUND')
);
return false;
}
// add
$fields = array(
'LID' => $landing->getId(),
'CODE' => $code,
'SOURCE_PARAMS' => $sourceParams,
'CONTENT' => $content,
'ACTIVE' => 'Y',
'DESIGNED' => $designed
);
$availableReplace = array(
'ACTIVE', 'PUBLIC', 'ACCESS', 'SORT',
'CONTENT', 'ANCHOR', 'SOURCE_PARAMS',
'INITIATOR_APP_CODE', 'XML_ID',
'DESIGNED', 'FAVORITE_META'
);
foreach ($availableReplace as $replace)
{
if (isset($data[$replace]))
{
$fields[$replace] = $data[$replace];
}
}
$res = parent::add($fields);
if ($res->isSuccess())
{
$block = new self($res->getId());
$manifest = $block->getManifest();
if (!$block->getLocalAnchor())
{
$historyActivity = History::isActive();
History::deactivate();
$block->setAnchor('b' . $block->getId());
$historyActivity ? History::activate() : History::deactivate();
}
AssetsPreProcessing::blockAddProcessing($block);
if (
isset($manifest['callbacks']['afteradd']) &&
is_callable($manifest['callbacks']['afteradd'])
)
{
$manifest['callbacks']['afteradd']($block);
}
// calling class(es) of block
foreach ($block->getClass() as $class)
{
$classBlock = $block->includeBlockClass($class);
$classBlock->beforeAdd($block);
}
// for set filter
if ($fields['SOURCE_PARAMS'])
{
$block->saveDynamicParams(
$fields['SOURCE_PARAMS']
);
}
if (isset($manifest['block']['app_code']))
{
$block->save([
'INITIATOR_APP_CODE' => $manifest['block']['app_code']
]);
}
else// index search only
{
$block->save();
}
// copy references to files from content to new block
foreach ($filesFromContent as $fileId)
{
File::addToBlock($block->getId(), $fileId);
}
return $block;
}
else
{
$landing->getError()->addFromResult($res);
return false;
}
}