• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/transfer/import/landing.php
  • Класс: BitrixLandingTransferImportLanding
  • Вызов: Landing::prepareBlocksData
static function prepareBlocksData(array $data, Event $event): array
{
	// @fix wrapper classes from original
	$appCode = $data['INITIATOR_APP_CODE'];
	$newTplCode = $data['PREVIOUS_TPL_CODE'] ?? $data['TPL_CODE'];
	$delobotAppCode = 'local.5eea949386cd05.00160385';
	$kraytAppCode = 'local.5f11a19f813b13.97126836';
	$bitrixAppCode = 'bitrix.';
	if (
		strpos($newTplCode, $delobotAppCode) !== false
		|| strpos($newTplCode, $kraytAppCode) !== false
		|| strpos($appCode, $bitrixAppCode) === 0
	)
	{
		$wrapperClasses = [];
		$http = new BitrixMainWebHttpClient;
		$resPreview = $http->get('https://preview.bitrix24.site/tools/blocks.php?tplCode=' . $newTplCode);
		if ($resPreview)
		{
			try
			{
				$wrapperClasses = BitrixMainWebJson::decode($resPreview);
			}
			catch (Exception $e){}
		}

		if ($wrapperClasses)
		{
			$i = 0;
			foreach ($data['BLOCKS'] as &$blockData)
			{
				if (isset($wrapperClasses[$i]) && $wrapperClasses[$i]['code'] === $blockData['code'])
				{
					$blockData['style']['#wrapper'] = ['classList' => [$wrapperClasses[$i]['classList']]];
				}
				$i++;
			}
			unset($blockData);
		}
	}
	unset($delobotAppCode, $kraytAppCode);

	//fix, delete copyright block
	$content = $event->getParameter('CONTENT');
	$templateDateCreate = strtotime($content['DATA']['DATE_CREATE']);
	$lastDate = strtotime('17.02.2022 00:00:00');
	if ($templateDateCreate < $lastDate)
	{
		$kraytCode = 'bitrix.krayt';
		$delobotCode = 'bitrix.delobot';
		if (strpos($appCode, $kraytCode) !== false || strpos($appCode, $delobotCode) !== false)
		{
			if (array_slice($data['BLOCKS'], -1)[0]['code'] === '17.copyright')
			{
				array_pop($data['BLOCKS']);
			}
		}
		unset($kraytCode, $delobotCode);
	}

	foreach ($data['BLOCKS'] as &$block)
	{
		//fix contact data
		if (isset($block['nodes']) && strpos($appCode, $bitrixAppCode) === 0)
		{
			foreach ($block['nodes'] as &$node)
			{
				$countNodeItem = 0;
				foreach ($node as &$nodeItem)
				{
					if (isset($nodeItem['href']))
					{
						$setContactsBlockCode = [
							'14.1.contacts_4_cols',
							'14.2contacts_3_cols',
							'14.3contacts_2_cols'
						];
						if (preg_match('/^tel:.*$/i', $nodeItem['href']))
						{
							$nodeItem['href'] = 'tel:#crmPhone1';
							if (isset($nodeItem['text']))
							{
								$nodeItem['text'] = '#crmPhoneTitle1';
							}
							if (
								(isset($block['nodes']['.landing-block-node-linkcontact-text'])
									&&	in_array($block['code'], $setContactsBlockCode, true))
							)
							{
								$block['nodes']['.landing-block-node-linkcontact-text'][$countNodeItem] = '#crmPhoneTitle1';
							}
						}
						if (preg_match('/^mailto:.*$/i', $nodeItem['href']))
						{
							$nodeItem['href'] = 'mailto:#crmEmail1';
							if (isset($nodeItem['text']))
							{
								$nodeItem['text'] = '#crmEmailTitle1';
							}
							if (
								isset($block['nodes']['.landing-block-node-linkcontact-text'])
								&& (in_array($block['code'], $setContactsBlockCode, true))
							)
							{
								$block['nodes']['.landing-block-node-linkcontact-text'][$countNodeItem] = '#crmEmailTitle1';
							}
						}
					}
					$countNodeItem++;
				}
				unset($nodeItem);
			}
			unset($node);
		}
		//fix countdown until the next unexpired date
		if (isset($block['attrs']))
		{
			foreach ($block['attrs'] as &$attr)
			{
				foreach ($attr as &$attrItem)
				{
					if (array_key_exists('data-end-date', $attrItem))
					{
						$neededAttr = $attrItem['data-end-date'] / 1000;
						$currenDate = time();
						if ($neededAttr < $currenDate)
						{
							$m = date('m', $neededAttr);
							$d = date('d', $neededAttr);
							$currenDateY = (int)date('Y', $currenDate);
							$currenDateM = date('m', $currenDate);
							$currenDateD = date('d', $currenDate);
							if ($currenDateM > $m)
							{
								$y = $currenDateY + 1;
							}
							else if (($currenDateM === $m) && $currenDateD >= $d)
							{
								$y = $currenDateY + 1;
							}
							else
							{
								$y = $currenDateY;
							}
							$time = '10:00:00';
							$timestamp = strtotime($y . '-' . $m . '-' . $d . ' ' . $time) * 1000;
							$attrItem['data-end-date'] = (string)$timestamp;

							if (preg_match_all(
								'/data-end-date="d+"/',
								$block['full_content'],
								$matches)
							)
							{
								$block['full_content'] = str_replace(
									$matches[0],
									'data-end-date="' . $attrItem['data-end-date'] . '"',
									$block['full_content']
								);
							}
						}
					}
				}
				unset($attrItem);
			}
			unset($attr);
		}
	}
	unset($block);

	return $data;
}