• Модуль: fileman
  • Путь к файлу: ~/bitrix/modules/fileman/classes/general/medialib.php
  • Класс: CMedialib
  • Вызов: CMedialib::GetCollectionTree
static function GetCollectionTree($Params = array())
{
	$arColTree = array();
	$arColTemp = array();
	$Collections = array();
	$arCol = ($Params['menu'] ?? null) ? CMedialibCollection::GetList(array('arFilter' => array('ACTIVE' => 'Y', 'PARENT_ID' => 0))) : CMedialibCollection::GetList(array('arFilter' => array('ACTIVE' => 'Y')));
	$iter = 0;

	for ($i = 0, $l = count($arCol); $i < $l; $i++)
	{
		if (isset($Params['CheckAccessFunk']) && !call_user_func($Params['CheckAccessFunk'], $arCol[$i]['ID']))
			continue;

		if (!CMedialib::_buildCollection($arCol[$i], $i, $arColTree, $Collections, $Params))
			$arColTemp[] = array($arCol[$i], $i);
	}

	while(count($arColTemp) > 0 && $iter < 50)
	{
		$newAr = array();
		for ($i = 0, $l = count($arColTemp); $i < $l; $i++)
		{
			if (isset($Params['CheckAccessFunk']) && !call_user_func($Params['CheckAccessFunk'], $arCol[$i]['ID']))
				continue;

			if (!CMedialib::_buildCollection($arColTemp[$i][0], $arColTemp[$i][1], $arColTree, $Collections, $Params))
				$newAr[] = $arColTemp[$i];
		}
		$arColTemp = $newAr;
		$iter++;
	}

	if (($Params['checkByType'] ?? null) && $Params['typeId'] > 0)
	{
		$arType = CMedialib::GetTypeById($Params['typeId']);
		if ($arType)
		{
			foreach ($Collections as $id => $col)
			{
				// Del collection escription if it has another type
				if (!CMedialib::CompareTypesEx($Collections[$id]['ML_TYPE'], $arType))
					unset($Collections[$id]);
			}
		}
	}

	return array('arColTree' => $arColTree, 'Collections' => $Collections);
}