• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/update/block.php
  • Класс: BitrixLandingUpdateBlock
  • Вызов: Block::executeStep
static function executeStep(array $filter, &$count = 0, $limit = 0, array $params = [])
{
	$lastId = 0;

	Rights::setOff();

	$res = BlockTable::getList([
		'select' => [
			'ID', 'CONTENT'
		],
		'filter' => $filter,
		'order' => [
			'ID' => 'asc'
		],
		'limit' => $limit
	]);
	while ($row = $res->fetch())
	{
		$lastId = $row['ID'];
		$count++;

		// gets content from exist block
		$block = new BlockCore($row['ID']);
		$block->setAccess(BlockCore::ACCESS_X);
		$export = $block->export([
			'clear_form' => false
		]);

		// and apply to the new layout
		$newContent = BlockCore::getContentFromRepository(
			$block->getCode()
		);
		$block->saveContent($newContent);
		// update cards
		if ($export['cards'])
		{
			$block->updateCards(
				$export['cards']
			);
		}
		// update style
		if ($export['style'])
		{
			foreach ($export['style'] as $selector => $classes)
			{
				$addClasses = [];
				if (isset($params[$selector]['new_class']))
				{
					if (is_array($params[$selector]['new_class']))
					{
						if (count($params[$selector]['new_class']) > 1)
						{
							$addClasses = $params[$selector]['new_class'];
						}
						else
						{
							$addClasses = explode(' ', trim($params[$selector]['new_class'][0]));
						}
					}
					else
					{
						$addClasses = explode(' ', trim($params[$selector]['new_class']));
					}
				}

				$removeClasses = [];
				if (isset($params[$selector]['remove_class']))
				{
					if (is_array($params[$selector]['remove_class']))
					{
						if (count($params[$selector]['remove_class']) > 1)
						{
							$removeClasses = $params[$selector]['remove_class'];
						}
						else
						{
							$removeClasses = explode(' ', trim($params[$selector]['remove_class'][0]));
						}
					}
					else
					{
						$removeClasses = explode(' ', trim($params[$selector]['remove_class']));
					}
				}

				// change wrapper to valid selector
				if ($selector == '#wrapper')
				{
					$selector = '#' . $block->getAnchor($block->getId());
				}

				foreach (self::prepareClassesToSet($classes, $addClasses, $removeClasses) as $class)
				{
					$block->setClasses(array(
						$selector . $class['suffix'] => array(
							'classList' => [$class['classList']]
						)
					));
				}
			}
		}
		// update nodes
		if ($export['nodes'])
		{
			foreach ($export['nodes'] as $selector => $node)
			{
				if (isset($params[$selector]['update_video_to_lazyload']))
				{
					$export['nodes'][$selector] = self::updateVideoToLazyload($node);
				}
			}

			$block->updateNodes(
				$export['nodes']
			);
		}
		// update menu
		if ($export['menu'])
		{
			$block->updateNodes(
				$export['menu']
			);
		}
		// update attrs
		if ($export['attrs'])
		{
			if (isset($export['attrs']['#wrapper']))
			{
				$wrapperCode = '#' . $block->getAnchor($block->getId());
				$export['attrs'][$wrapperCode] = $export['attrs']['#wrapper'];
				unset($export['attrs']['#wrapper']);
			}
			$block->setAttributes(
				$export['attrs']
			);
		}

		// and save block with new layout and old content
		$block->save();
	}

	Rights::setOn();

	return $lastId;
}