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