• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/component/gridvariationform.php
  • Класс: BitrixCatalogComponentGridVariationForm
  • Вызов: GridVariationForm::prepareFieldsValues
public function prepareFieldsValues(array $dirtyValues): array
{
	$result = [
		'PROPERTIES' => [],
		'BARCODES' => [],
		'PRICES' => [],
	];

	$pricePrefix = self::GRID_FIELD_PREFIX . self::PRICE_FIELD_PREFIX;
	$purchacingPricePrefix = self::GRID_FIELD_PREFIX . 'PURCHASING_PRICE';

	foreach ($this->getDescriptions() as $description)
	{
		$name = $description['name'];
		$value = $dirtyValues[$name] ?? null;
		if (!isset($value))
		{
			continue;
		}

		if (isset($description['propertyId']))
		{
			$type = $description['type'] ?? null;
			if ($type === 'multilist' && empty($value))
			{
				$value = [];
			}

			$propertyId = (int)$description['propertyId'];
			$result['PROPERTIES'][$propertyId] = $value;
		}
		elseif (mb_strpos($name, $pricePrefix) === 0)
		{
			if (
				is_array($value)
				&& isset($value['PRICE']['NAME'], $value['PRICE']['VALUE'], $value['CURRENCY']['VALUE'])
			)
			{
				$priceGroupId = str_replace($pricePrefix, '', $value['PRICE']['NAME']);
				if ($priceGroupId)
				{
					$result['PRICES'][$priceGroupId] = [
						'PRICE' => (float)$value['PRICE']['VALUE'],
						'CURRENCY' => (string)$value['CURRENCY']['VALUE'],
					];
				}
			}
		}
		elseif (mb_strpos($name, $purchacingPricePrefix) === 0)
		{
			if (is_array($value) && isset($value['PRICE']['VALUE'], $value['CURRENCY']['VALUE']))
			{
				$result['PURCHASING_PRICE'] = (float)$value['PRICE']['VALUE'];
				$result['PURCHASING_CURRENCY'] = (string)$value['CURRENCY']['VALUE'];
			}
		}
		elseif (isset($description['originalName']))
		{
			$name = $description['originalName'];
			$result[$name] = $value;
		}
		elseif (isset($description['entity']) && $description['entity'] === 'barcode')
		{
			if (is_array($value))
			{
				array_push($result['BARCODES'], ...$value);
			}
			else
			{
				$result['BARCODES'][] = $value;
			}
		}
	}

	return $result;
}