- Модуль: documentgenerator
- Путь к файлу: ~/bitrix/modules/documentgenerator/lib/dataprovidermanager.php
- Класс: BitrixDocumentGeneratorDataProviderManager
- Вызов: DataProviderManager::calculateDataProviderValue
protected function calculateDataProviderValue(DataProvider $dataProvider, $placeholder)
{
$fields = $dataProvider->getFields();
if(!isset($fields[$placeholder]))
{
return false;
}
$fieldDescription = $fields[$placeholder];
// rewrite inner values from options.
$value = false;
$values = [];
if(isset($fieldDescription['OPTIONS']['VALUES']) && is_array($fieldDescription['OPTIONS']['VALUES']))
{
$values = $fieldDescription['OPTIONS']['VALUES'];
}
$options = $dataProvider->getOptions();
if(
isset($options['VALUES']) &&
is_array($options['VALUES'])
)
{
$values = array_merge($values, $options['VALUES']);
}
if(isset($values[$placeholder]))
{
$value = $values[$placeholder];
}
$calculatedValue = false;
if(isset($fieldDescription['VALUE']))
{
$calculatedValue = $this->getValue($fieldDescription['VALUE'], $dataProvider, $placeholder);
}
if(is_array($calculatedValue) && count($calculatedValue) > 0 && is_array(reset($calculatedValue)))
{
$selectedFound = false;
if($value)
{
foreach($calculatedValue as &$calcVal)
{
if($calcVal['VALUE'] != $value)
{
$calcVal['SELECTED'] = false;
}
else
{
$calcVal['SELECTED'] = true;
$selectedFound = true;
}
}
unset($calcVal);
}
if(!$selectedFound)
{
foreach($calculatedValue as &$calcVal)
{
if(isset($calcVal['SELECTED']) && $calcVal['SELECTED'] === true)
{
$selectedFound = true;
break;
}
}
unset($calcVal);
}
if(!$selectedFound)
{
foreach($calculatedValue as &$calcVal)
{
$calcVal['SELECTED'] = true;
break;
}
unset($calcVal);
}
$value = $calculatedValue;
}
if(!$value)
{
$value = $this->getValueFromList($calculatedValue);
}
else
{
$value = $calculatedValue;
}
if($value && isset($fieldDescription['PROVIDER']))
{
// if $value is array and Provider does not accept array as value - returns $values as it is - to allow user decide
// which value to use.
if(is_array($value) && !$this->isProviderArray($fieldDescription['PROVIDER']))
{
return $value;
}
$value = $this->createDataProvider($fieldDescription, $value, $dataProvider, $placeholder);
}
return $value;
}