• Модуль: 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;
}