public static function GetConfigByUserId($userId) { $userId = intval($userId); if ($userId > 0) { $viUser = new CVoxImplantUser(); $userInfo = $viUser->GetUserInfo($userId); if ($userInfo['user_backphone'] == '') { $userInfo['user_backphone'] = CVoxImplantConfig::LINK_BASE_NUMBER; } } else { $userInfo = array(); $userInfo['user_backphone'] = CVoxImplantConfig::GetPortalNumber(); $userInfo['user_extranet'] = false; } if ($userInfo['user_extranet']) { $result = array('error' => array('code' => 'EXTRANAET', 'msg' => 'Extranet user can not use telephony')); } else { if ($userInfo['user_backphone'] == CVoxImplantPhone::GetLinkNumber() || $userInfo['user_backphone'] == CVoxImplantConfig::LINK_BASE_NUMBER) { $result = self::GetLinkConfig(); } else { $result = CVoxImplantConfig::GetConfigBySearchId($userInfo['user_backphone']); if (isset($result['ERROR']) && strlen($result['ERROR']) > 0) { $result = self::GetLinkConfig(); } } } $result['USER_ID'] = $userId; return $result; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (isset($_REQUEST['AJAX_CALL']) && $_REQUEST['AJAX_CALL'] == 'Y') { return; } if (!CModule::IncludeModule('voximplant')) { return; } if (check_bitrix_sessid() && $_POST['vi_link_form']) { CVoxImplantConfig::SetLinkCallRecord(isset($_POST['vi_link_call_record'])); CVoxImplantConfig::SetLinkCheckCrm(isset($_POST['vi_link_check_crm'])); } $arResult = CVoxImplantPhone::GetCallerId(); $arResult['LINK_CALL_RECORD'] = CVoxImplantConfig::GetLinkCallRecord(); $arResult['LINK_CHECK_CRM'] = CVoxImplantConfig::GetLinkCheckCrm(); if (!(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) { $this->IncludeComponentTemplate(); } return $arResult;
public static function DeletePhoneConfig($configId) { $configId = intval($configId); $result = VI\ConfigTable::getList(array('select' => array('ID', 'SEARCH_ID'), 'filter' => array('=ID' => $configId))); $config = $result->fetch(); if (!$config) { return false; } $needChangePortalNumber = false; VI\ConfigTable::delete($configId); if ($config['SEARCH_ID'] == CVoxImplantConfig::GetPortalNumber()) { $needChangePortalNumber = true; } $result = VI\QueueTable::getList(array('select' => array('ID'), 'filter' => array('=CONFIG_ID' => $configId))); while ($row = $result->fetch()) { VI\QueueTable::delete($row['ID']); } $firstPhoneNumber = ''; $result = VI\ConfigTable::getList(array('select' => array('ID', 'SEARCH_ID'))); while ($row = $result->fetch()) { if (!$firstPhoneNumber) { $firstPhoneNumber = $row['SEARCH_ID']; } } if (!$firstPhoneNumber) { CVoxImplantConfig::SetModeStatus(CVoxImplantConfig::MODE_RENT, false); } if ($needChangePortalNumber) { if ($firstPhoneNumber) { CVoxImplantConfig::SetPortalNumber($firstPhoneNumber); } else { CVoxImplantConfig::SetPortalNumber(CVoxImplantConfig::LINK_BASE_NUMBER); } } return true; }
public static function GetConfigBySearchId($searchId) { if (strlen($searchId) <= 0) { return array('ERROR' => 'Config is`t found for undefined number'); } $orm = VI\ConfigTable::getList(array('filter' => array('=SEARCH_ID' => (string) $searchId))); $config = $orm->fetch(); if (!$config) { $result = array('ERROR' => 'Config is`t found for number: ' . $searchId); } else { $result = $config; $result['PHONE_TITLE'] = $result['PHONE_NAME']; if ($result['PORTAL_MODE'] == self::MODE_SIP) { $viSip = new CVoxImplantSip(); $sipResult = $viSip->Get($config["ID"]); $result['PHONE_NAME'] = preg_replace("/[^0-9\\#\\*]/i", "", $result['PHONE_NAME']); $result['PHONE_NAME'] = strlen($result['PHONE_NAME']) >= 4 ? $result['PHONE_NAME'] : ''; $result['SIP_SERVER'] = $sipResult ? $sipResult['SERVER'] : ''; $result['SIP_LOGIN'] = $sipResult ? $sipResult['LOGIN'] : ''; $result['SIP_PASSWORD'] = $sipResult ? $sipResult['PASSWORD'] : ''; } if (strlen($result['FORWARD_NUMBER']) > 0) { $result["FORWARD_NUMBER"] = NormalizePhone($result['FORWARD_NUMBER'], 1); } if (strlen($result['WORKTIME_DAYOFF_NUMBER']) > 0) { $result["WORKTIME_DAYOFF_NUMBER"] = NormalizePhone($result['WORKTIME_DAYOFF_NUMBER'], 1); } // check work time $result['WORKTIME_SKIP_CALL'] = 'N'; if ($config['WORKTIME_ENABLE'] == 'Y') { $timezone = !empty($config["WORKTIME_TIMEZONE"]) ? new DateTimeZone($config["WORKTIME_TIMEZONE"]) : null; $numberDate = new Bitrix\Main\Type\DateTime(null, null, $timezone); if (!empty($config['WORKTIME_DAYOFF'])) { $daysOff = explode(",", $config['WORKTIME_DAYOFF']); $allWeekDays = array('MO' => 1, 'TU' => 2, 'WE' => 3, 'TH' => 4, 'FR' => 5, 'SA' => 6, 'SU' => 7); $currentWeekDay = $numberDate->format('N'); foreach ($daysOff as $day) { if ($currentWeekDay == $allWeekDays[$day]) { $result['WORKTIME_SKIP_CALL'] = "Y"; } } } if ($result['WORKTIME_SKIP_CALL'] !== "Y" && !empty($config['WORKTIME_HOLIDAYS'])) { $holidays = explode(",", $config['WORKTIME_HOLIDAYS']); $currentDay = $numberDate->format('d.m'); foreach ($holidays as $holiday) { if ($currentDay == $holiday) { $result['WORKTIME_SKIP_CALL'] = "Y"; } } } if ($result['WORKTIME_SKIP_CALL'] !== "Y" && !empty($config['WORKTIME_FROM']) && !empty($config['WORKTIME_TO'])) { $currentTime = $numberDate->format('G.i'); if (!($currentTime >= $config['WORKTIME_FROM'] && $currentTime <= $config['WORKTIME_TO'])) { $result['WORKTIME_SKIP_CALL'] = "Y"; } } if ($result['WORKTIME_SKIP_CALL'] === "Y") { $result['WORKTIME_DAYOFF_MELODY'] = CVoxImplantConfig::GetMelody('WORKTIME_DAYOFF_MELODY', $config['MELODY_LANG'], $config['WORKTIME_DAYOFF_MELODY']); } } if (CVoxImplantHttp::GetPortalType() == CVoxImplantHttp::TYPE_BITRIX24) { $result['PORTAL_URL'] = CVoxImplantHttp::GetServerAddress() . '/settings/info_receiver.php?b24_action=phone&b24_direct=y'; } else { $result['PORTAL_URL'] = CVoxImplantHttp::GetServerAddress() . '/services/telephony/info_receiver.php?b24_direct=y'; } $result['PORTAL_SIGN'] = CVoxImplantHttp::GetPortalSign(); $result['MELODY_WELCOME'] = CVoxImplantConfig::GetMelody('MELODY_WELCOME', $config['MELODY_LANG'], $config['MELODY_WELCOME']); $result['MELODY_VOICEMAIL'] = CVoxImplantConfig::GetMelody('MELODY_VOICEMAIL', $config['MELODY_LANG'], $config['MELODY_VOICEMAIL']); $result['MELODY_HOLD'] = CVoxImplantConfig::GetMelody('MELODY_HOLD', $config['MELODY_LANG'], $config['MELODY_HOLD']); $result['MELODY_WAIT'] = CVoxImplantConfig::GetMelody('MELODY_WAIT', $config['MELODY_LANG'], $config['MELODY_WAIT']); } return $result; }
public 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 ($arTemplate['DESKTOP'] == 'true') $updateStateInterval = intval($updateStateInterval/2); else $updateStateInterval = $updateStateInterval-60; } } $diskStatus = CIMDisk::Enabled(); if ($arTemplate['INIT'] == 'Y') { $phoneSipAvailable = 0; $phoneEnabled = self::CheckPhoneStatus(); if ($phoneEnabled && CModule::IncludeModule('voximplant')) { $phoneSipAvailable = CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_SIP); } $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']: ''; $sJS = " BX.ready(function() { BXIM = new BX.IM(BX('bx-notifier-panel'), { 'mailCount': ".$arTemplate["MAIL_COUNTER"].", 'notifyCount': ".$arTemplate["NOTIFY_COUNTER"].", 'messageCount': ".$arTemplate["MESSAGE_COUNTER"].", 'counters': ".(empty($arTemplate['COUNTERS'])? '{}': CUtil::PhpToJSObject($arTemplate['COUNTERS'])).", 'ppStatus': ".$ppStatus.", 'ppServerStatus': ".$ppServerStatus.", 'updateStateInterval': '".$updateStateInterval."', 'xmppStatus': ".(CIMMessenger::CheckXmppStatusOnline()? 'true': 'false').", 'bitrixNetworkStatus': ".(CIMMessenger::CheckNetworkStatus()? 'true': 'false').", 'bitrix24Status': ".(IsModuleInstalled('bitrix24')? 'true': 'false').", 'bitrix24Admin': ".(CModule::IncludeModule('bitrix24') && CBitrix24::IsPortalAdmin($USER->GetId())? 'true': 'false').", 'bitrix24net': ".(IsModuleInstalled('b24network')? 'true': 'false').", 'bitrixIntranet': ".(IsModuleInstalled('intranet')? 'true': 'false').", 'bitrixXmpp': ".(IsModuleInstalled('xmpp')? 'true': 'false').", 'desktop': ".$arTemplate["DESKTOP"].", 'desktopStatus': ".(CIMMessenger::CheckDesktopStatusOnline()? 'true': 'false').", 'desktopVersion': ".CIMMessenger::GetDesktopVersion().", 'desktopLinkOpen': ".$arTemplate["DESKTOP_LINK_OPEN"].", 'language': '".LANGUAGE_ID."', 'smile': ".CUtil::PhpToJSObject($arTemplate["SMILE"]).", 'smileSet': ".CUtil::PhpToJSObject($arTemplate["SMILE_SET"]).", 'settings': ".CUtil::PhpToJSObject($arTemplate['SETTINGS']).", 'settingsNotifyBlocked': ".(empty($arTemplate['SETTINGS_NOTIFY_BLOCKED'])? '{}': CUtil::PhpToJSObject($arTemplate['SETTINGS_NOTIFY_BLOCKED'])).", 'notify': ".(empty($arTemplate['NOTIFY']['notify'])? '{}': CUtil::PhpToJSObject($arTemplate['NOTIFY']['notify'])).", 'unreadNotify' : ".(empty($arTemplate['NOTIFY']['unreadNotify'])? '{}': CUtil::PhpToJSObject($arTemplate['NOTIFY']['unreadNotify'])).", 'flashNotify' : ".(empty($arTemplate['NOTIFY']['flashNotify'])? '{}': CUtil::PhpToJSObject($arTemplate['NOTIFY']['flashNotify'])).", 'countNotify' : ".intval($arTemplate['NOTIFY']['countNotify']).", 'loadNotify' : ".($arTemplate['NOTIFY']['loadNotify']? 'true': 'false').", 'recent': ".CUtil::PhpToJSObject($arTemplate['RECENT']).", 'users': ".(empty($arTemplate['CONTACT_LIST']['users'])? '{}': CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['users'])).", 'groups': ".(empty($arTemplate['CONTACT_LIST']['groups'])? '{}': CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['groups'])).", 'userInGroup': ".(empty($arTemplate['CONTACT_LIST']['userInGroup'])? '{}': CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['userInGroup'])).", 'woGroups': ".(empty($arTemplate['CONTACT_LIST']['woGroups'])? '{}': CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['woGroups'])).", 'woUserInGroup': ".(empty($arTemplate['CONTACT_LIST']['woUserInGroup'])? '{}': CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['woUserInGroup'])).", 'chat': ".(empty($arTemplate['CHAT']['chat'])? '{}': CUtil::PhpToJSObject($arTemplate['CHAT']['chat'])).", 'userInChat': ".(empty($arTemplate['CHAT']['userInChat'])? '{}': CUtil::PhpToJSObject($arTemplate['CHAT']['userInChat'])).", 'userChatBlockStatus': ".(empty($arTemplate['CHAT']['userChatBlockStatus'])? '{}': CUtil::PhpToJSObject($arTemplate['CHAT']['userChatBlockStatus'])).", 'message' : ".(empty($arTemplate['MESSAGE']['message'])? '{}': CUtil::PhpToJSObject($arTemplate['MESSAGE']['message'])).", 'files' : ".(empty($arTemplate['MESSAGE']['files'])? '{}': CUtil::PhpToJSObject($arTemplate['MESSAGE']['files'])).", 'showMessage' : ".(empty($arTemplate['MESSAGE']['usersMessage'])? '{}': CUtil::PhpToJSObject($arTemplate['MESSAGE']['usersMessage'])).", 'unreadMessage' : ".(empty($arTemplate['MESSAGE']['unreadMessage'])? '{}': CUtil::PhpToJSObject($arTemplate['MESSAGE']['unreadMessage'])).", 'flashMessage' : ".(empty($arTemplate['MESSAGE']['flashMessage'])? '{}': CUtil::PhpToJSObject($arTemplate['MESSAGE']['flashMessage'])).", 'history' : {}, 'openMessenger' : ".(isset($_GET['IM_DIALOG'])? "'".CUtil::JSEscape(htmlspecialcharsbx($_GET['IM_DIALOG']))."'": 'false').", 'openHistory' : ".(isset($_GET['IM_HISTORY'])? "'".CUtil::JSEscape(htmlspecialcharsbx($_GET['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').", 'currentTab' : '".CUtil::JSEscape($arTemplate['CURRENT_TAB'])."', 'userId': ".$USER->GetID().", 'userEmail': '".CUtil::JSEscape($USER->GetEmail())."', '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'])."', 'mobileSupport': false, 'phoneEnabled': ".($phoneEnabled? 'true': 'false').", 'phoneSipAvailable': ".($phoneSipAvailable? 'true': 'false')."}, 'disk': {'enable' : ".($diskStatus? 'true': 'false')."}, 'path' : {'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)."'} }); }); "; } else { $sJS = " BX.ready(function() { BXIM = new BX.IM(BX('bx-notifier-panel'), { 'init': false, 'settings': ".CUtil::PhpToJSObject($arTemplate['SETTINGS']).", 'updateStateInterval': '".$updateStateInterval."', 'desktop': ".$arTemplate["DESKTOP"].", 'ppStatus': ".$ppStatus.", 'ppServerStatus': ".$ppServerStatus.", 'xmppStatus': ".(CIMMessenger::CheckXmppStatusOnline()? 'true': 'false').", 'bitrix24Status': ".(IsModuleInstalled('bitrix24')? 'true': 'false').", 'bitrixIntranet': ".(IsModuleInstalled('intranet')? 'true': 'false').", 'bitrixXmpp': ".(IsModuleInstalled('xmpp')? 'true': 'false').", 'notify' : {}, 'users' : {}, 'userId': ".$USER->GetID().", 'userEmail': '".CUtil::JSEscape($USER->GetEmail())."', 'openMessenger' : ".(isset($_GET['IM_DIALOG'])? "'".CUtil::JSEscape(htmlspecialcharsbx($_GET['IM_DIALOG']))."'": 'false').", 'openHistory' : ".(isset($_GET['IM_HISTORY'])? "'".CUtil::JSEscape(htmlspecialcharsbx($_GET['IM_HISTORY']))."'": 'false').", 'openSettings' : ".(isset($_GET['IM_SETTINGS']) && $_GET['IM_SETTINGS'] == 'Y'? "'true'": 'false').", 'disk': {'enable' : '".($diskStatus? 'true': 'false')."'}, 'path' : {'profile' : '".$arTemplate['PATH_TO_USER_PROFILE']."', 'profileTemplate' : '".$arTemplate['PATH_TO_USER_PROFILE_TEMPLATE']."', 'mail' : '".$arTemplate['PATH_TO_USER_MAIL']."'} }); }); "; } return $sJS; }
private static function executeSaveOption(&$error) { $error = !CVoxImplantConfig::SetPortalNumber($_REQUEST["portalNumber"]); return array(); }
public function SendChatMessage($dialogId, $incomingType, $message) { if (strlen($message) <= 0 || strlen($dialogId) <= 0) { return false; } if (CVoxImplantConfig::GetChatAction() == CVoxImplantConfig::INTERFACE_CHAT_NONE) { return false; } if (!CModule::IncludeModule('im')) { return false; } // TODO CHECK NULL USER BEFORE SEND $chatId = 0; if (substr($dialogId, 0, 4) == 'chat') { $chatId = intval(substr($dialogId, 4)); CIMChat::AddMessage(array("FROM_USER_ID" => $incomingType == CVoxImplantMain::CALL_OUTGOING ? $this->userId : 0, "TO_CHAT_ID" => $chatId, "MESSAGE" => $message, "SYSTEM" => 'Y')); } else { if (intval($dialogId) > 0) { CIMMessage::Add(array("FROM_USER_ID" => $incomingType == CVoxImplantMain::CALL_OUTGOING ? $this->userId : intval($dialogId), "TO_USER_ID" => $incomingType == CVoxImplantMain::CALL_OUTGOING ? intval($dialogId) : $this->userId, "MESSAGE" => $message, "SYSTEM" => 'Y')); } } return true; }
} } foreach (GetModuleEvents("voximplant", "onCallInit", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(array('CALL_ID' => $params['CALL_ID'], 'CALL_TYPE' => 2, 'ACCOUNT_SEARCH_ID' => $params['ACCOUNT_SEARCH_ID'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'CALLER_ID' => $params['CALLER_ID']))); } echo json_encode($result); } elseif ($params["COMMAND"] == "OutgoingGetConfig") { $result = CVoxImplantOutgoing::GetConfigByUserId($params['USER_ID']); CVoxImplantHistory::WriteToLog($result, 'PORTAL GET OUTGOING CONFIG'); echo json_encode($result); } elseif ($params["COMMAND"] == "AddPhoneNumber") { $result = CVoxImplantConfig::AddConfigBySearchId($params['PHONE_NUMBER'], $params['COUNTRY_CODE']); CVoxImplantHistory::WriteToLog($result, 'CONTROLLER ADD NEW PHONE NUMBER'); echo json_encode($result); } elseif ($params["COMMAND"] == "UnlinkExpirePhoneNumber") { $result = CVoxImplantConfig::DeleteConfigBySearchId($params['PHONE_NUMBER']); CVoxImplantHistory::WriteToLog($result, 'CONTROLLER UNLINK EXPIRE PHONE NUMBER'); echo json_encode($result); } elseif ($params["COMMAND"] == "UpdateOperatorRequest") { $params['OPERATOR_CONTRACT'] = \Bitrix\Main\Text\Encoding::convertEncodingToCurrent($params['OPERATOR_CONTRACT']); CVoxImplantPhoneOrder::Update($params); $result = array('RESULT' => 'OK'); CVoxImplantHistory::WriteToLog($result, 'UPDATE OPERATOR REQUEST'); echo json_encode($result); } else { if ($params["COMMAND"] == "ExternalHungup") { $res = Bitrix\Voximplant\CallTable::getList(array('filter' => array('=CALL_ID' => $params['CALL_ID_TMP']))); if ($call = $res->fetch()) { Bitrix\Voximplant\CallTable::delete($call['ID']); CVoxImplantOutgoing::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $call['USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'FAILED_CODE' => intval($params['CALL_FAILED_CODE']), 'MARK' => 'timeout_hit_7')); CVoxImplantHistory::WriteToLog($call, 'EXTERNAL CALL HANGUP');
public static function GetMobileTemplateJS($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; } $updateStateInterval = $updateStateInterval - 60; } } $diskStatus = CIMDisk::Enabled(); $phoneSipAvailable = false; $phoneDeviceActive = false; $phoneEnabled = self::CheckPhoneStatus() && CModule::IncludeModule('mobileapp') && \Bitrix\MobileApp\Mobile::getInstance()->isWebRtcSupported(); if ($phoneEnabled && CModule::IncludeModule('voximplant')) { $phoneSipAvailable = CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_SIP); $phoneDeviceActive = CVoxImplantUser::GetPhoneActive($USER->GetId()); } $mobileAction = isset($arTemplate["ACTION"]) ? $arTemplate["ACTION"] : 'none'; $mobileCallMethod = isset($arTemplate["CALL_METHOD"]) ? $arTemplate["CALL_METHOD"] : 'device'; $userColor = isset($arTemplate['CONTACT_LIST']['users'][$USER->GetID()]['color']) ? $arTemplate['CONTACT_LIST']['users'][$USER->GetID()]['color'] : ''; $sJS = "\n\t\t\tBX.ready(function() {\n\t\t\t\tBXIM = new BX.ImMobile({\n\t\t\t\t\t'mobileAction': '" . $mobileAction . "',\n\t\t\t\t\t'mobileCallMethod': '" . $mobileCallMethod . "',\n\n\t\t\t\t\t'colors': " . (IM\Color::isEnabled() ? CUtil::PhpToJSObject(IM\Color::getSafeColorNames()) : 'false') . ",\n\t\t\t\t\t'mailCount': " . intval($arTemplate["MAIL_COUNTER"]) . ",\n\t\t\t\t\t'notifyCount': " . intval($arTemplate["NOTIFY_COUNTER"]) . ",\n\t\t\t\t\t'messageCount': " . intval($arTemplate["MESSAGE_COUNTER"]) . ",\n\t\t\t\t\t'counters': " . (empty($arTemplate['COUNTERS']) ? '{}' : CUtil::PhpToJSObject($arTemplate['COUNTERS'])) . ",\n\t\t\t\t\t'ppStatus': " . $ppStatus . ",\n\t\t\t\t\t'ppServerStatus': " . $ppServerStatus . ",\n\t\t\t\t\t'updateStateInterval': '" . $updateStateInterval . "',\n\t\t\t\t\t'openChatEnable': " . (CIMMessenger::CheckEnableOpenChat() ? 'true' : 'false') . ",\n\t\t\t\t\t'xmppStatus': " . (CIMMessenger::CheckXmppStatusOnline() ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrixNetwork': " . (CIMMessenger::CheckNetwork() ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrixNetwork2': " . (CIMMessenger::CheckNetwork2() ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrix24': " . (IsModuleInstalled('bitrix24') ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrix24Admin': " . (CModule::IncludeModule('bitrix24') && CBitrix24::IsPortalAdmin($USER->GetId()) ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrix24net': " . (IsModuleInstalled('b24network') ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrixIntranet': " . (IsModuleInstalled('intranet') ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrixXmpp': " . (IsModuleInstalled('xmpp') ? 'true' : 'false') . ",\n\t\t\t\t\t'bitrixMobile': " . (IsModuleInstalled('mobile') ? 'true' : 'false') . ",\n\t\t\t\t\t'desktopStatus': " . (CIMMessenger::CheckDesktopStatusOnline() ? 'true' : 'false') . ",\n\t\t\t\t\t'desktopVersion': " . CIMMessenger::GetDesktopVersion() . ",\n\t\t\t\t\t'language': '" . LANGUAGE_ID . "',\n\n\t\t\t\t\t'smile': " . (empty($arTemplate['SMILE']) ? '{}' : CUtil::PhpToJSObject($arTemplate["SMILE"])) . ",\n\t\t\t\t\t'smileSet': " . (empty($arTemplate['SMILE_SET']) ? '{}' : CUtil::PhpToJSObject($arTemplate["SMILE_SET"])) . ",\n\t\t\t\t\t'settings': " . (empty($arTemplate['SETTINGS']) ? '{}' : CUtil::PhpToJSObject($arTemplate['SETTINGS'])) . ",\n\t\t\t\t\t'settingsNotifyBlocked': " . (empty($arTemplate['SETTINGS_NOTIFY_BLOCKED']) ? '{}' : CUtil::PhpToJSObject($arTemplate['SETTINGS_NOTIFY_BLOCKED'])) . ",\n\n\t\t\t\t\t'notify': " . (empty($arTemplate['NOTIFY']['notify']) ? '{}' : CUtil::PhpToJSObject($arTemplate['NOTIFY']['notify'])) . ",\n\t\t\t\t\t'unreadNotify' : " . (empty($arTemplate['NOTIFY']['unreadNotify']) ? '{}' : CUtil::PhpToJSObject($arTemplate['NOTIFY']['unreadNotify'])) . ",\n\t\t\t\t\t'flashNotify' : " . (empty($arTemplate['NOTIFY']['flashNotify']) ? '{}' : CUtil::PhpToJSObject($arTemplate['NOTIFY']['flashNotify'])) . ",\n\t\t\t\t\t'countNotify' : " . intval($arTemplate['NOTIFY']['countNotify']) . ",\n\t\t\t\t\t'loadNotify' : " . ($arTemplate['NOTIFY']['loadNotify'] ? 'true' : 'false') . ",\n\n\t\t\t\t\t'recent': " . (empty($arTemplate['RECENT']) && $arTemplate['RECENT'] !== false ? '[]' : CUtil::PhpToJSObject($arTemplate['RECENT'])) . ",\n\t\t\t\t\t'users': " . (empty($arTemplate['CONTACT_LIST']['users']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['users'])) . ",\n\t\t\t\t\t'groups': " . (empty($arTemplate['CONTACT_LIST']['groups']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['groups'])) . ",\n\t\t\t\t\t'userInGroup': " . (empty($arTemplate['CONTACT_LIST']['userInGroup']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['userInGroup'])) . ",\n\t\t\t\t\t'woGroups': " . (empty($arTemplate['CONTACT_LIST']['woGroups']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['woGroups'])) . ",\n\t\t\t\t\t'woUserInGroup': " . (empty($arTemplate['CONTACT_LIST']['woUserInGroup']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CONTACT_LIST']['woUserInGroup'])) . ",\n\t\t\t\t\t'chat': " . (empty($arTemplate['CHAT']['chat']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CHAT']['chat'])) . ",\n\t\t\t\t\t'userInChat': " . (empty($arTemplate['CHAT']['userInChat']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CHAT']['userInChat'])) . ",\n\t\t\t\t\t'userChatBlockStatus': " . (empty($arTemplate['CHAT']['userChatBlockStatus']) ? '{}' : CUtil::PhpToJSObject($arTemplate['CHAT']['userChatBlockStatus'])) . ",\n\t\t\t\t\t'message' : " . (empty($arTemplate['MESSAGE']['message']) ? '{}' : CUtil::PhpToJSObject($arTemplate['MESSAGE']['message'])) . ",\n\t\t\t\t\t'files' : " . (empty($arTemplate['MESSAGE']['files']) ? '{}' : CUtil::PhpToJSObject($arTemplate['MESSAGE']['files'])) . ",\n\t\t\t\t\t'showMessage' : " . (empty($arTemplate['MESSAGE']['usersMessage']) ? '{}' : CUtil::PhpToJSObject($arTemplate['MESSAGE']['usersMessage'])) . ",\n\t\t\t\t\t'unreadMessage' : " . (empty($arTemplate['MESSAGE']['unreadMessage']) ? '{}' : CUtil::PhpToJSObject($arTemplate['MESSAGE']['unreadMessage'])) . ",\n\t\t\t\t\t'flashMessage' : " . (empty($arTemplate['MESSAGE']['flashMessage']) ? '{}' : CUtil::PhpToJSObject($arTemplate['MESSAGE']['flashMessage'])) . ",\n\t\t\t\t\t'history' : {},\n\t\t\t\t\t'openMessenger' : " . (isset($_GET['IM_DIALOG']) ? "'" . CUtil::JSEscape(htmlspecialcharsbx($_GET['IM_DIALOG'])) . "'" : 'false') . ",\n\t\t\t\t\t'openHistory' : " . (isset($_GET['IM_HISTORY']) ? "'" . CUtil::JSEscape(htmlspecialcharsbx($_GET['IM_HISTORY'])) . "'" : 'false') . ",\n\t\t\t\t\t'openNotify' : " . (isset($_GET['IM_NOTIFY']) && $_GET['IM_NOTIFY'] == 'Y' ? 'true' : 'false') . ",\n\t\t\t\t\t'openSettings' : " . (isset($_GET['IM_SETTINGS']) ? $_GET['IM_SETTINGS'] == 'Y' ? "'true'" : "'" . CUtil::JSEscape(htmlspecialcharsbx($_GET['IM_SETTINGS'])) . "'" : 'false') . ",\n\n\t\t\t\t\t'currentTab' : '" . ($arTemplate['CURRENT_TAB'] ? CUtil::JSEscape($arTemplate['CURRENT_TAB']) : 0) . "',\n\t\t\t\t\t'generalChatId': " . CIMChat::GetGeneralChatId() . ",\n\t\t\t\t\t'canSendMessageGeneralChat': " . (CIMChat::CanSendMessageToGeneralChat($USER->GetID()) ? 'true' : 'false') . ",\n\t\t\t\t\t'userId': " . $USER->GetID() . ",\n\t\t\t\t\t'userEmail': '" . CUtil::JSEscape($USER->GetEmail()) . "',\n\t\t\t\t\t'userColor': '" . IM\Color::getCode($userColor) . "',\n\t\t\t\t\t'userGender': '" . IM\User::getInstance()->getGender() . "',\n\t\t\t\t\t'userExtranet': " . (IM\User::getInstance()->isExtranet() ? 'true' : 'false') . ",\n\t\t\t\t\t'webrtc': {'turnServer' : '" . (empty($arTemplate['TURN_SERVER']) ? '' : CUtil::JSEscape($arTemplate['TURN_SERVER'])) . "', 'turnServerLogin' : '" . (empty($arTemplate['TURN_SERVER_LOGIN']) ? '' : CUtil::JSEscape($arTemplate['TURN_SERVER_LOGIN'])) . "', 'turnServerPassword' : '" . (empty($arTemplate['TURN_SERVER_PASSWORD']) ? '' : CUtil::JSEscape($arTemplate['TURN_SERVER_PASSWORD'])) . "', 'mobileSupport': " . ($arTemplate['WEBRTC_MOBILE_SUPPORT'] ? 'true' : 'false') . ", 'phoneEnabled': " . ($phoneEnabled ? 'true' : 'false') . ", 'phoneSipAvailable': " . ($phoneSipAvailable ? 'true' : 'false') . "},\n\t\t\t\t\t'disk': {'enable' : " . ($diskStatus ? 'true' : 'false') . "},\n\t\t\t\t\t'path' : {'profile' : '" . (empty($arTemplate['PATH_TO_USER_PROFILE']) ? '' : CUtil::JSEscape($arTemplate['PATH_TO_USER_PROFILE'])) . "', 'profileTemplate' : '" . (empty($arTemplate['PATH_TO_USER_PROFILE_TEMPLATE']) ? '' : CUtil::JSEscape($arTemplate['PATH_TO_USER_PROFILE_TEMPLATE'])) . "', 'mail' : '" . (empty($arTemplate['PATH_TO_USER_MAIL']) ? '' : CUtil::JSEscape($arTemplate['PATH_TO_USER_MAIL'])) . "'}\n\t\t\t\t});\n\t\t\t});\n\t\t"; return $sJS; }
public static function Add($params) { if (strlen($params["CALL_ID"]) > 0) { $res = VI\CallTable::getList(array('select' => array('ID', 'DATE_CREATE', 'CRM', 'CONFIG_ID', 'USER_ID', 'TRANSFER_USER_ID'), 'filter' => array('=CALL_ID' => $params["CALL_ID"]))); if ($call = $res->fetch()) { VI\CallTable::delete($call['ID']); } } $arFields = array("ACCOUNT_ID" => $params["ACCOUNT_ID"], "APPLICATION_ID" => $params["APPLICATION_ID"], "APPLICATION_NAME" => $params["APPLICATION_NAME"], "INCOMING" => $params["INCOMING"], "CALL_START_DATE" => $call ? $call['DATE_CREATE'] : new Bitrix\Main\Type\DateTime(), "CALL_DURATION" => $params["CALL_DURATION"], "CALL_STATUS" => $params["CALL_STATUS"], "CALL_FAILED_CODE" => $params["CALL_FAILED_CODE"], "CALL_FAILED_REASON" => $params["CALL_FAILED_REASON"], "COST" => $params["COST_FINAL"], "COST_CURRENCY" => $params["COST_CURRENCY"], "CALL_VOTE" => intval($params["CALL_VOTE"]), "CALL_ID" => $params["CALL_ID"], "CALL_CATEGORY" => $params["CALL_CATEGORY"]); if (intval($params["PORTAL_USER_ID"]) > 0) { $arFields["PORTAL_USER_ID"] = intval($params["PORTAL_USER_ID"]); } if (strlen($params["PHONE_NUMBER"]) > 0) { $arFields["PHONE_NUMBER"] = $params["PHONE_NUMBER"]; } if (strlen($params["CALL_DIRECTION"]) > 0) { $arFields["CALL_DIRECTION"] = $params["CALL_DIRECTION"]; } if (strlen($params["PORTAL_NUMBER"]) > 0) { $arFields["PORTAL_NUMBER"] = $params["PORTAL_NUMBER"]; } if (strlen($params["ACCOUNT_SEARCH_ID"]) > 0) { $arFields["PORTAL_NUMBER"] = $params["ACCOUNT_SEARCH_ID"]; } if (strlen($params["CALL_LOG"]) > 0) { $arFields["CALL_LOG"] = $params["CALL_LOG"]; } $orm = Bitrix\VoxImplant\StatisticTable::add($arFields); if (!$orm) { return false; } if ($call && intval($arFields["PORTAL_USER_ID"]) <= 0) { $res = VI\QueueTable::getList(array('select' => array('ID', 'USER_ID'), 'order' => array('LAST_ACTIVITY_DATE' => 'asc'), 'filter' => array('=CONFIG_ID' => $call['CONFIG_ID']), 'limit' => 1)); $queueUser = $res->fetch(); if ($queueUser) { $arFields["PORTAL_USER_ID"] = $queueUser['USER_ID']; } } if (strlen($arFields["PHONE_NUMBER"]) > 0 && $arFields["PORTAL_USER_ID"] > 0 && $params["CALL_FAILED_CODE"] != 423) { $plusSymbol = strlen($arFields["PHONE_NUMBER"]) >= 10 ? '+' : ''; if ($arFields["INCOMING"] == CVoxImplantMain::CALL_OUTGOING) { if ($arFields['CALL_FAILED_CODE'] == '603-S') { $message = GetMessage('VI_OUT_CALL_DECLINE_SELF', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"])); } else { if ($arFields['CALL_FAILED_CODE'] == 603) { $message = GetMessage('VI_OUT_CALL_DECLINE', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"])); } else { if ($arFields['CALL_FAILED_CODE'] == 486) { $message = GetMessage('VI_OUT_CALL_BUSY', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"])); } else { if ($arFields['CALL_FAILED_CODE'] == 480) { $message = GetMessage('VI_OUT_CALL_UNAVAILABLE', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"])); } else { if ($arFields['CALL_FAILED_CODE'] == 404 || $arFields['CALL_FAILED_CODE'] == 484) { $message = GetMessage('VI_OUT_CALL_ERROR_NUMBER', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"])); } else { if ($arFields['CALL_FAILED_CODE'] == 402) { $message = GetMessage('VI_OUT_CALL_NO_MONEY', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"])); } else { $message = GetMessage('VI_OUT_CALL_END', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"], '#INFO#' => '[PCH=' . $orm->getId() . ']' . GetMessage('VI_CALL_INFO') . '[/PCH]')); } } } } } } } else { if ($arFields['CALL_FAILED_CODE'] == 304) { if (strlen($params['URL']) > 0) { $subMessage = GetMessage('VI_CALL_VOICEMAIL', array('#LINK_START#' => '[PCH=' . $orm->getId() . ']', '#LINK_END#' => '[/PCH]')); } else { $subMessage = '[PCH=' . $orm->getId() . ']' . GetMessage('VI_CALL_INFO') . '[/PCH]'; } $message = GetMessage('VI_IN_CALL_SKIP', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"], '#INFO#' => $subMessage)); } else { $message = GetMessage('VI_IN_CALL_END', array('#NUMBER#' => $plusSymbol . $arFields["PHONE_NUMBER"], '#INFO#' => '[PCH=' . $orm->getId() . ']' . GetMessage('VI_CALL_INFO') . '[/PCH]')); } } self::SendMessageToChat($arFields["PORTAL_USER_ID"], $arFields["PHONE_NUMBER"], $arFields["INCOMING"], $message); } if ($call['CRM'] == 'Y') { CVoxImplantCrmHelper::UpdateCall($arFields); } if (strlen($params['URL']) > 0) { $attachToCrm = $call['CRM'] == 'Y'; $startDownloadAgent = false; $recordLimit = COption::GetOptionInt("voximplant", "record_limit"); if ($recordLimit > 0 && !CVoxImplantAccount::IsPro()) { $sipConnectorActive = CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_SIP); if ($params['PORTAL_TYPE'] == CVoxImplantConfig::MODE_SIP && $sipConnectorActive) { $startDownloadAgent = true; } else { $recordMonth = COption::GetOptionInt("voximplant", "record_month"); if (!$recordMonth) { $recordMonth = date('Ym'); COption::SetOptionInt("voximplant", "record_month", $recordMonth); } $recordCount = CGlobalCounter::GetValue('vi_records', CGlobalCounter::ALL_SITES); if ($recordCount < $recordLimit) { CGlobalCounter::Increment('vi_records', CGlobalCounter::ALL_SITES, false); $startDownloadAgent = true; } else { if ($recordMonth < date('Ym')) { COption::SetOptionInt("voximplant", "record_month", date('Ym')); CGlobalCounter::Set('vi_records', 1, CGlobalCounter::ALL_SITES, false); CGlobalCounter::Set('vi_records_skipped', 0, CGlobalCounter::ALL_SITES, false); $startDownloadAgent = true; } else { CGlobalCounter::Increment('vi_records_skipped', CGlobalCounter::ALL_SITES, false); } } CVoxImplantHistory::WriteToLog(array('limit' => $recordLimit, 'saved' => CGlobalCounter::GetValue('vi_records', CGlobalCounter::ALL_SITES), 'skipped' => CGlobalCounter::GetValue('vi_records_skipped', CGlobalCounter::ALL_SITES), 'save to portal' => $startDownloadAgent ? 'Y' : 'N'), 'STATUS OF RECORD LIMIT'); } } else { $startDownloadAgent = true; } if ($startDownloadAgent) { self::DownloadAgent($orm->getId(), $params['URL'], $attachToCrm); } } if (strlen($params["ACCOUNT_PAYED"]) > 0 && in_array($params["ACCOUNT_PAYED"], array('Y', 'N'))) { CVoxImplantAccount::SetPayedFlag($params["ACCOUNT_PAYED"]); } foreach (GetModuleEvents("voximplant", "onCallEnd", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(array('CALL_ID' => $arFields['CALL_ID'], 'CALL_TYPE' => $arFields['INCOMING'], 'PHONE_NUMBER' => $arFields['PHONE_NUMBER'], 'PORTAL_NUMBER' => $arFields['PORTAL_NUMBER'], 'PORTAL_USER_ID' => $arFields['PORTAL_USER_ID'], 'CALL_DURATION' => $arFields['CALL_DURATION'], 'CALL_START_DATE' => $arFields['CALL_START_DATE'], 'COST' => $arFields['COST'], 'COST_CURRENCY' => $arFields['COST_CURRENCY'], 'CALL_FAILED_CODE' => $arFields['CALL_FAILED_CODE'], 'CALL_FAILED_REASON' => $arFields['CALL_FAILED_REASON']))); } return true; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } /** * @var $arParams array * @var $arResult array * @var $this CBitrixComponent * @var $APPLICATION CMain * @var $USER CUser */ if (!CModule::IncludeModule('voximplant')) { return; } $arResult['INTERFACE_CHAT_OPTIONS'] = array(CVoxImplantConfig::INTERFACE_CHAT_ADD, CVoxImplantConfig::INTERFACE_CHAT_APPEND, CVoxImplantConfig::INTERFACE_CHAT_NONE); $arResult['INTERFACE_CHAT_ACTION'] = CVoxImplantConfig::GetChatAction(); if (!(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) { $this->IncludeComponentTemplate(); } return $arResult;
define("PUBLIC_AJAX_MODE", true); define("NO_KEEP_STATISTIC", "Y"); define("NO_AGENT_STATISTIC", "Y"); define("NOT_CHECK_PERMISSIONS", true); define("DisableEventsCheck", true); define("NO_AGENT_CHECK", true); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); if (!CModule::IncludeModule("voximplant")) { echo CUtil::PhpToJsObject(array('ERROR' => 'VI_MODULE_NOT_INSTALLED')); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"; die; } if (!CVoxImplantMain::CheckAccess()) { echo CUtil::PhpToJsObject(array('ERROR' => 'AUTHORIZE_ERROR')); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"; die; } if (check_bitrix_sessid()) { if ($_POST['VI_NOTICE_HIDE']) { $arSend['ERROR'] = ''; $arSend['RESULT'] = true; CVoxImplantConfig::HideNoticeOldConfigOfficePbx(); echo CUtil::PhpToJsObject($arSend); } else { echo CUtil::PhpToJsObject(array('ERROR' => 'UNKNOWN_ERROR')); } } else { echo CUtil::PhpToJsObject(array('BITRIX_SESSID' => bitrix_sessid(), 'ERROR' => 'SESSION_ERROR')); } require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php";
public static function AddConfigBySearchId($phone, $country = 'RU') { $melodyLang = 'EN'; $country = strtoupper($country); if (in_array($country, array('RU', 'UA', 'DE'))) { $melodyLang = $country; } $arFields = array('SEARCH_ID' => $phone, 'PHONE_NAME' => $phone, 'MELODY_LANG' => $melodyLang); $result = VI\ConfigTable::add($arFields); if ($result) { if (CVoxImplantConfig::GetPortalNumber() == CVoxImplantConfig::LINK_BASE_NUMBER) { CVoxImplantConfig::SetPortalNumber($arFields['SEARCH_ID']); } } CVoxImplantConfig::SetModeStatus(CVoxImplantConfig::MODE_RENT, true); return true; }
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } /** * @var $arParams array * @var $arResult array * @var $arResult['NAV_OBJECT'] CAllDBResult * @var $APPLICATION CMain * @var $USER CUser */ $APPLICATION->SetAdditionalCSS("/bitrix/components/bitrix/voximplant.main/templates/.default/telephony.css"); $numbersC = CVoxImplantConfig::GetPortalNumbers(); $portalNumber = CVoxImplantConfig::GetPortalNumber(); $numbers = array('' => GetMessage("VI_NUMBERS_DEFAULT")) + $numbersC; ?> <div class="bx-vi-block bx-vi-filter"> <form id="search_form" action="<?php echo POST_FORM_ACTION_URI; ?> " method="GET"> <input type="hidden" name="act" value="search"> <span class="filter-field"> <input name="FILTER" type="text" value="<?php echo htmlspecialcharsbx($arResult['FILTER']); ?> " class="tel-set-inp" placeholder="<?php echo GetMessage('VI_NUMBERS_SEARCH'); ?> " />
public static function AddLead($params) { if (!CModule::IncludeModule('crm')) { return false; } if (strlen($params['PHONE_NUMBER']) <= 0 || intval($params['USER_ID']) <= 0) { return false; } $dateNow = new Bitrix\Main\Type\DateTime(); $title = GetMessage($params['INCOMING'] ? 'VI_CRM_CALL_INCOMING' : 'VI_CRM_CALL_OUTGOING'); $arFields = array('TITLE' => $title . ' ' . $dateNow->format('H:i d.m.Y'), 'OPENED' => 'Y', 'PHONE_WORK' => $params['PHONE_NUMBER']); $statuses = CCrmStatus::GetStatusList("SOURCE"); if (isset($statuses['CALL'])) { $arFields['SOURCE_ID'] = 'CALL'; } $portalNumbers = CVoxImplantConfig::GetPortalNumbers(); $portalNumber = isset($portalNumbers[$params['SEARCH_ID']]) ? $portalNumbers[$params['SEARCH_ID']] : ''; if ($portalNumber) { $arFields['SOURCE_DESCRIPTION'] = GetMessage('VI_CRM_CALL_TO_PORTAL_NUMBER', array('#PORTAL_NUMBER#' => $portalNumber)); } $arFields['FM'] = CCrmFieldMulti::PrepareFields($arFields); $CCrmLead = new CCrmLead(false); $ID = $CCrmLead->Add($arFields, true, array('CURRENT_USER' => $params['USER_ID'], 'DISABLE_USER_FIELD_CHECK' => true)); $arErrors = array(); CCrmBizProcHelper::AutoStartWorkflows(CCrmOwnerType::Lead, $ID, CCrmBizProcEventType::Create, $arErrors); CVoxImplantHistory::WriteToLog($arFields, 'LEAD CREATED'); return $ID; }
} $arResult = array("ERROR" => $error, "ITEM" => array_merge($arResult["ITEM"], $arFields), "QUEUE" => array_flip($queue["U"]), "SIP_CONFIG" => array_merge($arResult["SIP_CONFIG"], $arFieldsSip)); } foreach (array("MELODY_WELCOME", "MELODY_WAIT", "MELODY_HOLD", "MELODY_VOICEMAIL", "WORKTIME_DAYOFF_MELODY") as $id) { if ($arResult["ITEM"][$id] > 0) { $res = CFile::GetFileArray($arResult["ITEM"][$id]); if ($res) { $arResult["ITEM"]["~" . $id] = $res; } else { $arResult["ITEM"][$id] = 0; } } } $arResult["ITEM"]["MELODY_LANG"] = empty($arResult["ITEM"]["MELODY_LANG"]) ? strtoupper(LANGUAGE_ID) : $arResult["ITEM"]["MELODY_LANG"]; $arResult["ITEM"]["MELODY_LANG"] = in_array($arResult["ITEM"]["MELODY_LANG"], array("RU", "EN", "DE")) ? $arResult["ITEM"]["MELODY_LANG"] : "EN"; $arResult["DEFAULT_MELODIES"] = CVoxImplantConfig::GetDefaultMelodies(false); if (IsModuleInstalled('bitrix24')) { $arResult['LINK_TO_DOC'] = in_array(LANGUAGE_ID, array("ru", "kz", "ua", "by")) ? 'https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=52&CHAPTER_ID=02564' : 'https://www.bitrixsoft.com/support/training/course/index.php?COURSE_ID=55&LESSON_ID=6635'; } else { $arResult['LINK_TO_DOC'] = in_array(LANGUAGE_ID, array("ru", "kz", "ua", "by")) ? 'https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=48&CHAPTER_ID=02699' : 'https://www.bitrixsoft.com/support/training/course/index.php?COURSE_ID=26&LESSON_ID=6734'; } //for work time block $arResult["TIME_ZONE_ENABLED"] = CTimeZone::Enabled(); $arResult["TIME_ZONE_LIST"] = CTimeZone::GetZones(); if (empty($arResult["ITEM"]["WORKTIME_TIMEZONE"])) { if (LANGUAGE_ID == "ru") { $arResult["ITEM"]["WORKTIME_TIMEZONE"] = "Europe/Moscow"; } elseif (LANGUAGE_ID == "de") { $arResult["ITEM"]["WORKTIME_TIMEZONE"] = "Europe/Berlin"; } elseif (LANGUAGE_ID == "ua") { $arResult["ITEM"]["WORKTIME_TIMEZONE"] = "Europe/Kiev";
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (isset($_REQUEST['AJAX_CALL']) && $_REQUEST['AJAX_CALL'] == 'Y') { return; } if (!CModule::IncludeModule('voximplant')) { return; } $mode = ''; if (in_array($_REQUEST['MODE'], array(CVoxImplantConfig::MODE_LINK, CVoxImplantConfig::MODE_RENT, CVoxImplantConfig::MODE_SIP))) { if (isset($_POST['MODE'])) { $mode = $_POST['MODE']; } else { if (isset($_GET['MODE'])) { $mode = $_GET['MODE']; } } } $arResult = array('MODE_LINK' => CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_LINK), 'MODE_RENT' => CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_RENT), 'MODE_SIP' => CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_SIP), 'MODE_ACTIVE' => $mode); if (!(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) { $this->IncludeComponentTemplate(); } return $arResult;
public static function GetConfigBySearchId($searchId) { return CVoxImplantConfig::GetConfigBySearchId($searchId); }
public function GetUserInfo($userId, $getPhoneAccess = false) { $userId = intval($userId); if ($userId <= 0) { $this->error = new CVoxImplantError(__METHOD__, 'USER_ID_NULL', 'UserId is not correct'); return false; } $userPassword = ''; $userBackphone = ''; $phoneEnable = false; $phonePassword = ''; $arExtParams = array('FIELDS' => array("ID"), 'SELECT' => array('UF_VI_PASSWORD', 'UF_VI_BACKPHONE', 'UF_VI_PHONE', 'UF_VI_PHONE_PASSWORD', 'UF_PHONE_INNER', 'UF_DEPARTMENT')); $dbUsers = CUser::GetList($sort_by = '', $dummy = '', array('ID' => $userId), $arExtParams); if ($arUser = $dbUsers->Fetch()) { if (strlen($arUser['UF_VI_PASSWORD']) > 0) { $userPassword = $arUser['UF_VI_PASSWORD']; } if (strlen($arUser['UF_VI_PHONE_PASSWORD']) > 0) { $phonePassword = $arUser['UF_VI_PHONE_PASSWORD']; } $userInnerPhone = $arUser['UF_PHONE_INNER']; $userBackphone = $arUser['UF_VI_BACKPHONE']; if ($arUser['UF_VI_PHONE'] == 'Y') { $phoneEnable = true; $getPhoneAccess = true; } $arUser['IS_EXTRANET'] = self::IsExtranet($arUser); unset($arUser['UF_DEPARTMENT']); } if ($userPassword == '' || $getPhoneAccess && $phonePassword == '') { $result = $this->GetUser($userId, $getPhoneAccess, true); if (!$result || $this->GetError()->error) { $this->error = new CVoxImplantError(__METHOD__, $this->GetError()->code, $this->GetError()->msg); return false; } $userPassword = $result->result->user_password; $phonePassword = $result->result->phone_password; global $USER_FIELD_MANAGER; $USER_FIELD_MANAGER->Update("USER", $userId, array('UF_VI_PASSWORD' => $userPassword, 'UF_VI_PHONE_PASSWORD' => $phonePassword)); } if ($userBackphone) { $portalPhones = CVoxImplantConfig::GetPortalNumbers(); if (!isset($portalPhones[$userBackphone])) { $userBackphone = ''; } } if ($userBackphone == '') { $userBackphone = CVoxImplantConfig::GetPortalNumber(); if ($userBackphone == CVoxImplantConfig::LINK_BASE_NUMBER) { $userBackphone = ''; } } $viAccount = new CVoxImplantAccount(); return array('call_server' => str_replace('voximplant.com', 'bitrixphone.com', $viAccount->GetCallServer()), 'user_login' => 'user' . $userId, 'user_password' => $userPassword, 'user_backphone' => $userBackphone, 'user_innerphone' => $userInnerPhone, 'phone_enable' => $phoneEnable, 'phone_login' => $phonePassword ? 'phone' . $userId : "", 'phone_password' => $phonePassword, 'user_extranet' => $arUser['IS_EXTRANET']); }
} $arResult['LINK_TO_BUY'] = ''; if (IsModuleInstalled('bitrix24')) { if (LANGUAGE_ID != 'kz') { $arResult['LINK_TO_BUY'] = '/settings/license_phone_sip.php'; } } else { if (LANGUAGE_ID == 'ru') { $arResult['LINK_TO_BUY'] = 'http://www.1c-bitrix.ru/buy/intranet.php#tab-call-link'; } else { if (LANGUAGE_ID == 'ua') { $arResult['LINK_TO_BUY'] = 'http://www.1c-bitrix.ua/buy/intranet.php#tab-call-link'; } else { if (LANGUAGE_ID == 'kz') { } else { if (LANGUAGE_ID == 'de') { $arResult['LINK_TO_BUY'] = 'https://www.bitrix24.de/prices/calls.php'; } else { $arResult['LINK_TO_BUY'] = 'https://www.bitrix24.com/prices/calls.php'; } } } } } $viAccount = new CVoxImplantAccount(); $arResult['ACCOUNT_NAME'] = $viAccount->GetAccountName(); $arResult['SIP_NOTICE_OLD_CONFIG_OFFICE_PBX'] = CVoxImplantConfig::GetNoticeOldConfigOfficePbx(); if (!(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) { $this->IncludeComponentTemplate(); } return $arResult;
public function Update($configId, $fields) { $configId = intval($configId); if ($configId <= 0) { $this->error = new CVoxImplantError(__METHOD__, 'CONFIG_ID_NULL', GetMessage('VI_SIP_CONFIG_ID_NULL')); return false; } $arUpdate = $this->PrepareFiedls($fields, self::CHECK_UPDATE); if (!$arUpdate) { return false; } if (isset($arUpdate['SEARCH_ID'])) { $orm = VI\ConfigTable::getList(array('filter' => array('=SEARCH_ID' => $arUpdate['SEARCH_ID'], '!=ID' => $configId))); if ($orm->fetch()) { $this->error = new CVoxImplantError(__METHOD__, 'SEARCH_ID_EXISTS', GetMessage('VI_SIP_SEARCH_ID_EXISTS')); return false; } } if (isset($arUpdate['PHONE_NAME'])) { $orm = VI\ConfigTable::getList(array('filter' => array('=PHONE_NAME' => $arUpdate['PHONE_NAME'], '!=ID' => $configId))); if ($orm->fetch()) { $this->error = new CVoxImplantError(__METHOD__, 'TITLE_EXISTS', GetMessage('VI_SIP_TITLE_EXISTS')); return false; } } if (isset($arUpdate['SEARCH_ID'])) { $result = \Bitrix\Voximplant\ConfigTable::getById($configId); $currentConfig = $result->fetch(); if ($currentConfig['SEARCH_ID'] == CVoxImplantConfig::GetPortalNumber()) { COption::SetOptionString("voximplant", "portal_number", $arUpdate['SEARCH_ID']); } VI\ConfigTable::update($configId, array('SEARCH_ID' => $arUpdate['SEARCH_ID'])); } if (isset($arUpdate['PHONE_NAME'])) { VI\ConfigTable::update($configId, array('PHONE_NAME' => $arUpdate['PHONE_NAME'])); } unset($arUpdate['SEARCH_ID']); unset($arUpdate['PHONE_NAME']); unset($arUpdate['CONFIG_ID']); if (empty($arUpdate)) { return true; } $orm = VI\SipTable::getList(array('filter' => array('=CONFIG_ID' => $configId))); $entity = $orm->fetch(); if (!$entity) { $this->error = new CVoxImplantError(__METHOD__, 'CONFIG_NOT_FOUND', GetMessage('VI_SIP_CONFIG_NOT_FOUND')); return false; } VI\SipTable::update($entity['ID'], $arUpdate); if (isset($arUpdate['SERVER']) || isset($arUpdate['LOGIN']) || isset($arUpdate['PASSWORD'])) { $orm = VI\SipTable::getById($entity['ID']); $sipConfig = $orm->fetch(); if ($entity['SERVER'] != $sipConfig['SERVER'] || $entity['LOGIN'] != $sipConfig['LOGIN'] || $entity['PASSWORD'] != $sipConfig['PASSWORD'] || $fields['NEED_UPDATE'] == 'Y') { $this->UpdateSipRegistration($sipConfig['REG_ID'], $sipConfig['SERVER'], $sipConfig['LOGIN'], $sipConfig['PASSWORD']); } } return true; }
public static function GetRecordLimit($mode = false) { $sipConnectorActive = CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_SIP); $recordLimit = COption::GetOptionInt("voximplant", "record_limit"); if ($recordLimit > 0 && !CVoxImplantAccount::IsPro()) { if ($mode == CVoxImplantConfig::MODE_SIP && $sipConnectorActive) { $recordLimitEnable = false; } else { $recordLimitEnable = true; $recordLimitRemaining = $recordLimit - CGlobalCounter::GetValue('vi_records', CGlobalCounter::ALL_SITES); $result = array('ENABLE' => $recordLimitEnable, 'LIMIT' => $recordLimit, 'REMAINING' => $recordLimitRemaining); } } else { $recordLimitEnable = false; } if (!$recordLimitEnable) { $result = array('ENABLE' => $recordLimitEnable, 'DEMO' => CVoxImplantAccount::IsDemo() && !$sipConnectorActive); } return $result; }
public static function lineOutgoingSipSet($arParams) { if (!CVoxImplantMain::CheckAccess()) { throw new \Bitrix\Rest\AccessException(); } $arParams = array_change_key_case($arParams, CASE_UPPER); $result = CVoxImplantConfig::SetPortalNumberByConfigId($arParams['CONFIG_ID']); if (!$result) { throw new Bitrix\Rest\RestException('Specified CONFIG_ID is not found', Bitrix\Rest\RestException::ERROR_ARGUMENT, CRestServer::STATUS_WRONG_REQUEST); } return 1; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (isset($_REQUEST['AJAX_CALL']) && $_REQUEST['AJAX_CALL'] == 'Y') { return; } if (!CModule::IncludeModule('voximplant')) { return; } $arResult = array(); $arResult['SIP_ENABLE'] = CVoxImplantConfig::GetModeStatus(CVoxImplantConfig::MODE_SIP); $arResult['LIST_SIP_NUMBERS'] = array(); $arResult['LINK_TO_BUY'] = ''; if (IsModuleInstalled('bitrix24')) { if (LANGUAGE_ID != 'kz') { $arResult['LINK_TO_BUY'] = '/settings/license_phone_sip.php'; } $arResult['LINK_TO_DOC'] = in_array(LANGUAGE_ID, array("ru", "kz", "ua", "by")) ? 'https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=52&CHAPTER_ID=02564' : 'https://www.bitrixsoft.com/support/training/course/index.php?COURSE_ID=55&LESSON_ID=6635'; } else { if (LANGUAGE_ID == 'ru') { $arResult['LINK_TO_BUY'] = 'http://www.1c-bitrix.ru/buy/intranet.php#tab-call-link'; } else { if (LANGUAGE_ID == 'ua') { //$arResult['LINK_TO_BUY'] = 'http://www.1c-bitrix.ua/buy/intranet.php#tab-call-link'; } else { if (LANGUAGE_ID == 'kz') { } else { if (LANGUAGE_ID == 'de') { $arResult['LINK_TO_BUY'] = 'https://www.bitrix24.de/prices/calls.php';
public static function AddLead($params) { if (!CModule::IncludeModule('crm')) { return false; } if (strlen($params['PHONE_NUMBER']) <= 0 || intval($params['USER_ID']) <= 0) { return false; } $result = VI\PhoneTable::getList(array('select' => array('USER_ID', 'PHONE_MNEMONIC'), 'filter' => array('=PHONE_NUMBER' => $params['PHONE_NUMBER']))); if ($row = $result->fetch()) { return false; } $title = GetMessage($params['INCOMING'] ? 'VI_CRM_CALL_INCOMING' : 'VI_CRM_CALL_OUTGOING'); $arFields = array('TITLE' => $params['PHONE_NUMBER'] . ' - ' . $title, 'OPENED' => 'Y', 'PHONE_WORK' => $params['PHONE_NUMBER']); $statuses = CCrmStatus::GetStatusList("SOURCE"); if (isset($statuses[$params['CRM_SOURCE']])) { $arFields['SOURCE_ID'] = $params['CRM_SOURCE']; } else { if (isset($statuses['CALL'])) { $arFields['SOURCE_ID'] = 'CALL'; } else { if (isset($statuses['OTHER'])) { $arFields['SOURCE_ID'] = 'OTHER'; } } } $portalNumbers = CVoxImplantConfig::GetPortalNumbers(); $portalNumber = isset($portalNumbers[$params['SEARCH_ID']]) ? $portalNumbers[$params['SEARCH_ID']] : ''; if ($portalNumber) { $arFields['SOURCE_DESCRIPTION'] = GetMessage('VI_CRM_CALL_TO_PORTAL_NUMBER', array('#PORTAL_NUMBER#' => $portalNumber)); } $arFields['FM'] = CCrmFieldMulti::PrepareFields($arFields); $CCrmLead = new CCrmLead(false); $ID = $CCrmLead->Add($arFields, true, array('CURRENT_USER' => $params['USER_ID'], 'DISABLE_USER_FIELD_CHECK' => true)); $arErrors = array(); CCrmBizProcHelper::AutoStartWorkflows(CCrmOwnerType::Lead, $ID, CCrmBizProcEventType::Create, $arErrors); CVoxImplantHistory::WriteToLog($arFields, 'LEAD CREATED'); return $ID; }
public static function Complete($callId, $device = 'WEBRTC') { $res = VI\CallTable::getList(array('select' => array('ID', 'CALL_ID', 'CRM_LEAD', 'CALLER_ID', 'USER_ID', 'TRANSFER_USER_ID', 'ACCESS_URL', 'CRM', 'CONFIG_ID'), 'filter' => array('=CALL_ID' => $callId))); $call = $res->fetch(); if (!$call) { return false; } VI\CallTable::update($call['ID'], array('USER_ID' => $call['TRANSFER_USER_ID'], 'TRANSFER_USER_ID' => 0)); CVoxImplantHistory::TransferMessage($call['USER_ID'], $call['TRANSFER_USER_ID'], $call['CALLER_ID']); self::SendPullEvent(array('COMMAND' => 'completeTransfer', 'USER_ID' => $call['USER_ID'], 'TRANSFER_USER_ID' => $call['TRANSFER_USER_ID'], 'CALL_ID' => $call['CALL_ID'])); $crmDataSend = false; if ($call['CRM'] == 'Y' && $call['CONFIG_ID'] > 0) { $config = CVoxImplantConfig::GetConfig($call['CONFIG_ID']); if (isset($config['CRM_TRANSFER_CHANGE']) && $config['CRM_TRANSFER_CHANGE'] == 'Y') { if ($call['CRM_LEAD'] > 0) { $crmData = array('LEAD_DATA' => array('ID' => $call['CRM_LEAD'], 'ASSIGNED_BY_ID' => 0)); } else { $crmData = CVoxImplantCrmHelper::GetDataForPopup($call['CALL_ID'], $call['CALLER_ID']); } if (isset($crmData['LEAD_DATA']) && $crmData['LEAD_DATA']['ASSIGNED_BY_ID'] >= 0 && $call['TRANSFER_USER_ID'] > 0 && $crmData['LEAD_DATA']['ASSIGNED_BY_ID'] != $call['TRANSFER_USER_ID']) { CVoxImplantCrmHelper::UpdateLead($crmData['LEAD_DATA']['ID'], array('ASSIGNED_BY_ID' => $call['TRANSFER_USER_ID'])); $crmDataSend = CVoxImplantCrmHelper::GetDataForPopup($call['CALL_ID'], $call['CALLER_ID'], $call['TRANSFER_USER_ID']); } } } self::SendPullEvent(array('COMMAND' => 'completeTransfer', 'USER_ID' => $call['TRANSFER_USER_ID'], 'TRANSFER_USER_ID' => $call['TRANSFER_USER_ID'], 'CALL_DEVICE' => $device, 'CALL_ID' => $call['CALL_ID'], 'CRM' => $crmDataSend)); return true; }
define("IM_AJAX_INIT", true); define("PUBLIC_AJAX_MODE", true); define("NO_KEEP_STATISTIC", "Y"); define("NO_AGENT_STATISTIC", "Y"); define("NOT_CHECK_PERMISSIONS", true); define("DisableEventsCheck", true); define("NO_AGENT_CHECK", true); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; if (!CModule::IncludeModule("voximplant")) { echo CUtil::PhpToJsObject(array('ERROR' => 'VI_MODULE_NOT_INSTALLED')); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"; die; } if (!CVoxImplantMain::CheckAccess()) { echo CUtil::PhpToJsObject(array('ERROR' => 'AUTHORIZE_ERROR')); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"; die; } if (!check_bitrix_sessid()) { echo CUtil::PhpToJsObject(array('BITRIX_SESSID' => bitrix_sessid(), 'ERROR' => 'SESSION_ERROR')); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"; die; } if ($_POST['VI_SET_CHAT_ACTION'] == 'Y') { $arSend['ERROR'] = ''; CVoxImplantConfig::SetChatAction($_POST['ACTION']); echo CUtil::PhpToJsObject($arSend); } else { echo CUtil::PhpToJsObject(array('ERROR' => 'UNKNOWN_ERROR')); } require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php";