• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/site/update/chatsalesorder.php
  • Класс: BitrixLandingSiteUpdateChatSalesOrder
  • Вызов: ChatSalesOrder::prepareLandingBlocks
static function prepareLandingBlocks($currentBlocksData, $newBlocksData): void
{
	$newBlocksDataFiltered = array_filter($newBlocksData, static function($newBlockData) {
		return isset($newBlockData['CONTENT']) || isset($newBlockData['COMPONENT_PARAMS']) || isset($newBlockData['CLASSES']);
	});

	$currentBlocksDataProcessed = array_map(static function($currentBlockData) use ($newBlocksDataFiltered) {
		foreach ($newBlocksDataFiltered as $codeBlock => $newBlockData)
		{
			if ($codeBlock === $currentBlockData['CODE'])
			{
				if (isset($newBlockData['CONTENT']))
				{
					$currentBlockData['CONTENT'] = $newBlockData['CONTENT'];
				}
				if (isset($newBlockData['COMPONENT_PARAMS']))
				{
					foreach ($newBlockData['COMPONENT_PARAMS'] as $nameParam => $valueParam)
					{
						$newParamsString = PHP_EOL . '"' . $nameParam . '" => "' . $valueParam . '",';
						$pattern = '/["']' . $nameParam . '["'][s=>]*[^,]*[,?]/';
						if (preg_match($pattern, $currentBlockData['CONTENT']) === 1)
						{
							$currentBlockData['CONTENT'] = preg_replace($pattern, $newParamsString, $currentBlockData['CONTENT']);
						}
						else
						{
							$pattern = '/(["'].*["']s*=>s*[^,]*[,?])/';
							$currentBlockData['CONTENT'] = preg_replace($pattern, '${1}' . $newParamsString, $currentBlockData['CONTENT'], 1);
						}
					}
				}
				if (isset($newBlockData['CLASSES']))
				{
					$pos = strpos($newBlockData['CLASSES'][0], ' ');
					$string = substr($newBlockData['CLASSES'][0], 0, $pos + 1);
					$pattern = '/class="'. $string . '.*"/';
					$replacement = 'class="' . $newBlockData['CLASSES'][0] . '"';
					$currentBlockData['CONTENT'] = preg_replace($pattern, $replacement, $currentBlockData['CONTENT']);
				}
				return $currentBlockData;
			}
		}
		return $currentBlockData;
	}, $currentBlocksData);

	$preparedBlocksData = array_filter($currentBlocksDataProcessed);

	//update
	foreach ($preparedBlocksData as $preparedBlockData)
	{
		InternalsBlockTable::update(
			$preparedBlockData['ID'],
			['CONTENT' => $preparedBlockData['CONTENT']]
		);
	}
}