- Модуль: market
- Путь к файлу: ~/bitrix/modules/market/lib/Menu.php
- Класс: BitrixMarketMenu
- Вызов: Menu::getInstalledApps
static function getInstalledApps(int $filterAppId = 0): array
{
global $USER;
$apps = [];
$userGroupCodes = $USER->GetAccessCodes();
$filter = [
'=ACTIVE' => AppTable::ACTIVE,
];
if ($filterAppId > 0) {
$filter['=ID'] = $filterAppId;
}
$dbApps = AppTable::getList([
'order' => [
'ID' => 'ASC'
],
'filter' => $filter,
'select' => [
'ID',
'CODE',
'CLIENT_ID',
'STATUS',
'ACTIVE',
'ACCESS',
'MENU_NAME' => 'LANG.MENU_NAME',
'MENU_NAME_DEFAULT' => 'LANG_DEFAULT.MENU_NAME',
'MENU_NAME_LICENSE' => 'LANG_LICENSE.MENU_NAME',
],
]);
foreach ($dbApps->fetchCollection() as $app) {
$appInfo = [
'ID' => $app->getId(),
'CODE' => $app->getCode(),
'ACTIVE' => $app->getActive(),
'CLIENT_ID' => $app->getClientId(),
'ACCESS' => $app->getAccess(),
'MENU_NAME' => !is_null($app->getLang()) ? $app->getLang()->getMenuName() : '',
'MENU_NAME_DEFAULT' => !is_null($app->getLangDefault()) ? $app->getLangDefault()->getMenuName() : '',
'MENU_NAME_LICENSE' => !is_null($app->getLangLicense()) ? $app->getLangLicense()->getMenuName() : ''
];
if($appInfo['CODE'] === CRestUtil::BITRIX_1C_APP_CODE) {
continue;
}
$lang = in_array(LANGUAGE_ID, ['ru', 'en', 'de']) ? LANGUAGE_ID : Loc::getDefaultLang(LANGUAGE_ID);
if ($appInfo['MENU_NAME'] === '' && $appInfo['MENU_NAME_DEFAULT'] === '' && $appInfo['MENU_NAME_LICENSE'] === '') {
$app->fillLangAll();
if (!is_null($app->getLangAll())) {
$langList = [];
foreach ($app->getLangAll() as $appLang) {
if ($appLang->getMenuName() !== '') {
$langList[$appLang->getLanguageId()] = $appLang->getMenuName();
}
}
if (isset($langList[$lang]) && $langList[$lang]) {
$appInfo['MENU_NAME'] = $langList[$lang];
} elseif (isset($langList['en']) && $langList['en']) {
$appInfo['MENU_NAME'] = $langList['en'];
} elseif (count($langList) > 0) {
$appInfo['MENU_NAME'] = reset($langList);
}
}
}
if($appInfo['MENU_NAME'] <> '' || $appInfo['MENU_NAME_DEFAULT'] <> '' || $appInfo['MENU_NAME_LICENSE'] <> '') {
$appRightAvailable = false;
if(CRestUtil::isAdmin()){
$appRightAvailable = true;
} elseif(!empty($appInfo['ACCESS'])) {
$rights = explode(',', $appInfo['ACCESS']);
foreach($rights as $rightID)
{
if(in_array($rightID, $userGroupCodes))
{
$appRightAvailable = true;
break;
}
}
} else {
$appRightAvailable = true;
}
if($appRightAvailable) {
$appName = $appInfo['MENU_NAME'];
if($appName == '') {
$appName = $appInfo['MENU_NAME_DEFAULT'];
}
if($appName == '') {
$appName = $appInfo['MENU_NAME_LICENSE'];
}
$apps[] = Menu::getItem(
htmlspecialcharsbx($appName),
CRestUtil::getApplicationPage($appInfo['ID'], 'ID', $appInfo),
);
}
}
}
return $apps;
}