- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock_element.php
- Класс: _CIBElement
- Вызов: _CIBElement::GetProperties
function GetProperties($arOrder = false, $arFilter = array())
{
if($arOrder === false)
$arOrder = array("sort"=>"asc","id"=>"asc","enum_sort"=>"asc","value_id"=>"asc");
if (empty($arFilter) && is_array($this->props))
{
$arAllProps = array();
foreach($this->props as $arProp)
{
if(trim($arProp["CODE"]) <> '')
$PIND = $arProp["CODE"];
else
$PIND = $arProp["ID"];
$arProp['VALUE'] = $this->fields['PROPERTY_'.$arProp['ID']];
$arProp['DESCRIPTION'] = $this->fields['DESCRIPTION_' . $arProp['ID']] ?? '';
if($arProp["MULTIPLE"]=="N")
{
if($arProp["PROPERTY_TYPE"]=="L")
{
$arProp["VALUE_ENUM_ID"] = $val = $arProp["VALUE"];
$arEnum = CIBlockPropertyEnum::GetByID($val);
if($arEnum!==false)
{
$arProp["~VALUE"] = $arEnum["VALUE"];
if(
is_array($arProp["VALUE"])
|| (is_string($arProp["VALUE"]) &&preg_match("/[;&<>"]/", $arProp["VALUE"]))
)
{
$arProp["VALUE"] = htmlspecialcharsEx($arEnum["VALUE"]);
}
else
{
$arProp["VALUE"] = $arEnum["VALUE"];
}
$arProp["VALUE_ENUM"] = $arProp["VALUE"];
$arProp["VALUE_XML_ID"] = htmlspecialcharsEx((string)$arEnum["XML_ID"]);
$arProp["VALUE_SORT"] = $arEnum["SORT"];
}
else
{
$arProp["~VALUE"] = "";
$arProp["VALUE"] = "";
}
}
elseif(is_array($arProp["VALUE"]) || mb_strlen($arProp["VALUE"]))
{
if ($arProp['PROPERTY_TYPE'] == 'N')
{
$arProp['VALUE'] = htmlspecialcharsEx(CIBlock::NumberFormat($arProp['VALUE']));
}
$arProp['~VALUE'] = $this->fields['~PROPERTY_'.$arProp['ID']];
$arProp['~DESCRIPTION'] = $this->fields['~DESCRIPTION_'.$arProp['ID']] ?? '';
}
else
{
$arProp['~VALUE'] = '';
$arProp['VALUE'] = '';
$arProp['~DESCRIPTION'] = '';
$arProp['DESCRIPTION'] = '';
}
}
else
{
$arList = $arProp["VALUE"];
$arListTilda = $this->fields["~PROPERTY_".$arProp["ID"]];
if($arProp["PROPERTY_TYPE"]=="L")
{
$arProp["~VALUE"] = $arProp["VALUE"] = $arProp["VALUE_ENUM_ID"] = false;
$arProp["VALUE_XML_ID"] = false;
foreach($arList as $key=>$val)
{
if($val <> '')
{
$arEnum = CIBlockPropertyEnum::GetByID($key);
if($arEnum!==false)
{
$xml_id = htmlspecialcharsEx($arEnum["XML_ID"]);
$sort = $arEnum["SORT"];
}
else
{
$xml_id = false;
$sort = false;
}
if(is_array($arProp["VALUE"]))
{
$arProp["VALUE_ENUM_ID"][] = $key;
$arProp["~VALUE"][] = $val;
if(is_array($val) || preg_match("/[;&<>"]/", $val))
$arProp["VALUE"][] = htmlspecialcharsEx($val);
else
$arProp["VALUE"][] = $val;
$arProp["VALUE_XML_ID"][] = $xml_id;
$arProp["VALUE_SORT"][] = $sort;
}
else
{
$arProp["VALUE_ENUM_ID"] = array($key);
$arProp["~VALUE"] = array($val);
if(is_array($val) || preg_match("/[;&<>"]/", $val))
$arProp["VALUE"] = array(htmlspecialcharsEx($val));
else
$arProp["VALUE"] = array($val);
$arProp["VALUE_XML_ID"] = array($xml_id);
$arProp["VALUE_SORT"] = array($sort);
}
}
}
$arProp["VALUE_ENUM"] = $arProp["VALUE"];
}
else
{
$arDesc = $arProp['DESCRIPTION'];
$arDescTilda = $this->fields['~DESCRIPTION_' . $arProp['ID']] ?? '';
$arProp['~VALUE'] = false;
$arProp['VALUE'] = false;
$arProp['~DESCRIPTION'] = false;
$arProp['DESCRIPTION'] = false;
foreach($arList as $key=>$val)
{
if(is_array($val) || $val <> '')
{
if(is_array($arProp["VALUE"]))
{
$arProp["~VALUE"][] = $arListTilda[$key];
if($arProp["PROPERTY_TYPE"]=="N")
$val = htmlspecialcharsEx(CIBlock::NumberFormat($val));
$arProp["VALUE"][] = $val;
$arProp["~DESCRIPTION"][] = $arDescTilda[$key];
$arProp["DESCRIPTION"][] = $arDesc[$key];
}
else
{
$arProp["~VALUE"] = array($arListTilda[$key]);
if($arProp["PROPERTY_TYPE"]=="N")
$val = htmlspecialcharsEx(CIBlock::NumberFormat($val));
$arProp["VALUE"] = array($val);
$arProp["~DESCRIPTION"] = array($arDescTilda[$key]);
$arProp["DESCRIPTION"] = array($arDesc[$key]);
}
}
}
}
}
$arAllProps[$PIND]=$arProp;
}
return $arAllProps;
}
if(array_key_exists("ID", $arFilter) && is_string($arFilter['ID']))
{
if (!is_numeric(mb_substr($arFilter["ID"], 0, 1)))
{
$arFilter["CODE"] = $arFilter["ID"];
unset($arFilter["ID"]);
}
}
if(!array_key_exists("ACTIVE", $arFilter))
$arFilter["ACTIVE"]="Y";
$props = CIBlockElement::GetProperty($this->fields["IBLOCK_ID"], $this->fields["ID"], $arOrder, $arFilter);
$arAllProps = Array();
while($arProp = $props->Fetch())
{
if(trim($arProp["CODE"]) <> '')
$PIND = $arProp["CODE"];
else
$PIND = $arProp["ID"];
if($arProp["PROPERTY_TYPE"]=="L")
{
$arProp["VALUE_ENUM_ID"] = $arProp["VALUE"];
$arProp["VALUE"] = $arProp["VALUE_ENUM"];
}
if(is_array($arProp["VALUE"]) || ($arProp["VALUE"] <> ''))
{
$arProp["~VALUE"] = $arProp["VALUE"];
if(is_array($arProp["VALUE"]) || preg_match("/[;&<>"]/", $arProp["VALUE"]))
$arProp["VALUE"] = htmlspecialcharsEx($arProp["VALUE"]);
$arProp["~DESCRIPTION"] = $arProp["DESCRIPTION"];
if ($arProp["DESCRIPTION"] !== null && preg_match("/[;&<>"]/", $arProp["DESCRIPTION"]))
{
$arProp["DESCRIPTION"] = htmlspecialcharsEx($arProp["DESCRIPTION"]);
}
}
else
{
$arProp['~VALUE'] = '';
$arProp['VALUE'] = '';
$arProp['~DESCRIPTION'] = '';
$arProp['DESCRIPTION'] = '';
}
if($arProp["MULTIPLE"]=="Y")
{
if (isset($arAllProps[$PIND]))
{
if ($arAllProps[$PIND]['ID'] != $arProp['ID'])
unset($arAllProps[$PIND]);
}
if (isset($arAllProps[$PIND]))
{
$arTemp = &$arAllProps[$PIND];
if($arProp["VALUE"]!=="")
{
if(is_array($arTemp["VALUE"]))
{
$arTemp["VALUE"][] = $arProp["VALUE"];
$arTemp["~VALUE"][] = $arProp["~VALUE"];
$arTemp["DESCRIPTION"][] = $arProp["DESCRIPTION"];
$arTemp["~DESCRIPTION"][] = $arProp["~DESCRIPTION"];
$arTemp["PROPERTY_VALUE_ID"][] = $arProp["PROPERTY_VALUE_ID"];
if($arProp["PROPERTY_TYPE"]=="L")
{
$arTemp["VALUE_ENUM_ID"][] = $arProp["VALUE_ENUM_ID"];
$arTemp["VALUE_ENUM"][] = $arProp["VALUE_ENUM"];
$arTemp["VALUE_XML_ID"][] = $arProp["VALUE_XML_ID"];
$arTemp["VALUE_SORT"][] = $arProp["VALUE_SORT"];
}
}
else
{
$arTemp["VALUE"] = array($arProp["VALUE"]);
$arTemp["~VALUE"] = array($arProp["~VALUE"]);
$arTemp["DESCRIPTION"] = array($arProp["DESCRIPTION"]);
$arTemp["~DESCRIPTION"] = array($arProp["~DESCRIPTION"]);
$arTemp["PROPERTY_VALUE_ID"] = array($arProp["PROPERTY_VALUE_ID"]);
if($arProp["PROPERTY_TYPE"]=="L")
{
$arTemp["VALUE_ENUM_ID"] = array($arProp["VALUE_ENUM_ID"]);
$arTemp["VALUE_ENUM"] = array($arProp["VALUE_ENUM"]);
$arTemp["VALUE_XML_ID"] = array($arProp["VALUE_XML_ID"]);
$arTemp["VALUE_SORT"] = array($arProp["VALUE_SORT"]);
}
}
}
}
else
{
$arProp["~NAME"] = $arProp["NAME"];
if(preg_match("/[;&<>"]/", $arProp["NAME"]))
$arProp["NAME"] = htmlspecialcharsEx($arProp["NAME"]);
$arProp["~DEFAULT_VALUE"] = $arProp["DEFAULT_VALUE"];
if ($arProp['DEFAULT_VALUE'] !== null)
{
if (is_array($arProp['DEFAULT_VALUE']) || preg_match("/[;&<>"]/", $arProp['DEFAULT_VALUE']))
{
$arProp['DEFAULT_VALUE'] = htmlspecialcharsEx($arProp['DEFAULT_VALUE']);
}
}
if($arProp["VALUE"]!=="")
{
$arProp["VALUE"] = array($arProp["VALUE"]);
$arProp["~VALUE"] = array($arProp["~VALUE"]);
$arProp["DESCRIPTION"] = array($arProp["DESCRIPTION"]);
$arProp["~DESCRIPTION"] = array($arProp["~DESCRIPTION"]);
$arProp["PROPERTY_VALUE_ID"] = array($arProp["PROPERTY_VALUE_ID"]);
if($arProp["PROPERTY_TYPE"]=="L")
{
$arProp["VALUE_ENUM_ID"] = array($arProp["VALUE_ENUM_ID"]);
$arProp["VALUE_ENUM"] = array($arProp["VALUE_ENUM"]);
$arProp["VALUE_XML_ID"] = array($arProp["VALUE_XML_ID"]);
$arProp["VALUE_SORT"] = array($arProp["VALUE_SORT"]);
}
}
else
{
$arProp["VALUE"] = false;
$arProp["~VALUE"] = false;
$arProp["DESCRIPTION"] = false;
$arProp["~DESCRIPTION"] = false;
$arProp["PROPERTY_VALUE_ID"] = false;
if($arProp["PROPERTY_TYPE"]=="L")
{
$arProp["VALUE_ENUM_ID"] = false;
$arProp["VALUE_ENUM"] = false;
$arProp["VALUE_XML_ID"] = false;
$arProp["VALUE_SORT"] = false;
}
}
$arAllProps[$PIND] = $arProp;
}
}
else
{
$arProp["~NAME"] = $arProp["NAME"];
if(preg_match("/[;&<>"]/", $arProp["NAME"]))
$arProp["NAME"] = htmlspecialcharsEx($arProp["NAME"]);
$arProp["~DEFAULT_VALUE"] = $arProp["DEFAULT_VALUE"];
if ($arProp['DEFAULT_VALUE'] !== null)
{
if (is_array($arProp['DEFAULT_VALUE']) || preg_match("/[;&<>"]/", $arProp['DEFAULT_VALUE']))
{
$arProp['DEFAULT_VALUE'] = htmlspecialcharsEx($arProp['DEFAULT_VALUE']);
}
}
$arAllProps[$PIND] = $arProp;
}
}
return $arAllProps;
}