static function getPropsParams($iblockId, array $visibleColumns = array(), array $iblockPropsUsed = array())
{
$arRes = array();
$bUseHLIblock = BitrixMainLoader::includeModule('highloadblock');
$filter = array(
'=IBLOCK_ID' => intval($iblockId),
'=ACTIVE' => 'Y'
);
if(!empty($iblockPropsUsed))
{
$filter['ID'] = array_keys($iblockPropsUsed);
}
if(!empty($visibleColumns))
{
$iBlockProps = array();
$iBlockPropsInt = array();
foreach ($visibleColumns as $id => $name)
{
if (mb_substr($id, 0, 9) == "PROPERTY_")
{
$iblockPropCode = mb_substr($id, 9);
if($iblockPropCode <> '')
{
$iBlockProps[] = $iblockPropCode;
if(intval($iblockPropCode) > 0)
$iBlockPropsInt[] = intval($iblockPropCode);
}
}
}
if(!empty($iBlockProps) || !empty($iBlockPropsInt))
{
$codes = array('LOGIC' => 'OR');
if(!empty($iBlockProps))
$codes['=CODE'] = $iBlockProps;
if(!empty($iBlockPropsInt))
$codes['=ID'] = $iBlockPropsInt;
$filter[] = $codes;
}
}
$rsProps = BitrixIblockPropertyTable::getList(array(
'filter' => $filter,
'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
));
while ($arProp = $rsProps->fetch())
{
if(!empty($iblockPropsUsed) && !array_key_exists($arProp['ID'], $iblockPropsUsed))
continue;
if (
$arProp['PROPERTY_TYPE'] == 'L'
|| $arProp['PROPERTY_TYPE'] == 'E'
|| ($arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory')
)
{
if ($arProp['XML_ID'] == 'CML2_LINK')
continue;
$arValues = array();
if ($arProp['PROPERTY_TYPE'] == 'L')
{
$arValues = array();
$rsPropEnums = CIBlockProperty::getPropertyEnum($arProp['ID']);
while ($arEnum = $rsPropEnums->fetch())
{
$arValues[$arEnum['VALUE']] = array(
'ID' => $arEnum['ID'],
'NAME' => $arEnum['VALUE'],
'PICT' => false
);
}
}
elseif ($arProp['PROPERTY_TYPE'] == 'E')
{
$eFilter = array('IBLOCK_ID' => $arProp['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y');
if(!empty($iblockPropsUsed[$arProp['ID']]))
$eFilter['ID'] = $iblockPropsUsed[$arProp['ID']];
else
continue;
$rsPropEnums = CIBlockElement::getList(
array('SORT' => 'ASC'),
$eFilter,
false,
false,
array('ID', 'NAME', 'PREVIEW_PICTURE', 'SORT')
);
while ($arEnum = $rsPropEnums->Fetch())
{
$arEnum['PREVIEW_PICTURE'] = CFile::getFileArray($arEnum['PREVIEW_PICTURE']);
if (!is_array($arEnum['PREVIEW_PICTURE']))
{
$arEnum['PREVIEW_PICTURE'] = false;
}
if ($arEnum['PREVIEW_PICTURE'] !== false)
{
$productImg = CFile::resizeImageGet($arEnum['PREVIEW_PICTURE'], array('width'=>80, 'height'=>80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false);
$arEnum['PREVIEW_PICTURE'] = $productImg['src'];
}
$arValues[$arEnum['ID']] = array(
'ID' => $arEnum['ID'],
'NAME' => $arEnum['NAME'],
'SORT' => $arEnum['SORT'],
'PICT' => $arEnum['PREVIEW_PICTURE']
);
}
}
elseif ($arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory')
{
if ($bUseHLIblock)
{
if(!is_array($arProp["USER_TYPE_SETTINGS"]))
$arProp["USER_TYPE_SETTINGS"] = unserialize($arProp["USER_TYPE_SETTINGS"], ['allowed_classes' => false]);
$hlblock = HLHighloadBlockTable::getList(array("filter" => array("TABLE_NAME" => $arProp["USER_TYPE_SETTINGS"]["TABLE_NAME"])))->fetch();
if ($hlblock)
{
$entity = HLHighloadBlockTable::compileEntity($hlblock);
$entityDataClass = $entity->getDataClass();
$rsData = $entityDataClass::getList();
while ($arData = $rsData->fetch())
{
$arValues[$arData['UF_XML_ID']] = array(
'ID' => $arData['UF_XML_ID'],
'NAME' => $arData['UF_NAME'],
'SORT' => $arData['UF_SORT'],
'FILE' => $arData['UF_FILE'],
'PICT' => '',
'XML_ID' => $arData['UF_XML_ID']
);
}
}
}
}
if (
isset($iblockPropsUsed[$arProp['ID']])
&& is_array($iblockPropsUsed[$arProp['ID']])
&& !empty($arValues)
&& is_array($arValues)
)
{
//if property value deleted or inactive
$notFound = array_diff($iblockPropsUsed[$arProp['ID']], array_keys($arValues));
//if Empty values exist
if((is_array($iblockPropsUsed[$arProp['ID']]) && in_array("-", $iblockPropsUsed[$arProp['ID']])) || (is_array($notFound) && !empty($notFound)))
{
$arValues["-"] = array(
"ID" => "-",
"NAME" => "-"
);
}
$arRes[$arProp['ID']] = array(
'ID' => $arProp['ID'],
'CODE' => $arProp['CODE'],
'NAME' => $arProp['NAME'],
'TYPE' => $arProp['PROPERTY_TYPE'],
'ORDER' => array_keys($arValues),
'VALUES' => $arValues,
'SORT' => $arProp['SORT']
);
}
}
if (
$arProp['PROPERTY_TYPE'] == "S"
&& $arProp['USER_TYPE'] == 'directory'
&& isset($arRes[$arProp['ID']]['VALUES'])
&& is_array($arRes[$arProp['ID']]['VALUES'])
)
{
foreach($arRes[$arProp['ID']]['VALUES'] as $id => $value)
{
if (isset($value["FILE"]))
{
$arTmpFile = CFile::getFileArray($value["FILE"]);
$tmpImg = CFile::resizeImageGet(
$arTmpFile,
[
'width' => 20,
'height' => 20,
],
BX_RESIZE_IMAGE_PROPORTIONAL,
false,
false
);
$arRes[$arProp['ID']]['VALUES'][$id]['PICT'] = $tmpImg['src'];
}
}
}
}
return $arRes;
}