static function GetArray($IBLOCK_ID, $SECTION_ID = 0, $bNewSection = false)
{
global $DB;
$IBLOCK_ID = intval($IBLOCK_ID);
$SECTION_ID = intval($SECTION_ID);
$result = array();
$rs = $DB->Query("
SELECT
B.SECTION_PROPERTY,
BP.ID PROPERTY_ID,
BSP.SECTION_ID LINK_ID,
BSP.SMART_FILTER,
BSP.DISPLAY_TYPE,
BSP.DISPLAY_EXPANDED,
BSP.FILTER_HINT,
BP.SORT,
0 LEFT_MARGIN,
B.NAME LINK_TITLE,
BP.PROPERTY_TYPE,
BP.USER_TYPE,
BP.ACTIVE
FROM
b_iblock B
INNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID
LEFT JOIN b_iblock_section_property BSP ON BSP.SECTION_ID = 0 AND BSP.PROPERTY_ID = BP.ID
WHERE
B.ID = ".$IBLOCK_ID."
ORDER BY
BP.SORT ASC, BP.ID ASC
");
while ($ar = $rs->Fetch())
{
$displayTypesAvailable = self::getDisplayTypes($ar["PROPERTY_TYPE"], $ar["USER_TYPE"]);
if (isset($displayTypesAvailable[$ar["DISPLAY_TYPE"]]))
$DISPLAY_TYPE = $ar["DISPLAY_TYPE"];
else
$DISPLAY_TYPE = key($displayTypesAvailable);
if ($ar["SECTION_PROPERTY"] === "Y")
{
if($ar["LINK_ID"] <> '')
{
$result[$ar["PROPERTY_ID"]] = array(
"PROPERTY_ID" => $ar["PROPERTY_ID"],
"SMART_FILTER" => $ar["SMART_FILTER"],
"DISPLAY_TYPE" => $DISPLAY_TYPE,
"DISPLAY_EXPANDED" => $ar["DISPLAY_EXPANDED"],
"FILTER_HINT" => $ar["FILTER_HINT"],
"INHERITED" => $SECTION_ID == 0 && !$bNewSection? "N" : "Y",
"INHERITED_FROM" => 0,
"SORT" => $ar["SORT"],
"LEFT_MARGIN" => $ar["LEFT_MARGIN"],
"LINK_TITLE" => $ar["LINK_TITLE"],
"PROPERTY_TYPE" => $ar["PROPERTY_TYPE"],
"USER_TYPE" => $ar["USER_TYPE"],
"ACTIVE" => $ar["ACTIVE"],
);
}
}
else
{
$result[$ar["PROPERTY_ID"]] = array(
"PROPERTY_ID" => $ar["PROPERTY_ID"],
"SMART_FILTER" => "N",
"DISPLAY_TYPE" => $DISPLAY_TYPE,
"DISPLAY_EXPANDED" => $ar["DISPLAY_EXPANDED"],
"FILTER_HINT" => $ar["FILTER_HINT"],
"INHERITED" => $SECTION_ID == 0 && !$bNewSection? "N" : "Y",
"INHERITED_FROM" => 0,
"SORT" => $ar["SORT"],
"LEFT_MARGIN" => $ar["LEFT_MARGIN"],
"LINK_TITLE" => $ar["LINK_TITLE"],
"PROPERTY_TYPE" => $ar["PROPERTY_TYPE"],
"USER_TYPE" => $ar["USER_TYPE"],
"ACTIVE" => $ar["ACTIVE"],
);
}
}
if ($SECTION_ID > 0)
{
$rs = $DB->Query($s = "
SELECT
B.SECTION_PROPERTY,
BP.ID PROPERTY_ID,
BSP.SECTION_ID LINK_ID,
BSP.SMART_FILTER,
BSP.DISPLAY_TYPE,
BSP.DISPLAY_EXPANDED,
BSP.FILTER_HINT,
BP.SORT,
BS.LEFT_MARGIN,
BS.NAME LINK_TITLE,
BP.PROPERTY_TYPE,
BP.USER_TYPE,
BP.ACTIVE
FROM
b_iblock B
INNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID
INNER JOIN b_iblock_section M ON M.ID = ".$SECTION_ID."
INNER JOIN b_iblock_section BS ON BS.IBLOCK_ID = M.IBLOCK_ID
AND M.LEFT_MARGIN >= BS.LEFT_MARGIN
AND M.RIGHT_MARGIN <= BS.RIGHT_MARGIN
INNER JOIN b_iblock_section_property BSP ON BSP.IBLOCK_ID = BS.IBLOCK_ID AND BSP.SECTION_ID = BS.ID AND BSP.PROPERTY_ID = BP.ID
WHERE
B.ID = ".$IBLOCK_ID."
ORDER BY
BP.SORT ASC, BP.ID ASC, BS.LEFT_MARGIN ASC
");
while ($ar = $rs->Fetch())
{
$displayTypesAvailable = self::getDisplayTypes($ar["PROPERTY_TYPE"], $ar["USER_TYPE"]);
if (isset($displayTypesAvailable[$ar["DISPLAY_TYPE"]]))
$DISPLAY_TYPE = $ar["DISPLAY_TYPE"];
else
$DISPLAY_TYPE = key($displayTypesAvailable);
$result[$ar["PROPERTY_ID"]] = array(
"PROPERTY_ID" => $ar["PROPERTY_ID"],
"SMART_FILTER" => $ar["SMART_FILTER"],
"DISPLAY_TYPE" => $DISPLAY_TYPE,
"DISPLAY_EXPANDED" => $ar["DISPLAY_EXPANDED"],
"FILTER_HINT" => $ar["FILTER_HINT"],
"INHERITED" => $SECTION_ID == $ar["LINK_ID"] ? "N" : "Y",
"INHERITED_FROM" => $ar["LINK_ID"],
"SORT" => $ar["SORT"],
"LEFT_MARGIN" => $ar["LEFT_MARGIN"],
"LINK_TITLE" => $ar["LINK_TITLE"],
"PROPERTY_TYPE" => $ar["PROPERTY_TYPE"],
"USER_TYPE" => $ar["USER_TYPE"],
"ACTIVE" => $ar["ACTIVE"],
);
}
}
if ($result)
{
BitrixMainTypeCollection::sortByColumn(
$result,
array(
"SORT" => SORT_ASC,
"PROPERTY_ID" => SORT_ASC,
),
'',
null,
true
);
}
return $result;
}