• Модуль: 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;
}