- Модуль: rest
- Путь к файлу: ~/bitrix/modules/rest/lib/api/placement.php
- Класс: BitrixRestApiPlacement
- Вызов: Placement::prepareCompositeOptions
static function prepareCompositeOptions(array $paramOptionData, array $optionSetting): array
{
$result = [];
if (!is_array($optionSetting['typeValue']))
{
throw new ArgumentTypeException('typeValue', 'array');
}
$allowedTypes = ['integer', 'string', 'array'];
$optionSetting['typeValue'] = str_replace('int', 'integer', $optionSetting['typeValue']);
$optionSetting['typeValue'] = array_intersect($optionSetting['typeValue'], $allowedTypes);
//1. check transmitted placement data
foreach ($paramOptionData as $keyOption => $valueOption)
{
$typeValue = gettype($valueOption);
//do not take arrays, they are processed as a separate entity
if (in_array($typeValue, $optionSetting['typeValue']) && $typeValue !== 'array')
{
$result[$keyOption] = $valueOption;
}
}
//2. check default placement setting
foreach ($optionSetting as $keySetting => $valueSetting)
{
//type and typeValue - service data
if ($keySetting === 'type' || $keySetting === 'typeValue')
{
continue;
}
$typeValueSetting = gettype($valueSetting);
if (
$typeValueSetting === 'array'
&& in_array('array', $optionSetting['typeValue'])
&& isset($valueSetting['type'])
&& isset($valueSetting['typeValue'])
&& isset($paramOptionData[$keySetting])
)
{
$result[$keySetting] = self::prepareCompositeOptions($paramOptionData[$keySetting], $valueSetting);
}
}
return $result;
}