• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/discount/discountmanager.php
  • Класс: BitrixCatalogDiscountDiscountManager
  • Вызов: DiscountManager::convertProperties
static function convertProperties(&$productData, $propertyValues, $entityData, $iblockData): void
{
	if (empty($productData) || !is_array($productData))
		return;
	if (empty($propertyValues) || !is_array($propertyValues))
		return;
	if (empty($entityData) || !is_array($entityData))
		return;
	if (empty($iblockData) || !is_array($iblockData))
		return;

	if (empty($entityData['needProperties']) || !is_array($entityData['needProperties']))
		return;
	$propertyIblocks = array_keys($entityData['needProperties']);
	foreach ($propertyIblocks as $iblock)
	{
		if (empty($iblockData['iblockElement'][$iblock]))
			continue;
		$propertyMap = $entityData['iblockPropertiesMap'][$iblock];
		foreach ($iblockData['iblockElement'][$iblock] as $element)
		{
			if (empty($propertyValues[$element]))
				continue;
			foreach ($propertyValues[$element] as $property)
			{
				if (empty($property) || empty($property['ID']))
					continue;
				if ($property['PROPERTY_TYPE'] == IblockPropertyTable::TYPE_FILE)
					continue;
				$property['ID'] = (int)$property['ID'];
				if (empty($propertyMap[$property['ID']]))
					continue;
				$propertyKey = $propertyMap[$property['ID']];
				$value = '';

				$check = false;
				if ($property['MULTIPLE'] == 'N')
				{
					if (!empty($property['USER_TYPE']))
					{
						switch($property['USER_TYPE'])
						{
							case 'DateTime':
							case 'Date':
								$property['VALUE'] = (string)$property['VALUE'];
								if ($property['VALUE'] != '')
								{
									$propertyFormat = false;
									if ($property['USER_TYPE'] == 'DateTime')
									{
										if (defined('FORMAT_DATETIME'))
											$propertyFormat = FORMAT_DATETIME;
									}
									else
									{
										if (defined('FORMAT_DATE'))
											$propertyFormat = FORMAT_DATE;
									}
									$intStackTimestamp = (int)$property['VALUE'];
									$property['VALUE'] = (
										$intStackTimestamp.'!' != $property['VALUE'].'!'
										? (int)MakeTimeStamp($property['VALUE'], $propertyFormat)
										: $intStackTimestamp
									);
								}
								$value = $property['VALUE'];
								$check = true;
								break;
						}
					}
					if (!$check)
					{
						switch ($property['PROPERTY_TYPE'])
						{
							case IblockPropertyTable::TYPE_LIST:
								$property['VALUE_ENUM_ID'] = (int)$property['VALUE_ENUM_ID'];
								$value = ($property['VALUE_ENUM_ID'] > 0 ? $property['VALUE_ENUM_ID'] : -1);
								break;
							case IblockPropertyTable::TYPE_ELEMENT:
							case IblockPropertyTable::TYPE_SECTION:
								$property['VALUE'] = (int)$property['VALUE'];
								$value = ($property['VALUE'] > 0 ? $property['VALUE'] : -1);
								break;
							default:
								$value = $property['VALUE'];
								break;
						}
					}
				}
				else
				{
					$value = [];
					if (!empty($property['USER_TYPE']))
					{
						switch($property['USER_TYPE'])
						{
							case 'DateTime':
							case 'Date':
								if (!empty($property['VALUE']) && is_array($property['VALUE']))
								{
									$propertyFormat = false;
									if ($property['USER_TYPE'] == 'DateTime')
									{
										if (defined('FORMAT_DATETIME'))
											$propertyFormat = FORMAT_DATETIME;
									}
									else
									{
										if (defined('FORMAT_DATE'))
											$propertyFormat = FORMAT_DATE;
									}
									foreach ($property['VALUE'] as &$oneValue)
									{
										$oneValue = (string)$oneValue;
										if ('' != $oneValue)
										{
											$intStackTimestamp = (int)$oneValue;
											if ($intStackTimestamp.'!' != $oneValue.'!')
												$oneValue = (int)MakeTimeStamp($oneValue, $propertyFormat);
											else
												$oneValue = $intStackTimestamp;
										}
										$value[] = $oneValue;
									}
									unset($oneValue, $propertyFormat);
								}
								$check = true;
								break;
						}
					}
					if (!$check)
					{
						switch ($property['PROPERTY_TYPE'])
						{
							case IblockPropertyTable::TYPE_LIST:
								if (!empty($property['VALUE_ENUM_ID']) && is_array($property['VALUE_ENUM_ID']))
								{
									foreach ($property['VALUE_ENUM_ID'] as &$oneValue)
									{
										$oneValue = (int)$oneValue;
										if ($oneValue > 0)
											$value[] = $oneValue;
									}
									unset($oneValue);
								}
								if (empty($value))
									$value = [-1];
								break;
							case IblockPropertyTable::TYPE_ELEMENT:
							case IblockPropertyTable::TYPE_SECTION:
								if (!empty($property['VALUE']) && is_array($property['VALUE']))
								{
									foreach ($property['VALUE'] as &$oneValue)
									{
										$oneValue = (int)$oneValue;
										if ($oneValue > 0)
											$value[] = $oneValue;
									}
									unset($oneValue);
								}
								if (empty($value))
									$value = [-1];
								break;
							default:
								$value = $property['VALUE'];
								break;
						}
					}
				}
				$productData[$element][$propertyKey] = (is_array($value) ? $value : [$value]);
			}
		}
		unset($element);
	}
	unset($iblock);
}