public static function GetCollectionTree($Params = array()) { $arColTree = array(); $arColTemp = array(); $Collections = array(); $arCol = $Params['menu'] ? 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'] && $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); }