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

	$ppStatus = 'false';
	$ppServerStatus = 'false';
	$updateStateInterval = 'auto';
	if (CModule::IncludeModule("pull"))
	{
		$ppStatus = CPullOptions::ModuleEnable()? 'true': 'false';
		$ppServerStatus = CPullOptions::GetNginxStatus()? 'true': 'false';

		$updateStateInterval = CPullOptions::GetNginxStatus()? self::GetSessionLifeTime(): 80;
		if ($updateStateInterval > 100)
		{
			if ($updateStateInterval > 3600)
				$updateStateInterval = 3600;

			if (in_array($arTemplate["CONTEXT"], Array("POPUP-FULLSCREEN", "MESSENGER")))
				$updateStateInterval = $updateStateInterval-60;
			else
				$updateStateInterval = intval($updateStateInterval/2)-10;
		}
	}

	$diskStatus = CIMDisk::Enabled();
	$diskExternalLinkStatus = CIMDisk::EnabledExternalLink();

	$phoneCanPerformCalls = false;
	$phoneDeviceActive = false;
	$phoneCanCallUserNumber = false;
	$phoneEnabled = false;
	$chatExtendShowHistory = COption::GetOptionInt('im', 'chat_extend_show_history');
	$contactListLoad = COption::GetOptionInt('im', 'contact_list_load');
	$contactListBirthday = COption::GetOptionString('im', 'contact_list_birthday');
	$isFullTextEnabled = BitrixImModelMessageIndexTable::getEntity()->fullTextIndexEnabled("SEARCH_CONTENT");
	$fullTextMinSizeToken = BitrixMainORMQueryFilterHelper::getMinTokenSize();
	$phoneCanInterceptCall = self::CanInterceptCall();

	if ($arTemplate['INIT'] == 'Y')
	{
		$phoneEnabled = self::CheckPhoneStatus();
		if ($phoneEnabled && CModule::IncludeModule('voximplant'))
		{
			$phoneCanPerformCalls = self::CanUserPerformCalls();
			$phoneDeviceActive = CVoxImplantUser::GetPhoneActive($USER->GetId());
			$phoneCanCallUserNumber = self::CanUserCallUserNumber();
		}
	}

	$counters = BitrixImCounter::get(null, ['JSON' => 'Y']);
	$counters['type']['mail'] = isset($arParams['MAIL_COUNTER']) ? (int)$arParams['MAIL_COUNTER'] : 0;

	$crmPath = Array();
	$olConfig = Array();
	$businessUsers = false;

	if (BitrixMainLoader::includeModule('crm'))
	{
		$crmPath['LEAD'] = BitrixImIntegrationCrmCommon::getLink('LEAD');
		$crmPath['CONTACT'] = BitrixImIntegrationCrmCommon::getLink('CONTACT');
		$crmPath['COMPANY'] = BitrixImIntegrationCrmCommon::getLink('COMPANY');
		$crmPath['DEAL'] = BitrixImIntegrationCrmCommon::getLink('DEAL');
	}

	if (BitrixMainLoader::includeModule('imopenlines'))
	{
		$olConfig['canDeleteMessage'] = str_replace('.', '_', BitrixImopenlinesConnector::getListCanDeleteMessage());
		$olConfig['canDeleteOwnMessage'] = str_replace('.', '_', BitrixImopenlinesConnector::getListCanDeleteOwnMessage());
		$olConfig['canUpdateOwnMessage'] = str_replace('.', '_', BitrixImopenlinesConnector::getListCanUpdateOwnMessage());

		$olConfig['queue'] = Array();
		foreach (BitrixImOpenLinesConfig::getQueueList($USER->GetID()) as $config)
		{
			$olConfig['queue'][] = array_change_key_case($config, CASE_LOWER);
		}

		if (method_exists(BitrixImOpenLinesConfig::class, 'getAllLinesSettings'))
		{
			foreach (BitrixImOpenLinesConfig::getAllLinesSettings(['CONFIRM_CLOSE']) as $config)
			{
				$olConfig['settings'][$config['ID']] = array_change_key_case($config, CASE_LOWER);
			}
		}

		$olConfig['canUseVoteHead'] = ImopenlinesLimit::canUseVoteHead();
		$olConfig['canJoinChatUser'] = ImopenlinesLimit::canJoinChatUser();
		$olConfig['canTransferToLine'] = ImopenlinesLimit::canTransferToLine();
	}

	$bitrix24blocked = false;
	$bitrix24Enabled = false;
	$bitrixPaid = true;
	if (BitrixMainLoader::includeModule('bitrix24'))
	{
		$bitrix24Enabled = true;
		$bitrixPaid = CBitrix24::IsLicensePaid() || CBitrix24::IsNfrLicense();
		if (CIMMessenger::IsBitrix24UserRestricted())
		{
			$bitrix24blocked = BitrixBitrix24LimitsUser::getUserRestrictedHelperCode();
		}
	}

	$userBirthday = BitrixImIntegrationIntranetUser::getBirthdayForToday();

	$pathToIm = isset($arTemplate['PATH_TO_IM']) ? $arTemplate['PATH_TO_IM'] : '';
	$pathToCall = isset($arTemplate['PATH_TO_CALL']) ? $arTemplate['PATH_TO_CALL'] : '';
	$pathToFile = isset($arTemplate['PATH_TO_FILE']) ? $arTemplate['PATH_TO_FILE'] : '';
	$pathToLf = isset($arTemplate['PATH_TO_LF']) ? $arTemplate['PATH_TO_LF'] : '/';
	$pathToDisk = Array(
		'localFile' => CIMDisk::GetLocalDiskFilePath(),
	);

	$recentLastUpdate = (new BitrixMainTypeDateTime())->format(DateTimeInterface::RFC3339);
	$recent = BitrixImRecent::getList(null, [
		'SKIP_NOTIFICATION' => 'Y',
		'SKIP_OPENLINES' => 'Y',
		'JSON' => 'Y',
		'GET_ORIGINAL_TEXT' => 'Y',
		//'SHORT_INFO' => 'Y',
	]);

	$iframeRequest = $_REQUEST['IFRAME'] ?? null;
	$iframeTypeRequest = $_REQUEST['IFRAME_TYPE'] ?? null;
	$imMenuRequest = $_REQUEST['IM_MENU'] ?? null;
	$imSearchRequest = $_REQUEST['IM_SEARCH'] ?? null;
	$imStatusRequest = $_REQUEST['IM_STATUS'] ?? null;
	$imRecentRequest = $_REQUEST['IM_RECENT'] ?? null;
	$imLinesRequest = $_REQUEST['IM_LINES'] ?? null;
	$imV2LayoutRequest = $_REQUEST['IM_V2_LAYOUT'] ?? null;
	if (!isset($_REQUEST['IM_BACKGROUND']))
	{
		$imBackgroundRequest = 'auto';
	}
	else
	{
		$imBackgroundRequest = $_REQUEST['IM_BACKGROUND'] === 'dark'? 'dark': 'light';
	}

	if (is_bool($arTemplate["DESKTOP"]))
	{
		$arTemplate["DESKTOP"] = $arTemplate["DESKTOP"] ? 'true' : 'false';
	}

	$sJS = "
		BX.ready(function() {
			BXIM = new BX.IM(BX('bx-notifier-panel'), {
				'init': ".($arTemplate['INIT'] == 'Y'? 'true': 'false').",
				'context': '".$arTemplate["CONTEXT"]."',
				'design': '".$arTemplate["DESIGN"]."',
				'colors': ".(BitrixImColor::isEnabled()? BitrixImCommon::objectEncode(BitrixImColor::getSafeColorNames()): 'false').",
				'colorsHex': ".BitrixImCommon::objectEncode(BitrixImColor::getSafeColors()).",
				'chatCounters': ".BitrixImCommon::objectEncode($counters, true).",
				'counters': ".(empty($arTemplate['COUNTERS'])? '{}': BitrixImCommon::objectEncode($arTemplate['COUNTERS'])).",
				'ppStatus': ".$ppStatus.",
				'ppServerStatus': ".$ppServerStatus.",
				'updateStateInterval': '".$updateStateInterval."',
				'openChatEnable': ".(CIMMessenger::CheckEnableOpenChat()? 'true': 'false').",
				'xmppStatus': ".(CIMMessenger::CheckXmppStatusOnline()? 'true': 'false').",
				'isAdmin': ".(self::IsAdmin()? 'true': 'false').",
				'canInvite': ".(BitrixImIntegrationIntranetUser::canInvite()? 'true': 'false').",
				'isLinesOperator': 'true',
				'isUtfMode': ".(BitrixMainApplication::getInstance()->isUtfMode()? 'true': 'false').",
				'bitrixNetwork': ".(CIMMessenger::CheckNetwork()? 'true': 'false').",
				'bitrix24': ".($bitrix24Enabled? 'true': 'false').",
				'bitrix24blocked': ".($bitrix24blocked? $bitrix24blocked: 'false').",
				'bitrix24net': ".(IsModuleInstalled('b24network')? 'true': 'false').",
				'bitrixPaid': ".($bitrixPaid? 'true': 'false').",
				'bitrixIntranet': ".(IsModuleInstalled('intranet')? 'true': 'false').",
				'bitrixXmpp': ".(IsModuleInstalled('xmpp')? 'true': 'false').",
				'bitrixMobile': ".(IsModuleInstalled('mobile')? 'true': 'false').",
				'bitrixOpenLines': ".(IsModuleInstalled('imopenlines')? 'true': 'false').",
				'bitrixCrm': ".(IsModuleInstalled('crm')? 'true': 'false').",
				'desktop': ".($arTemplate["DESKTOP"] ?? 'false').",
				'desktopStatus': ".(CIMMessenger::CheckDesktopStatusOnline()? 'true': 'false').",
				'desktopVersion': ".CIMMessenger::GetDesktopVersion().",
				'desktopLinkOpen': ".($arTemplate["DESKTOP_LINK_OPEN"] ?? 'false').",
				'language': '".LANGUAGE_ID."',
				'loggerConfig': ".BitrixImCommon::objectEncode(BitrixImSettings::getLoggerConfig(), true).",
				'broadcastingEnabled': ".BitrixImCommon::objectEncode(BitrixImSettings::isBroadcastingEnabled(), true).",
				'tooltipShowed': ".BitrixImCommon::objectEncode(CUserOptions::GetOption('im', 'tooltipShowed', array())).",
				'limit': ".(empty($arTemplate['LIMIT'])? 'false': BitrixImCommon::objectEncode($arTemplate["LIMIT"])).",
				'promo': ".(empty($arTemplate['PROMO'])? '[]': BitrixImCommon::objectEncode($arTemplate["PROMO"])).",
				'bot': ".(empty($arTemplate['BOT'])? '{}': BitrixImCommon::objectEncode($arTemplate["BOT"])).",
				'textareaIcon': ".(empty($arTemplate['TEXTAREA_ICON'])? '{}': BitrixImCommon::objectEncode($arTemplate["TEXTAREA_ICON"])).",
				'command': ".(empty($arTemplate['COMMAND'])? '[]': BitrixImCommon::objectEncode($arTemplate["COMMAND"])).",

				'smile': ".BitrixImCommon::objectEncode($arTemplate["SMILE"]).",
				'smileSet': ".BitrixImCommon::objectEncode($arTemplate["SMILE_SET"]).",
				'settings': ".BitrixImCommon::objectEncode($arTemplate['SETTINGS']).",
				'settingsNotifyBlocked': ".(empty($arTemplate['SETTINGS_NOTIFY_BLOCKED'])? '{}': BitrixImCommon::objectEncode($arTemplate['SETTINGS_NOTIFY_BLOCKED'])).",

				'recent': ".BitrixImCommon::objectEncode($recent, true).",
				'recentLastUpdate': '".$recentLastUpdate."',
				'businessUsers': ".($businessUsers === false? 'false': (empty($businessUsers)? '{}': BitrixImCommon::objectEncode($businessUsers))).",
				'userChatOptions': ".BitrixImCommon::objectEncode(CIMChat::GetChatOptions()).",
				'historyOptions' : ".BitrixImCommon::objectEncode(['fullTextEnabled' => $isFullTextEnabled, 'ftMinSizeToken' => $fullTextMinSizeToken]).",
				'openMessenger' : ".(isset($_REQUEST['IM_DIALOG'])? "'".CUtil::JSEscape(htmlspecialcharsbx($_REQUEST['IM_DIALOG']))."'": 'false').",
				'openHistory' : ".(isset($_REQUEST['IM_HISTORY'])? "'".CUtil::JSEscape(htmlspecialcharsbx($_REQUEST['IM_HISTORY']))."'": 'false').",
				'openNotify' : ".(isset($_GET['IM_NOTIFY']) && $_GET['IM_NOTIFY'] == 'Y'? 'true': 'false').",
				'openSettings' : ".(isset($_GET['IM_SETTINGS'])? $_GET['IM_SETTINGS'] == 'Y'? "'true'": "'".CUtil::JSEscape(htmlspecialcharsbx($_GET['IM_SETTINGS']))."'": 'false').",
				'externalRecentList' : '".(isset($arTemplate['EXTERNAL_RECENT_LIST'])?$arTemplate['EXTERNAL_RECENT_LIST']: '')."',

				'generalChatId': ".CIMChat::GetGeneralChatId().",
				'canSendMessageGeneralChat': ".(CIMChat::CanSendMessageToGeneralChat($USER->GetID())? 'true': 'false').",
				'debug': ".(defined('IM_DEBUG')? 'true': 'false').",
				'next': ".(defined('IM_NEXT')? 'true': 'false').",
				'betaAvailable': ".(BitrixImSettings::isBetaAvailable()? 'true': 'false').",
				'userId': ".$USER->GetID().",
				'userEmail': '".CUtil::JSEscape($USER->GetEmail())."',
				'userColor': '".BitrixImColor::getCode(BitrixImUser::getInstance()->getColor())."',
				'userGender': '".BitrixImUser::getInstance()->getGender()."',
				'userExtranet': ".(BitrixImUser::getInstance()->isExtranet()? 'true': 'false').",
				'user': ".($arTemplate['CURRENT_USER']? BitrixImCommon::objectEncode($arTemplate['CURRENT_USER']): '{}').",
				'userBirthday': ".(!empty($userBirthday)? BitrixImCommon::objectEncode($userBirthday): '[]').",
				'webrtc': {
					'turnServer' : '".CUtil::JSEscape($arTemplate['TURN_SERVER'])."',
					'turnServerFirefox' : '".CUtil::JSEscape($arTemplate['TURN_SERVER_FIREFOX'])."',
					'turnServerLogin' : '".CUtil::JSEscape($arTemplate['TURN_SERVER_LOGIN'])."',
					'turnServerPassword' : '".CUtil::JSEscape($arTemplate['TURN_SERVER_PASSWORD'])."',
					'betaEnabled': ".(BitrixImSettings::isCallBetaAvailable()? 'true': 'false').",
					'mobileSupport': false,
					'phoneEnabled': ".($phoneEnabled? 'true': 'false').",
					'phoneDeviceActive': '".($phoneDeviceActive? 'Y': 'N')."',
					'phoneCanPerformCalls': '".($phoneCanPerformCalls? 'Y': 'N')."',
					'phoneCanCallUserNumber': '".($phoneCanCallUserNumber? 'Y': 'N')."',
					'phoneCanInterceptCall': ".($phoneCanInterceptCall? 'true': 'false').",
					'phoneCallCardRestApps': ".BitrixImCommon::objectEncode(self::GetCallCardRestApps()).",
					'phoneDefaultLineId': '".self::GetDefaultTelephonyLine()."',
					'availableLines': ".BitrixImCommon::objectEncode(self::GetTelephonyAvailableLines()).",
					'formatRecordDate': '".BitrixMainContext::getCurrent()->getCulture()->getShortDateFormat()."'
				},
				'openlines': ".BitrixImCommon::objectEncode($olConfig).",
				'options': {'contactListLoad' : ".($contactListLoad? 'true': 'false').", 'contactListBirthday' : '".$contactListBirthday."', 'chatExtendShowHistory' : ".($chatExtendShowHistory? 'true': 'false').", 'frameMode': ".($iframeRequest === 'Y'? 'true': 'false').", 'frameType': '".($iframeTypeRequest === 'SIDE_SLIDER'? 'SIDE_SLIDER': 'NONE')."', 'showRecent': ".($imRecentRequest === 'N'? 'false': 'true').", 'showMenu': ".($imMenuRequest === 'N'? 'false': 'true').", 'showSearch': ".($imSearchRequest === 'N'? 'false': 'true').", 'showStatus': ".($imStatusRequest === 'N'? 'false': 'true').", 'openLinesRecent': ".($imLinesRequest === 'Y'? 'true': 'false').", 'v2layout': ".($imV2LayoutRequest === 'Y'? 'true': 'false').", 'background': '".$imBackgroundRequest."'},
				'disk': {'enable' : ".($diskStatus? 'true': 'false').", 'external' : ".($diskExternalLinkStatus? 'true': 'false')."},
				'zoomStatus': {'active' : ".(BitrixImCallIntegrationZoom::isActive()? 'true': 'false').", 'enabled' : ".(BitrixImCallIntegrationZoom::isAvailable()? 'true': 'false').", 'connected' : ".(BitrixImCallIntegrationZoom::isConnected($USER->GetID())? 'true': 'false')."},
				'path' : {'lf' : '".CUtil::JSEscape($pathToLf)."', 'profile' : '".CUtil::JSEscape($arTemplate['PATH_TO_USER_PROFILE'])."', 'profileTemplate' : '".CUtil::JSEscape($arTemplate['PATH_TO_USER_PROFILE_TEMPLATE'])."', 'mail' : '".CUtil::JSEscape($arTemplate['PATH_TO_USER_MAIL'])."', 'im': '".CUtil::JSEscape($pathToIm)."', 'call': '".CUtil::JSEscape($pathToCall)."', 'file': '".CUtil::JSEscape($pathToFile)."', 'crm' : ".BitrixImCommon::objectEncode($crmPath).", 'disk' : ".BitrixImCommon::objectEncode($pathToDisk)."}
			});
		});
	";

	return $sJS;
}