• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_messenger.php
  • Класс: CIMMessenger
  • Вызов: CIMMessenger::GetV2TemplateJS
static function GetV2TemplateJS($arResult): string
{
	global $USER;

	$counters = (new BitrixImV2MessageCounterService())->get();
	$recentList = BitrixImRecent::getList(null, [
		'SKIP_NOTIFICATION' => 'Y',
		'SKIP_OPENLINES' => 'Y',
		'JSON' => 'Y',
		'GET_ORIGINAL_TEXT' => 'Y',
		//'SHORT_INFO' => 'Y',
	]);

	$isDesktop = $arResult['DESKTOP'] === true;

	$permissionManager = new BitrixImV2ChatPermission(true);
	$permissions = [
		'byChatType' => $permissionManager->getByChatTypes(),
		'actionGroups' => $permissionManager->getActionGroupDefinitions(),
		'actionGroupsDefaults' => $permissionManager->getDefaultPermissionForGroupActions()
	];
	$marketApps = (new BitrixImV2MarketplaceApplication())->toRestFormat();
	$currentUser =  CIMContactList::GetUserData([
		'ID' => $USER->GetID(),
		'PHONES' => 'Y',
		'SHOW_ONLINE' => 'N',
		'EXTRA_FIELDS' => 'Y',
		'DATE_ATOM' => 'Y'
	])['users'][$USER->GetID()];
	$currentUser['isAdmin'] = self::IsAdmin();
	$loggerConfig = BitrixImSettings::getLoggerConfig();
	$settings = (new BitrixImV2SettingsUserConfiguration($USER->GetID()))->getGeneralSettings();
	$sessionTime = (new BitrixImV2UpdateState())->getInterval();
	$promoType = $isDesktop ? BitrixImPromotion::DEVICE_TYPE_DESKTOP : BitrixImPromotion::DEVICE_TYPE_BROWSER;
	$promoList = BitrixImPromotion::getActive($promoType);

	$applicationName = $isDesktop ? 'messenger' : 'quickAccess';

	return "
		BX.ready(function() {
			BX.Messenger.v2.Application.Launch('" . $applicationName . "', {
				node: '#bx-im-external-recent-list',
				preloadedList: " . BitrixMainWebJson::encode($recentList) . ",
				permissions: " . BitrixMainWebJson::encode($permissions) . ",
				marketApps: " . BitrixMainWebJson::encode($marketApps) . ",
				currentUser: " . BitrixMainWebJson::encode($currentUser) . ",
				loggerConfig: " . BitrixMainWebJson::encode($loggerConfig) . ",
				counters: " . BitrixMainWebJson::encode($counters) . ",
				settings: " . BitrixMainWebJson::encode($settings) . ",
				promoList: " . BitrixMainWebJson::encode($promoList) . ",
				phoneSettings: " . BitrixMainWebJson::encode(self::getPhoneSettings()) . ",
				sessionTime: " . BitrixMainWebJson::encode($sessionTime) . ",
			}).then((application) => {
				" . ($isDesktop ? "application.initComponent('body')" : '') . "
			});
		});
	";
}