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