static function GetElementGroups($ID, $bElementOnly = false, $arSelect = array())
{
global $DB;
$arFields = array(
"ID" => "BS.ID",
"TIMESTAMP_X" => "BS.TIMESTAMP_X",
"MODIFIED_BY" => "BS.MODIFIED_BY",
"DATE_CREATE" => "BS.DATE_CREATE",
"CREATED_BY" => "BS.CREATED_BY",
"IBLOCK_ID" => "BS.IBLOCK_ID",
"IBLOCK_SECTION_ID" => "BS.IBLOCK_SECTION_ID",
"ACTIVE" => "BS.ACTIVE",
"GLOBAL_ACTIVE" => "BS.GLOBAL_ACTIVE",
"SORT" => "BS.SORT",
"NAME" => "BS.NAME",
"PICTURE" => "BS.PICTURE",
"LEFT_MARGIN" => "BS.LEFT_MARGIN",
"RIGHT_MARGIN" => "BS.RIGHT_MARGIN",
"DEPTH_LEVEL" => "BS.DEPTH_LEVEL",
"DESCRIPTION" => "BS.DESCRIPTION",
"DESCRIPTION_TYPE" => "BS.DESCRIPTION_TYPE",
"SEARCHABLE_CONTENT" => "BS.SEARCHABLE_CONTENT",
"CODE" => "BS.CODE",
"XML_ID" => "BS.XML_ID",
"EXTERNAL_ID" => "BS.XML_ID",
"TMP_ID" => "BS.TMP_ID",
"DETAIL_PICTURE" => "BS.DETAIL_PICTURE",
"SOCNET_GROUP_ID" => "BS.SOCNET_GROUP_ID",
"LIST_PAGE_URL" => "B.LIST_PAGE_URL",
"SECTION_PAGE_URL" => "B.SECTION_PAGE_URL",
"IBLOCK_TYPE_ID" => "B.IBLOCK_TYPE_ID",
"IBLOCK_CODE" => "B.CODE",
"IBLOCK_EXTERNAL_ID" => "B.XML_ID",
"IBLOCK_ELEMENT_ID" => "SE.IBLOCK_ELEMENT_ID",
"ADDITIONAL_PROPERTY_ID" => "SE.ADDITIONAL_PROPERTY_ID",
);
if(is_array($ID))
{
if (!empty($ID))
{
MainTypeCollection::normalizeArrayValuesByInt($ID);
}
$sqlID = !empty($ID) ? $ID : array(0);
}
else
{
$sqlID = array((int)$ID);
}
$arSqlSelect = array();
foreach($arSelect as &$field)
{
$field = mb_strtoupper($field);
if(array_key_exists($field, $arFields))
$arSqlSelect[$field] = $arFields[$field]." AS ".$field;
}
if (isset($field))
unset($field);
if (array_key_exists("DESCRIPTION", $arSqlSelect))
$arSqlSelect["DESCRIPTION_TYPE"] = $arFields["DESCRIPTION_TYPE"]." AS DESCRIPTION_TYPE";
if(array_key_exists("LIST_PAGE_URL", $arSqlSelect) || array_key_exists("SECTION_PAGE_URL", $arSqlSelect))
{
$arSqlSelect["ID"] = $arFields["ID"]." AS ID";
$arSqlSelect["CODE"] = $arFields["CODE"]." AS CODE";
$arSqlSelect["EXTERNAL_ID"] = $arFields["EXTERNAL_ID"]." AS EXTERNAL_ID";
$arSqlSelect["IBLOCK_TYPE_ID"] = $arFields["IBLOCK_TYPE_ID"]." AS IBLOCK_TYPE_ID";
$arSqlSelect["IBLOCK_ID"] = $arFields["IBLOCK_ID"]." AS IBLOCK_ID";
$arSqlSelect["IBLOCK_CODE"] = $arFields["IBLOCK_CODE"]." AS IBLOCK_CODE";
$arSqlSelect["IBLOCK_EXTERNAL_ID"] = $arFields["IBLOCK_EXTERNAL_ID"]." AS IBLOCK_EXTERNAL_ID";
$arSqlSelect["GLOBAL_ACTIVE"] = $arFields["GLOBAL_ACTIVE"]." AS GLOBAL_ACTIVE";
}
if (!empty($arSelect))
{
$strSelect = implode(", ", $arSqlSelect);
}
else
{
$strSelect = "
BS.*
,B.LIST_PAGE_URL
,B.SECTION_PAGE_URL
,B.IBLOCK_TYPE_ID
,B.CODE as IBLOCK_CODE
,B.XML_ID as IBLOCK_EXTERNAL_ID
,BS.XML_ID as EXTERNAL_ID
,SE.IBLOCK_ELEMENT_ID
";
}
$dbr = new CIBlockResult($DB->Query("
SELECT
".$strSelect."
FROM
b_iblock_section_element SE
INNER JOIN b_iblock_section BS ON SE.IBLOCK_SECTION_ID = BS.ID
INNER JOIN b_iblock B ON B.ID = BS.IBLOCK_ID
WHERE
SE.IBLOCK_ELEMENT_ID in (".implode(", ", $sqlID).")
".($bElementOnly?"AND SE.ADDITIONAL_PROPERTY_ID IS NULL ":"")."
"));
return $dbr;
}