• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/orderbasket.php
  • Класс: BitrixSaleHelpersAdminBlocksOrderBasket
  • Вызов: OrderBasket::getPropsParams
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;
}