• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/handlers.php
  • Класс: CIntranetEventHandlers
  • Вызов: CIntranetEventHandlers::onRestAppInstall
static function onRestAppInstall($params)
{
	if (!isset($params['APP_ID']) || !BitrixMainLoader::includeModule('rest'))
	{
		return;
	}

	$text = '';
	$dbRes = BitrixRestAppTable::getList(
		[
			'filter' => [
				'=ID' => $params['APP_ID'],
			],
			'select' => [
				'ID',
				'CODE',
				'CLIENT_ID',
				'MENU_NAME' => 'LANG.MENU_NAME',
				'MENU_NAME_DEFAULT' => 'LANG_DEFAULT.MENU_NAME',
				'MENU_NAME_LICENSE' => 'LANG_LICENSE.MENU_NAME',
			],
		]
	);

	foreach ($dbRes->fetchCollection() as $app)
	{
		$appInfo = [
			'ID' => $app->getId(),
			'CODE' => $app->getCode(),
			'CLIENT_ID' => $app->getClientId(),
			'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)
		{
			return;
		}

		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();
					}
				}

				$defaultLang = BitrixMainLocalizationLoc::getDefaultLang(LANGUAGE_ID);
				if (!empty($langList[LANGUAGE_ID]))
				{
					$text = $langList[LANGUAGE_ID];
				}
				elseif (!empty($langList[$defaultLang]))
				{
					$text = $langList[$defaultLang];
				}
				elseif (!empty($langList['en']))
				{
					$text = $langList['en'];
				}
				elseif (count($langList) > 0)
				{
					$text = reset($langList);
				}
			}
		}
		else
		{
			$text = $appInfo['MENU_NAME'];
			if ($text == '')
			{
				$text = $appInfo['MENU_NAME_DEFAULT'];
			}
			if ($text == '')
			{
				$text = $appInfo['MENU_NAME_LICENSE'];
			}
		}

		if ($text === '')
		{
			return;
		}

		$menuItem = array(
			"LINK" => CRestUtil::getApplicationPage($appInfo['ID']),
			"TEXT" => $text,
			"ADDITIONAL_LINKS" => array(
				CRestUtil::getApplicationPage($appInfo['ID'], 'CODE'),
			),
		);
		$menuItem["ID"] = crc32($menuItem["LINK"]);

		$adminOption = COption::GetOptionString("intranet", "left_menu_items_marketplace_".SITE_ID);

		if (!empty($adminOption))
		{
			$itemExists = false;
			$adminOption = unserialize($adminOption, ["allowed_classes" => false]);

			foreach ($adminOption as $key => $item)
			{
				if ($item["ID"] == $menuItem["ID"])
				{
					if ($item["TEXT"] == $menuItem["TEXT"])
					{
						return;
					}
					else
					{
						$itemExists = true;
						$adminOption[$key]["TEXT"] = $menuItem["TEXT"];
						break;
					}
				}
			}
			if (!$itemExists && (!isset($params["IS_NEW_APP"]) || !$params["IS_NEW_APP"]))
			{
				$adminOption[] = $menuItem;
			}
		}
		else
		{
			$adminOption = array($menuItem);
		}

		COption::SetOptionString("intranet", "left_menu_items_marketplace_".SITE_ID, serialize($adminOption), false, SITE_ID);

		if (defined("BX_COMP_MANAGED_CACHE"))
		{
			global $CACHE_MANAGER;
			$CACHE_MANAGER->ClearByTag("bitrix24_left_menu");
		}
	}
}