- Модуль: documentgenerator
- Путь к файлу: ~/bitrix/modules/documentgenerator/lib/controller/dataprovider.php
- Класс: BitrixDocumentGeneratorControllerDataProvider
- Вызов: DataProvider::getPlaceholderAction
public function getPlaceholderAction($provider, $value)
{
$originalValue = $value;
$aliases = [$value];
$value = str_replace(Document::THIS_PLACEHOLDER.'.'.Template::MAIN_PROVIDER_PLACEHOLDER.'.', '', $value);
$value = str_replace(Document::THIS_PLACEHOLDER.'.', '', $value);
$providers = explode('.', $value);
while(count($providers) > 1)
{
$aliases[] = implode('.', $providers);
array_shift($providers);
}
$fieldsQuery = FieldTable::getList([
'filter' => [
'@VALUE' => $aliases
]
]);
$result = [];
while($field = $fieldsQuery->fetch())
{
if(isset($result[$field['PLACEHOLDER']]))
{
if($field['PROVIDER'] == mb_strtolower($provider))
{
$result[$field['PLACEHOLDER']] = $field;
}
}
else
{
$result[$field['PLACEHOLDER']] = $field;
}
}
$selectedPlaceholder = false;
foreach($result as $placeholder => $field)
{
if($field['VALUE'] == $value || $field['VALUE'] == $originalValue)
{
$selectedPlaceholder = $placeholder;
break;
}
if($selectedPlaceholder)
{
if(mb_strlen($result[$selectedPlaceholder]['VALUE']) < mb_strlen($field['VALUE']))
{
$selectedPlaceholder = $placeholder;
}
}
}
if($selectedPlaceholder)
{
$result[$selectedPlaceholder]['SELECTED'] = 'y';
}
$placeholder = DataProviderManager::getInstance()->valueToPlaceholder($value);
if(!isset($result[$placeholder]))
{
$field = ['PLACEHOLDER' => $placeholder];
if(!$selectedPlaceholder)
{
$field['SELECTED'] = 'y';
}
$result[] = $field;
}
return $result;
}