- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/group.php
- Класс: CAllGroup
- Вызов: CAllGroup::GetSubordinateGroups
static function GetSubordinateGroups($grId)
{
global $DB, $CACHE_MANAGER;
if (!is_array($grId))
{
$grId = [$grId];
}
Collection::normalizeArrayValuesByInt($grId, false);
$result = array("2");
if (!empty($grId))
{
if (CACHED_b_group_subordinate === false)
{
$z = $DB->Query("SELECT AR_SUBGROUP_ID FROM b_group_subordinate WHERE ID in (".implode(", ", $grId).")");
while ($zr = $z->Fetch())
{
$subordinateGroups = explode(",", $zr['AR_SUBGROUP_ID']);
$result = array_merge($result, $subordinateGroups);
}
}
else
{
if ($CACHE_MANAGER->Read(CACHED_b_group_subordinate, "b_group_subordinate"))
{
$cache = $CACHE_MANAGER->Get("b_group_subordinate");
}
else
{
$cache = array();
$z = $DB->Query("SELECT ID, AR_SUBGROUP_ID FROM b_group_subordinate");
while ($zr = $z->Fetch())
{
$subordinateGroups = explode(",", $zr['AR_SUBGROUP_ID']);
$cache[$zr["ID"]] = $subordinateGroups;
}
$CACHE_MANAGER->Set("b_group_subordinate", $cache);
}
foreach ($cache as $groupId => $subordinateGroups)
{
if (in_array($groupId, $grId))
{
$result = array_merge($result, $subordinateGroups);
}
}
}
}
Collection::normalizeArrayValuesByInt($result, false);
return $result;
}