- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/comp_pricetools.php
- Класс: CIBlockPriceTools
- Вызов: CIBlockPriceTools::getTreeProperties
static function getTreeProperties($skuInfo, $propertiesCodes, $defaultFields = array())
{
if (isset($defaultFields['PICT']) && is_array($defaultFields['PICT']))
{
if (!isset($defaultFields['PICT']['ID']))
$defaultFields['PICT']['ID'] = 0;
}
$requireFields = array(
'ID',
'UF_XML_ID',
'UF_NAME',
);
$result = array();
if (empty($skuInfo))
return $result;
if (!is_array($skuInfo))
{
$skuInfo = (int)$skuInfo;
if ($skuInfo <= 0)
return $result;
if (self::$catalogIncluded === null)
self::$catalogIncluded = Loader::includeModule('catalog');
if (!self::$catalogIncluded)
return $result;
$skuInfo = CCatalogSku::GetInfoByProductIBlock($skuInfo);
if (empty($skuInfo))
return $result;
}
if (empty($propertiesCodes) || !is_array($propertiesCodes))
return $result;
$showMode = '';
$propertyIterator = IblockPropertyTable::getList(array(
'select' => array(
'ID', 'IBLOCK_ID', 'CODE', 'NAME', 'SORT', 'LINK_IBLOCK_ID', 'PROPERTY_TYPE', 'USER_TYPE', 'USER_TYPE_SETTINGS'
),
'filter' => array(
'=IBLOCK_ID' => $skuInfo['IBLOCK_ID'],
'=PROPERTY_TYPE' => array(
IblockPropertyTable::TYPE_LIST,
IblockPropertyTable::TYPE_ELEMENT,
IblockPropertyTable::TYPE_STRING
),
'=ACTIVE' => 'Y', '=MULTIPLE' => 'N'
),
'order' => array(
'SORT' => 'ASC', 'ID' => 'ASC'
)
));
while ($propInfo = $propertyIterator->fetch())
{
$propInfo['ID'] = (int)$propInfo['ID'];
if ($propInfo['ID'] == $skuInfo['SKU_PROPERTY_ID'])
continue;
$propInfo['CODE'] = (string)$propInfo['CODE'];
if ($propInfo['CODE'] === '')
$propInfo['CODE'] = $propInfo['ID'];
if (!in_array($propInfo['CODE'], $propertiesCodes))
continue;
$propInfo['SORT'] = (int)$propInfo['SORT'];
$propInfo['USER_TYPE'] = (string)$propInfo['USER_TYPE'];
if ($propInfo['PROPERTY_TYPE'] == IblockPropertyTable::TYPE_STRING)
{
if ('directory' != $propInfo['USER_TYPE'])
continue;
$propInfo['USER_TYPE_SETTINGS'] = (string)$propInfo['USER_TYPE_SETTINGS'];
if ($propInfo['USER_TYPE_SETTINGS'] == '')
continue;
$propInfo['USER_TYPE_SETTINGS'] = unserialize($propInfo['USER_TYPE_SETTINGS'], ['allowed_classes' => false]);
if (!isset($propInfo['USER_TYPE_SETTINGS']['TABLE_NAME']) || empty($propInfo['USER_TYPE_SETTINGS']['TABLE_NAME']))
continue;
if (self::$highLoadInclude === null)
self::$highLoadInclude = Loader::includeModule('highloadblock');
if (!self::$highLoadInclude)
continue;
$highBlock = HighloadBlockTable::getList(array(
'filter' => array('=TABLE_NAME' => $propInfo['USER_TYPE_SETTINGS']['TABLE_NAME'])
))->fetch();
if (!isset($highBlock['ID']))
continue;
$entity = HighloadBlockTable::compileEntity($highBlock);
$fieldsList = $entity->getFields();
if (empty($fieldsList))
continue;
$flag = true;
foreach ($requireFields as $fieldCode)
{
if (!isset($fieldsList[$fieldCode]) || empty($fieldsList[$fieldCode]))
{
$flag = false;
break;
}
}
unset($fieldCode);
if (!$flag)
continue;
$propInfo['USER_TYPE_SETTINGS']['FIELDS_MAP'] = $fieldsList;
$propInfo['USER_TYPE_SETTINGS']['ENTITY'] = $entity;
}
switch ($propInfo['PROPERTY_TYPE'])
{
case IblockPropertyTable::TYPE_ELEMENT:
$showMode = 'PICT';
break;
case IblockPropertyTable::TYPE_LIST:
$showMode = 'TEXT';
break;
case IblockPropertyTable::TYPE_STRING:
$showMode = (isset($fieldsList['UF_FILE']) ? 'PICT' : 'TEXT');
break;
}
$treeProp = array(
'ID' => $propInfo['ID'],
'CODE' => $propInfo['CODE'],
'NAME' => $propInfo['NAME'],
'SORT' => $propInfo['SORT'],
'PROPERTY_TYPE' => $propInfo['PROPERTY_TYPE'],
'USER_TYPE' => $propInfo['USER_TYPE'],
'LINK_IBLOCK_ID' => $propInfo['LINK_IBLOCK_ID'],
'USER_TYPE_SETTINGS' => $propInfo['USER_TYPE_SETTINGS'],
'VALUES' => array(),
'SHOW_MODE' => $showMode,
'DEFAULT_VALUES' => array(
'PICT' => false,
'NAME' => '-'
)
);
if ($showMode == 'PICT')
{
if (isset($defaultFields['PICT']))
$treeProp['DEFAULT_VALUES']['PICT'] = $defaultFields['PICT'];
}
if (isset($defaultFields['NAME']))
{
$treeProp['DEFAULT_VALUES']['NAME'] = $defaultFields['NAME'];
}
$result[$treeProp['CODE']] = $treeProp;
}
return $result;
}