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