- Модуль: location
- Путь к файлу: ~/bitrix/modules/location/lib/entity/address/converter/stringtemplateconverter.php
- Класс: BitrixLocationEntityAddressConverterStringTemplateConverter
- Вызов: StringTemplateConverter::parseGroupFieldListStart
private function parseGroupFieldListStart(array $context): array
{
$fieldListStartPosition = $context['position'];
$fieldValues = [];
$matches = null;
// [", ", [ADDRESS_LINE_1:N,ADDRESS_LINE_2,"Text",LOCALITY,ADM_LEVEL_2]]
// Are looking for ^^^
if (preg_match(
'/' . self::REGEX_PART_FROM_DELIMITER_TO_FIELD_LIST . '/ms' . BX_UTF_PCRE_MODIFIER,
$context['template'],
$matches,
PREG_OFFSET_CAPTURE,
$context['position']
)
&& $matches[0][1] === $fieldListStartPosition
)
{
$context['position'] = $matches[0][1] + strlen($matches[0][0]);
$isFieldListEnd = false;
while (!($context['hasError'] || $isFieldListEnd))
{
$context = $this->parseField($context);
if (!$context['hasError'])
{
$isFieldListEnd = (
isset($context['info']['isFieldListEnd'])
&& $context['info']['isFieldListEnd']
);
if ($context['info']['value'] !== '')
{
$fieldValues[] = $context['info']['value'];
}
$context = $this->clearContextInfo($context);
}
}
if (!$context['hasError'])
{
$context['info'] = ['fieldValues' => $fieldValues];
}
}
else
{
$this->addContextError(
$context,
self::ERR_PARSE_PART_FROM_DELIMITER_TO_FIELD_LIST,
$fieldListStartPosition
);
}
if ($context['hasError'])
{
$this->addContextError($context, self::ERR_PARSE_GROUP_FIELD_LIST, $fieldListStartPosition);
}
return $context;
}