- Модуль: documentgenerator
- Путь к файлу: ~/bitrix/modules/documentgenerator/lib/document.php
- Класс: BitrixDocumentGeneratorDocument
- Вызов: Document::handleMultipleProviderValue
protected function handleMultipleProviderValue(
array $value,
DataProvider $dataProvider,
string $placeholder,
string $providerName
)
{
$fullPlaceholder = $placeholder;
$placeholderParts = explode('.', $placeholder);
$placeholder = '';
foreach($placeholderParts as $part)
{
if($part === Template::MAIN_PROVIDER_PLACEHOLDER)
{
continue;
}
if($placeholder !== '')
{
$placeholder .= '.';
}
$placeholder .= $part;
if($part === $providerName)
{
break;
}
}
if(!$placeholder)
{
$this->result->addError(new Error('Multiple values for root provider are not allowed'));
return false;
}
if(isset($this->selectFields[$placeholder]))
{
return DataProviderManager::getInstance()->getValueFromList($value);
}
if($dataProvider === null)
{
$fields = $this->getProvider()->getFields();
}
else
{
$fields = $dataProvider->getFields();
}
if(isset($fields[$providerName]))
{
$group = [];
foreach($this->fields as $field)
{
if(is_string($field['VALUE']) && mb_strpos($field['VALUE'], $fullPlaceholder) !== false)
{
$group = $field['GROUP'];
break;
}
}
if(is_array($group))
{
// 3 = 1 (document) + 1(minimum) + 1(will be popped)
$group = array_slice($group, 0, (3 + substr_count($placeholder, '.')));
}
$title = $providerName;
if(isset($fields[$providerName]['TITLE']))
{
$title = $fields[$providerName]['TITLE'];
}
$this->selectFields[$placeholder] = [
'TITLE' => $title,
'VALUE' => $value,
'GROUP' => $group,
];
}
return DataProviderManager::getInstance()->getValueFromList($value);
}