public static function execute() { global $USER; $result = array(); $error = false; if (!CModule::IncludeModule('voximplant')) { $error = 'Module voximplant is not installed.'; } else { if (!is_object($USER) || !$USER->IsAuthorized()) { $error = GetMessage('ACCESS_DENIED'); } else { if (!CVoxImplantMain::CheckAccess()) { $error = GetMessage('ACCESS_DENIED'); } else { if (!check_bitrix_sessid()) { $error = GetMessage('ACCESS_DENIED'); } else { if ($_REQUEST["act"] == "edit") { $result = self::executeEditPhones($error); } else { if ($_REQUEST["act"] == "getInfo") { $result = self::executeGetInfo($error); } else { if ($_REQUEST["act"] == "option") { $result = self::executeSaveOption($error); } } } } } } } self::returnJson(array_merge(array('result' => $error === false ? 'ok' : 'error', 'error' => CharsetConverter::ConvertCharset($error, SITE_CHARSET, 'UTF-8')), $result)); }
public static function checkPhoneNumber($number) { if (!self::isEnabled()) { return false; } return CVoxImplantMain::Enable($number); }
public static function GetNoticeOldConfigOfficePbx() { $result = false; if (COption::GetOptionString("voximplant", "notice_old_config_office_pbx") == 'Y' && CVoxImplantMain::CheckAccess()) { $result = true; } return $result; }
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } ?> <div class="bx-vi-phones-title"><?php echo GetMessage('VI_PHONES_TITLE'); ?> </div> <div class="bx-vi-phones-block-1"><?php echo GetMessage('VI_PHONES_HELP_1'); ?> </div> <div class="bx-vi-phones-block-2"><?php echo GetMessage('VI_PHONES_HELP_2', array('#LINK_USERS_START#' => '<a href="' . CVoxImplantMain::GetPublicFolder() . 'users.php">', '#LINK_COURSE_1_START#' => '<a href="' . $arResult['LINK_TO_DOC'] . '" target="_blank">', '#LINK_COURSE_2_START#' => '<a href="' . $arResult['LINK_TO_DOC'] . '" target="_blank">', '#LINK_END#' => '</a>', '#IMAGE_CONNECT#' => '<div class="bx-vi-phones-connect bx-vi-phones-connect-' . LANGUAGE_ID . '"></div>', '#IMAGE_CALL_WITHOUT_BROWER#' => '<div class="bx-vi-phones-call-without-browser bx-vi-phones-call-without-browser-' . LANGUAGE_ID . '"></div>')); ?> </div>
<?php 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_ADD']) { $arSend['ERROR'] = ''; CUtil::decodeURIComponent($_POST); $viSip = new CVoxImplantSip(); $result = $viSip->Add(array('TYPE' => strtolower($_POST['TYPE']), 'PHONE_NAME' => $_POST['TITLE'], 'SERVER' => $_POST['SERVER'], 'LOGIN' => $_POST['LOGIN'], 'PASSWORD' => $_POST['PASSWORD'])); if ($result) { $arSend['RESULT'] = $result; } else { $arSend['ERROR'] = $viSip->GetError()->msg; }
public static function Answer($callId) { $res = VI\CallTable::getList(array('select' => array('ID', 'ACCESS_URL'), 'filter' => array('=CALL_ID' => $callId))); $call = $res->fetch(); if (!$call) { return false; } global $USER; $ViMain = new CVoxImplantMain($USER->GetId()); $result = $ViMain->GetDialogInfo($_POST['NUMBER']); if ($result) { echo CUtil::PhpToJsObject(array('DIALOG_ID' => $result['DIALOG_ID'], 'HR_PHOTO' => $result['HR_PHOTO'], 'ERROR' => '')); } else { echo CUtil::PhpToJsObject(array('CODE' => $ViMain->GetError()->code, 'ERROR' => $ViMain->GetError()->msg)); } }
} } if ($skipSaving) { $error = $viSip->GetError()->msg; } else { if (($res = Bitrix\Voximplant\ConfigTable::update($arParams["ID"], $arFields)) && $res->isSuccess()) { // TODO We should work with other socialnetwork entities $toDrop = array_diff($arResult["~QUEUE"], $queue["U"]); $toAdd = array_diff($queue["U"], array_keys($arResult["QUEUE"])); foreach ($toDrop as $primary => $id) { Bitrix\Voximplant\QueueTable::delete($primary); } foreach ($toAdd as $k) { Bitrix\Voximplant\QueueTable::add(array("CONFIG_ID" => $arParams["ID"], "USER_ID" => $k, "STATUS" => "OFFLINE")); } LocalRedirect(CVoxImplantMain::GetPublicFolder() . 'lines.php?MODE=' . $arResult["ITEM"]["PORTAL_MODE"]); } $error = $res->getErrorMessages(); } $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; } } }
public static function SendMessageToChat($userId, $phoneNumber, $incomingType, $message) { $ViMain = new CVoxImplantMain($userId); $dialogInfo = $ViMain->GetDialogInfo($phoneNumber, "", false); $ViMain->SendChatMessage($dialogInfo['DIALOG_ID'], $incomingType, $message); return true; }
</tr> </table>', 'UF_PHONE_INNER' => '<span id="innerphone_' . $user['ID'] . '">' . $user["UF_PHONE_INNER"] . '</span>', 'UF_VI_BACKPHONE' => '<span id="backphone_' . $user['ID'] . '">' . (array_key_exists($user["UF_VI_BACKPHONE"], $numbers) ? $numbers[$user["UF_VI_BACKPHONE"]] : GetMessage('VI_NUMBERS_DEFAULT')) . '</span>' . '<span id="backphone_' . $user['ID'] . '_value" style="display:none;">' . $user["UF_VI_BACKPHONE"] . '</span>'); $arCols['UF_VI_PHONE'] = '<span id="vi_phone_' . $user['ID'] . '"' . ($user["UF_VI_PHONE"] == "Y" ? ' class="bx-vi-phone-enable"' : '') . '>' . ($user["UF_VI_PHONE"] == "Y" ? GetMessage('VI_NUMBERS_PHONE_DEVICE_ENABLE') : GetMessage('VI_NUMBERS_PHONE_DEVICE_DISABLE')) . '</span>' . '<span style="display:none" id="vi_phone_enable_' . $user['ID'] . '">' . ($user["UF_VI_PHONE"] == "Y" ? 'Y' : 'N') . '</span>'; $arCols['EDIT'] = '<span id="create_' . $user['ID'] . '">' . '<a href="#" onclick="BX.Voximplant.Numbers.edit(' . $user['ID'] . '); return false; ">' . GetMessage('VI_NUMBERS_EDIT') . '</a>' . '</span>'; $arRows[$user['ID']] = array('data' => $user, 'columns' => $arCols); } $arResult['ROWS'] = $arRows; $arHeaders = array(array('id' => 'NAME', 'name' => GetMessage('VI_NUMBERS_GRID_NAME'), 'sort' => 'name', 'default' => true, 'editable' => false), array('id' => 'UF_PHONE_INNER', 'name' => GetMessage('VI_NUMBERS_GRID_CODE'), 'default' => true, 'editable' => false), array('id' => 'UF_VI_BACKPHONE', 'name' => GetMessage('VI_NUMBERS_GRID_PHONE'), 'default' => true, 'editable' => false)); $arHeaders[] = array('id' => 'UF_VI_PHONE', 'name' => GetMessage('VI_NUMBERS_GRID_PHONE_DEVICE'), 'default' => true, 'editable' => false); $arHeaders[] = array('id' => 'EDIT', 'name' => '', 'default' => true, 'editable' => false); $APPLICATION->IncludeComponent('bitrix:main.interface.grid', '', array('GRID_ID' => $arResult['GRID_ID'], 'HEADERS' => $arHeaders, 'ROWS' => $arResult['ROWS'], 'NAV_OBJECT' => $arResult['NAV_OBJECT'])); ?> <div style="padding-top: 30px;"> <div class="tel-set-item-alert"> <?php echo GetMessage('VI_CONFIG_NOTICE_2', array('#LINK#' => '<a href="' . CVoxImplantMain::GetPublicFolder() . 'configs.php">' . GetMessage('VI_CONFIG_PAGE_CONFIGS') . '</a>')); ?> </div> </div> <script type="text/javascript"> BX.message({ VI_NUMBERS_CREATE_TITLE : '<?php echo GetMessageJS("VI_NUMBERS_CREATE_TITLE"); ?> ', VI_NUMBERS_ERR_AJAX : '<?php echo GetMessageJS("VI_NUMBERS_ERR_AJAX"); ?> ', VI_NUMBERS_GRID_CODE : '<?php echo GetMessageJS("VI_NUMBERS_GRID_CODE");
if (is_array($arResult["UserFieldsContact"]["DATA"])) { foreach ($arResult["UserFieldsContact"]["DATA"] as $field => $arUserField) { if (is_array($arUserField["VALUE"]) && count($arUserField["VALUE"]) > 0 || !is_array($arUserField["VALUE"]) && StrLen($arUserField["VALUE"]) > 0) { ?> <tr> <td class="user-profile-nowrap"><?php echo $arUserField["NAME"] . ":"; ?> </td> <td><?php switch ($field) { case "PERSONAL_MOBILE": case "WORK_PHONE": case "PERSONAL_PNONE": echo $arUserField["VALUE"]; if (CModule::IncludeModule('voximplant') && CVoxImplantMain::Enable($arResult["User"][$field])) { ?> <span class="sonet_call_btn" onclick="BXIM.phoneTo('<?php echo CUtil::JSEscape($arResult["User"][$field]); ?> ');"></span> <?php } break; default: echo $arUserField["VALUE"]; } ?> </td> </tr><?php }
public static function lineOutgoingGet() { if (!CVoxImplantMain::CheckAccess()) { throw new \Bitrix\Rest\AccessException(); } return CVoximplantConfig::GetPortalNumber(); }
die; } $APPLICATION->SetAdditionalCSS("/bitrix/components/bitrix/voximplant.main/templates/.default/telephony.css"); /*$APPLICATION->IncludeComponent( 'bitrix:main.interface.filter', '', array( 'GRID_ID'=>$arResult["GRID_ID"], 'FILTER'=> $arResult["FILTER"], //"FILTER_PRESETS"=>$arParams["~FILTER_PRESETS"], 'FILTER_ROWS'=>array("PHONE_NUMBER"=>1, "CALL_DURATION" => 1, "CALL_START_DATE" => 1),//$arParams['~FILTER_ROWS'], //'FILTER_FIELDS'=>$arResult["FILTER"], //'OPTIONS'=>$arParams['~OPTIONS'], //'FILTER_INFO'=>$arResult['FILTER_INFO'], //'RENDER_FILTER_INTO_VIEW'=>isset($arParams['~RENDER_FILTER_INTO_VIEW']) ? $arParams['~RENDER_FILTER_INTO_VIEW'] : '', //'HIDE_FILTER'=>"Y"//isset($arParams['~HIDE_FILTER']) ? $arParams['~HIDE_FILTER'] : false ), $component, array('HIDE_ICONS'=>true) );*/ $buttons = array(array("TEXT" => GetMessage("TEL_STAT_BACK"), "TITLE" => GetMessage("TEL_STAT_BACK_TITLE"), "LINK" => CVoxImplantMain::GetPublicFolder(), "ICON" => "go-back")); if ($_GET['USER_ID'] || $_GET['CODE']) { $buttons[] = array("TEXT" => GetMessage("TEL_STAT_FILTER_CANCEL"), "TITLE" => GetMessage("TEL_STAT_FILTER_CANCEL_TITLE"), "LINK" => CVoxImplantMain::GetPublicFolder() . 'detail.php', "ICON" => "btn-unlock"); } $APPLICATION->IncludeComponent("bitrix:main.interface.toolbar", "", array("BUTTONS" => $buttons), $component); ?> <div class="tel-stat-grid-wrap"> <?php $APPLICATION->IncludeComponent("bitrix:main.interface.grid", "", array("GRID_ID" => $arResult["GRID_ID"], "HEADERS" => $arResult["HEADERS"], "ROWS" => $arResult["ELEMENTS_ROWS"], "NAV_OBJECT" => $arResult["NAV_OBJECT"], "FOOTER" => array(array("title" => GetMessage("CT_BLL_SELECTED"), "value" => $arResult["ROWS_COUNT"])), "AJAX_MODE" => "Y"), $component, array("HIDE_ICONS" => "Y")); ?> </div>
> <div class="tel-set-inner"> <?php $APPLICATION->IncludeComponent("bitrix:voximplant.config.sip", "", array()); ?> </div> </div> <div id="tel-set-corner" class="tel-set-corner"></div> </div> </div> </div> <div class="tel-set-phone-numbers"> <div class="tel-set-item-alert"> <?php echo GetMessage('VI_CONFIG_NOTICE_NEW', array('#LINK_CONFIG#' => '<a href="' . CVoxImplantMain::GetPublicFolder() . 'configs.php">' . GetMessage('VI_CONFIG_PAGE_CONFIG') . '</a>', '#LINK_USERS#' => '<a href="' . CVoxImplantMain::GetPublicFolder() . 'users.php">' . GetMessage('VI_CONFIG_PAGE_CONFIG_USERS') . '</a>')); ?> </div> </div> <script type="text/javascript"> var setPost = { corner : BX('tel-set-corner'), anim_block : null, btn : null, wrap_block : BX('tel-set-block'), block_list : null, table : BX('tel-block-table'), active_cell_num : null, over_cell_num : null,
$userTimeout[$queue['USER_ID']] = true; CVoxImplantMain::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $queue['USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'MARK' => 'timeout_hit_3')); } if ($call['TRANSFER_USER_ID'] > 0) { $userTimeout[$call['TRANSFER_USER_ID']] = true; CVoxImplantTransfer::SendPullEvent(array('COMMAND' => 'timeoutTransfer', 'USER_ID' => $call['TRANSFER_USER_ID'], 'CALL_ID' => $call['CALL_ID'])); } if ($call['PORTAL_USER_ID'] > 0 && !$userTimeout[$call['PORTAL_USER_ID']]) { $userTimeout[$call['PORTAL_USER_ID']] = true; CVoxImplantMain::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $call['PORTAL_USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'MARK' => 'timeout_hit_4')); } if ($call['USER_ID'] > 0 && !$userTimeout[$call['USER_ID']]) { CVoxImplantMain::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $call['USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'MARK' => 'timeout_hit_5')); } } else { CVoxImplantMain::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $params['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'MARK' => 'timeout_hit_6')); } CVoxImplantHistory::WriteToLog($call, 'PORTAL HANGUP'); echo json_encode(array('result' => 'OK')); } else { if ($params["COMMAND"] == "GetNextAction") { if ($params['QUEUE_TYPE'] == CVoxImplantConfig::QUEUE_TYPE_ALL) { $result = CVoxImplantIncoming::GetQueue(array('SEARCH_ID' => $params['PHONE_NUMBER'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['CALLER_ID'], 'LAST_TYPE_CONNECT' => $params['LAST_TYPE_CONNECT'], 'LOAD_QUEUE' => 'N', 'SEND_INVITE' => 'N')); CVoxImplantHistory::WriteToLog($result, 'GET NEXT ACTION - QUEUE'); } else { $result = CVoxImplantIncoming::GetNextAction(array('SEARCH_ID' => $params['PHONE_NUMBER'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['CALLER_ID'], 'LAST_USER_ID' => $params['LAST_USER_ID'], 'LAST_TYPE_CONNECT' => $params['LAST_TYPE_CONNECT'], 'LAST_ANSWER_USER_ID' => $params['LAST_ANSWER_USER_ID'], 'EXCLUDE_USERS' => $excludeUsers)); CVoxImplantHistory::WriteToLog($result, 'GET NEXT ACTION'); } echo json_encode($result); } else { if ($params["COMMAND"] == "GetNextInQueue") {
if ($_POST['COMMAND'] == 'onetimekey') { $ViMain = new CVoxImplantMain($userId); $result = $ViMain->GetOneTimeKey($_POST['KEY']); if (!$result) { echo CUtil::PhpToJsObject(array('CODE' => $ViMain->GetError()->code, 'ERROR' => $ViMain->GetError()->msg)); } else { echo CUtil::PhpToJsObject(array('HASH' => $result, 'ERROR' => '')); } } else { if ($_POST['COMMAND'] == 'authorize_error') { $ViMain = new CVoxImplantMain($userId); $ViMain->ClearUserInfo(); $ViMain->ClearAccountInfo(); } else { if ($_POST['COMMAND'] == 'init') { $ViMain = new CVoxImplantMain($userId); $result = $ViMain->GetDialogInfo($_POST['NUMBER']); if ($result) { echo CUtil::PhpToJsObject(array('DIALOG_ID' => $result['DIALOG_ID'], 'HR_PHOTO' => $result['HR_PHOTO'], 'ERROR' => '')); } else { echo CUtil::PhpToJsObject(array('CODE' => $ViMain->GetError()->code, 'ERROR' => $ViMain->GetError()->msg)); } } else { if ($_POST['COMMAND'] == 'deviceStartCall') { $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']); if (CVoxImplantUser::GetPhoneActive($USER->GetId())) { CVoxImplantOutgoing::StartCall($USER->GetId(), $_POST['PARAMS']['NUMBER']); } } else { if ($_POST['COMMAND'] == 'deviceHungup') { $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
', '<?php echo CUtil::JSEscape($arItem["PHONE_NUMBER"]); ?> ', this.parentNode);"></span> </div> <?php } ?> <?php } ?> </div> <div class="tel-set-item-alert" style="margin-top: 25px"> <?php echo GetMessage('BLACKLIST_ABOUT_2', array('#LINK#' => '<a href="' . CVoxImplantMain::GetPublicFolder() . 'detail.php?CODE=423">' . GetMessage('BLACKLIST_ABOUT_LINK') . '</a>')); ?> </div> </div> <script> BX.message({ BLACKLIST_DELETE_ERROR: '<?php echo GetMessageJS('BLACKLIST_DELETE_ERROR'); ?> ', BLACKLIST_DELETE_CONFIRM : '<?php echo GetMessageJS("BLACKLIST_DELETE_CONFIRM"); ?> ' });
<?php } ?> <div class="tel-set-main-wrap tel-set-main-wrap-white" id="vi_rent_options_div" style="display: none; margin-top: 15px;"> <div class="tel-set-inner-wrap"> <div class="tel-set-select-block" id="rent-select-placeholder"> <div class="tel-set-item-select-wrap"> <select class="tel-set-item-select"> <option style="color: #888888"><?php echo GetMessage('VI_CONFIG_RENT_COUNTRY'); ?> </option> <option style="color: #888888">...</option> </select> </div> </div> <div id="rent-numbers-placeholder"></div> </div> </div> <script type="text/javascript"> BX.VoxImplant.rentPhone.init({ 'selectPlaceholder': BX('rent-select-placeholder'), 'numbersPlaceholder': BX('rent-numbers-placeholder'), 'location': BX.message('LANGUAGE_ID').toUpperCase(), 'publicFolder': '<?php echo CVoxImplantMain::GetPublicFolder(); ?> ' }) </script>
if (isset($params['CALLER_ID']) && isset($params['ACCOUNT_SEARCH_ID'])) { $params['CALLER_ID'] = $params['ACCOUNT_SEARCH_ID']; } $result = CVoxImplantOutgoing::Init(array('CONFIG_ID' => $params['CONFIG_ID'], 'USER_ID' => $params['USER_ID'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'CALL_ID' => $params['CALL_ID'], 'CALL_ID_TMP' => $params['CALL_ID_TMP'] ? $params['CALL_ID_TMP'] : '', 'CALL_DEVICE' => $params['CALL_DEVICE'], 'CALLER_ID' => $params['CALLER_ID'], 'ACCESS_URL' => $params['ACCESS_URL'], 'CRM' => $params['CRM'])); foreach (GetModuleEvents("voximplant", "onCallInit", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(array('CALL_ID' => $params['CALL_ID'], 'CALL_ID_TMP' => $params['CALL_ID_TMP'] ? $params['CALL_ID_TMP'] : '', 'CALL_TYPE' => 1, 'ACCOUNT_SEARCH_ID' => $params['ACCOUNT_SEARCH_ID'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'CALLER_ID' => $params['CALLER_ID']))); } echo 'OK'; } else { if ($params["COMMAND"] == "IncomingInvite") { $result = CVoxImplantIncoming::Init(array('SEARCH_ID' => $params['PHONE_NUMBER'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['CALLER_ID'], 'DIRECT_CODE' => $params['DIRECT_CODE'], 'ACCESS_URL' => $params['ACCESS_URL'])); CVoxImplantHistory::WriteToLog($result, 'PORTAL ANSWER'); echo json_encode($result); } else { if ($params["COMMAND"] == "StartCall") { CVoxImplantMain::CallStart($params['CALL_ID'], $params['USER_ID'], $params['CALL_DEVICE'], $params['EXTERNAL'] == 'Y'); echo json_encode(array('result' => 'OK')); } else { if ($params["COMMAND"] == "HangupCall") { $res = Bitrix\Voximplant\CallTable::getList(array('filter' => array('=CALL_ID' => $params['CALL_ID']))); $userTimeout = array(); if ($call = $res->fetch()) { $res = Bitrix\Voximplant\QueueTable::getList(array('filter' => array('=CONFIG_ID' => $call['CONFIG_ID']))); while ($queue = $res->fetch()) { if ($call['TRANSFER_USER_ID'] == $queue['USER_ID']) { continue; } $userTimeout[$queue['USER_ID']] = true; CVoxImplantIncoming::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $queue['USER_ID'], 'CALL_ID' => $call['CALL_ID'])); } if ($call['TRANSFER_USER_ID'] > 0 && !isset($userTimeout[$call['TRANSFER_USER_ID']])) {