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