- Модуль: location
- Путь к файлу: ~/bitrix/modules/location/lib/entity/address/converter/stringtemplateconverter.php
- Класс: BitrixLocationEntityAddressConverterStringTemplateConverter
- Вызов: StringTemplateConverter::parseBlocks
private function parseBlocks(array $context): array
{
/* Variable for debug only
errorDisplayed = false;
*/
$blocks = [];
$templateLength = strlen($context['template']);
while ($context['position'] < $templateLength)
{
$blockStartPosition = $context['position'];
$context = $this->parseGroup($context);
if ($context['hasError'])
{
// Debug info
/*if (!$errorDisplayed)
{
echo str_replace(PHP_EOL, '
', htmlspecialcharsbx($this->getErrorsText($context)));
$errorDisplayed = true;
}*/
$errorInfo = $context['error']['info'];
if (!empty($errorInfo)
&& is_array($errorInfo)
&& isset($errorInfo['groupStartPosition'])
&& $errorInfo['groupStartPosition'] > $blockStartPosition)
{
$blockLength = $errorInfo['groupStartPosition'] - $blockStartPosition + 1;
}
else
{
$blockLength = 1;
}
$this->appendTextBlock(
$blocks,
$context['error']['position'],
substr($context['template'], $blockStartPosition, $blockLength)
);
$context = $this->clearContextInfoAndError($context);
$context['position'] = $blockStartPosition + $blockLength;
}
else
{
$groupStartPosition = $context['info']['position'];
if ($groupStartPosition > $blockStartPosition)
{
$this->appendTextBlock(
$blocks,
$blockStartPosition,
substr(
$context['template'],
$blockStartPosition,
$groupStartPosition - $blockStartPosition
)
);
}
if ($context['info']['value'] !== '')
{
$this->appendGroupBlock(
$blocks,
$groupStartPosition,
$context['info']['value']
);
}
$context = $this->clearContextInfo($context);
}
}
if (!$context['hasError'])
{
$context['info'] = ['blocks' => $blocks];
}
return $context;
}