public static function GetPortalNumbers() { $result = array(); $res = VI\ConfigTable::getList(); while ($row = $res->fetch()) { if (strlen($row['PHONE_NAME']) <= 0) { $row['PHONE_NAME'] = substr($row['SEARCH_ID'], 0, 3) == 'reg' ? GetMessage('VI_CONFIG_SIP_CLOUD_DEF') : GetMessage('VI_CONFIG_SIP_OFFICE_DEF'); $row['PHONE_NAME'] = str_replace('#ID#', $row['ID'], $row['PHONE_NAME']); } $result[$row['SEARCH_ID']] = htmlspecialcharsbx($row['PHONE_NAME']); } $linkNumber = CVoxImplantPhone::GetLinkNumber(); $result['LINK_BASE_NUMBER'] = $linkNumber == '' ? GetMessage('VI_CONFIG_LINK_DEF') : '+' . $linkNumber; return $result; }
if ($row = $result->fetch()) { $result = CVoxImplantPhone::EnqueueDeactivatePhoneNumber($row['SEARCH_ID']); if (!$result) { $arSend['ERROR'] = 'ERROR'; } } } echo CUtil::PhpToJsObject($arSend); } else { if ($_POST['VI_CANCEL_UNLINK_NUMBER'] == 'Y') { $arSend['ERROR'] = ''; $_POST['NUMBER_ID'] = intval($_POST['NUMBER_ID']); if ($_POST['NUMBER_ID'] > 0) { $result = Bitrix\Voximplant\ConfigTable::getById($_POST['NUMBER_ID']); if ($row = $result->fetch()) { $result = CVoxImplantPhone::CancelDeactivatePhoneNumber($row['SEARCH_ID']); if (!$result) { $arSend['ERROR'] = 'ERROR'; } } } echo CUtil::PhpToJsObject($arSend); } else { echo CUtil::PhpToJsObject(array('ERROR' => 'UNKNOWN_ERROR')); } } } } } } }
static function GetUserData($arParams = array()) { $getDepartment = $arParams['DEPARTMENT'] == 'N' ? false : true; $getHrPhoto = $arParams['HR_PHOTO'] == 'Y' ? true : false; $getPhones = $arParams['PHONES'] == 'Y' ? true : false; $useCache = !$getPhones && $arParams['USE_CACHE'] == 'Y' ? true : false; $showOnline = $arParams['SHOW_ONLINE'] == 'N' ? false : true; $arFilter = array(); if (isset($arParams['ID']) && is_array($arParams['ID']) && !empty($arParams['ID'])) { foreach ($arParams['ID'] as $key => $value) { if (intval($value) > 0) { $arParams['ID'][$key] = intval($value); } } $arFilter['=ID'] = $arParams['ID']; } else { if (isset($arParams['ID']) && intval($arParams['ID']) > 0) { $arFilter['=ID'] = array(intval($arParams['ID'])); } } if (empty($arFilter)) { return false; } $nameTemplate = self::GetUserNameTemplate(SITE_ID); $nameTemplateSite = CSite::GetNameFormat(false); $bIntranetEnable = false; if (IsModuleInstalled('intranet') && CModule::IncludeModule('intranet')) { $bIntranetEnable = true; } $bVoximplantEnable = IsModuleInstalled('voximplant'); $bColorEnabled = IM\Color::isEnabled(); if ($useCache) { global $USER; $obCache = new CPHPCache(); $cache_ttl = intval($arParams['CACHE_TTL']); if ($cache_ttl <= 0) { $cache_ttl = defined("BX_COMP_MANAGED_CACHE") ? 18144000 : 1800; } $cache_id = 'user_data_v8_' . (is_object($USER) ? $USER->GetID() : 'AGENT') . '_' . implode('|', $arFilter['=ID']) . '_' . $nameTemplate . '_' . $nameTemplateSite . '_' . $getPhones . '_' . $getDepartment . '_' . $bIntranetEnable . '_' . $bVoximplantEnable . '_' . LANGUAGE_ID . '_' . $bColorEnabled; $cache_dir = '/bx/imc/userdata'; if ($obCache->InitCache($cache_ttl, $cache_id, $cache_dir)) { $arCacheResult = $obCache->GetVars(); if ($showOnline) { $arOnline = CIMStatus::GetList(array('ID' => array_keys($arCacheResult['users']), 'GET_OFFLINE' => 'Y')); } foreach ($arCacheResult['users'] as $userId => $value) { $arCacheResult['users'][$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arCacheResult['users'][$userId]['birthday']) : false; if ($showOnline) { $arCacheResult['users'][$userId]['status'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['status'] : 'offline'; $arCacheResult['users'][$userId]['idle'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['idle'] : 0; $arCacheResult['users'][$userId]['mobileLastDate'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['mobileLastDate'] : 0; if ($arOnline['users'][$userId]) { $arCacheResult['users'][$userId]['color'] = $arOnline['users'][$userId]['color']; } } if ($getHrPhoto && !isset($arCacheResult['hrphoto'])) { $arPhotoHrTmp = CFile::ResizeImageGet($arCacheResult['source'][$userId]["PERSONAL_PHOTO"], array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true); $arCacheResult['hrphoto'][$userId] = empty($arPhotoHrTmp['src']) ? '/bitrix/js/im/images/hidef-avatar-v3.png' : $arPhotoHrTmp['src']; // TODO REMOVE DEFAULT } } return $arCacheResult; } } $arSelect = array("ID", "LAST_NAME", "NAME", "LOGIN", "PERSONAL_PHOTO", "SECOND_NAME", "PERSONAL_BIRTHDAY", "WORK_POSITION", "PERSONAL_GENDER", "EXTERNAL_AUTH_ID"); if ($getPhones) { $arSelect[] = 'WORK_PHONE'; $arSelect[] = 'PERSONAL_PHONE'; $arSelect[] = 'PERSONAL_MOBILE'; } if ($bIntranetEnable) { $arSelect[] = 'UF_PHONE_INNER'; $arSelect[] = 'UF_DEPARTMENT'; } if ($bVoximplantEnable) { $arSelect[] = 'UF_VI_PHONE'; $arSelect[] = 'UF_PHONE_INNER'; } $arUsers = array(); $arUserInGroup = array(); $arPhones = array(); $arWoUserInGroup = array(); $arHrPhoto = array(); $arSource = array(); $query = new \Bitrix\Main\Entity\Query(\Bitrix\Main\UserTable::getEntity()); $query->registerRuntimeField('', new \Bitrix\Main\Entity\ReferenceField('ref', 'Bitrix\\Im\\StatusTable', array('=this.ID' => 'ref.USER_ID'))); $query->addSelect('ref.COLOR', 'COLOR')->addSelect('ref.STATUS', 'STATUS')->addSelect('ref.IDLE', 'IDLE')->addSelect('ref.MOBILE_LAST_DATE', 'MOBILE_LAST_DATE'); $sago = Bitrix\Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime('-180'); $query->registerRuntimeField('', new \Bitrix\Main\Entity\ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN LAST_ACTIVITY_DATE > ' . $sago . ' THEN \'Y\' ELSE \'N\' END')); $query->addSelect('IS_ONLINE_CUSTOM'); foreach ($arSelect as $value) { $query->addSelect($value); } foreach ($arFilter as $key => $value) { $query->addFilter($key, $value); } $resultQuery = $query->exec(); global $USER; $arExtraUser = array(); while ($arUser = $resultQuery->fetch()) { foreach ($arUser as $key => $value) { $arUser[$key] = !is_array($value) && !is_object($value) ? htmlspecialcharsEx($value) : $value; } $arExtraUser[$arUser["ID"]] = $arUser; $arSource[$arUser["ID"]]["PERSONAL_PHOTO"] = $arUser["PERSONAL_PHOTO"]; $arPhotoTmp = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array('width' => 58, 'height' => 58), BX_RESIZE_IMAGE_EXACT, false, false, true); $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F'); if (isset($arUser['COLOR']) && strlen($arUser['COLOR']) > 0) { $color = IM\Color::getColor($arUser['COLOR']); } if (!$color) { $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F'); } $arUsers[$arUser["ID"]] = array('id' => $arUser["ID"], 'name' => CUser::FormatName($nameTemplateSite, $arUser, true, false), 'nameList' => CUser::FormatName($nameTemplate, $arUser, true, false), 'workPosition' => $arUser['WORK_POSITION'], 'color' => $color, 'avatar' => empty($arPhotoTmp['src']) ? '/bitrix/js/im/images/blank.gif' : $arPhotoTmp['src'], 'status' => 'offline', 'birthday' => $arUser['PERSONAL_BIRTHDAY'], 'gender' => $arUser['PERSONAL_GENDER'] == 'F' ? 'F' : 'M', 'phoneDevice' => $bVoximplantEnable && $arUser['UF_VI_PHONE'] == 'Y', 'extranet' => self::IsExtranet($arUser), 'network' => $arUser['EXTERNAL_AUTH_ID'] == self::NETWORK_AUTH_ID, 'profile' => CIMContactList::GetUserPath($arUser["ID"])); if ($getDepartment && is_array($arUser["UF_DEPARTMENT"]) && !empty($arUser["UF_DEPARTMENT"])) { foreach ($arUser["UF_DEPARTMENT"] as $dep_id) { if (isset($arUserInGroup[$dep_id])) { $arUserInGroup[$dep_id]['users'][] = $arUser["ID"]; } else { $arUserInGroup[$dep_id] = array('id' => $dep_id, 'users' => array($arUser["ID"])); } } if (isset($arWoUserInGroup['all'])) { $arWoUserInGroup['all']['users'][] = $arUser["ID"]; } else { $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"])); } } if ($getHrPhoto) { $arPhotoHrTmp = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true); $arHrPhoto[$arUser["ID"]] = empty($arPhotoHrTmp['src']) ? '/bitrix/js/im/images/hidef-avatar-v3.png' : $arPhotoHrTmp['src']; // TODO REMOVE DEFAULT } if ($getPhones) { if (CModule::IncludeModule('voximplant')) { $result = CVoxImplantPhone::Normalize($arUser["WORK_PHONE"]); if ($result) { $arPhones[$arUser["ID"]]['WORK_PHONE'] = $arUser['WORK_PHONE']; } $result = CVoxImplantPhone::Normalize($arUser["PERSONAL_MOBILE"]); if ($result) { $arPhones[$arUser["ID"]]['PERSONAL_MOBILE'] = $arUser['PERSONAL_MOBILE']; } $result = CVoxImplantPhone::Normalize($arUser["PERSONAL_PHONE"]); if ($result) { $arPhones[$arUser["ID"]]['PERSONAL_PHONE'] = $arUser['PERSONAL_PHONE']; } $result = preg_replace("/[^0-9\\#\\*]/i", "", $arUser["UF_PHONE_INNER"]); if ($result) { $arPhones[$arUser["ID"]]['INNER_PHONE'] = $result; } } else { $arPhones[$arUser["ID"]]['WORK_PHONE'] = $arUser['WORK_PHONE']; $arPhones[$arUser["ID"]]['PERSONAL_MOBILE'] = $arUser['PERSONAL_MOBILE']; $arPhones[$arUser["ID"]]['PERSONAL_PHONE'] = $arUser['PERSONAL_PHONE']; } } } foreach ($arUsers as $userId => $arUser) { $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false; $arUsers[$userId]['status'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' ? $arExtraUser[$userId]['STATUS'] : 'offline'; $arUsers[$userId]['idle'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['IDLE']) ? $arExtraUser[$userId]['IDLE']->getTimestamp() : 0; $arUsers[$userId]['mobileLastDate'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['MOBILE_LAST_DATE']) ? $arExtraUser[$userId]['MOBILE_LAST_DATE']->getTimestamp() : 0; } $result = array('users' => $arUsers, 'hrphoto' => $arHrPhoto, 'userInGroup' => $arUserInGroup, 'woUserInGroup' => $arWoUserInGroup, 'phones' => $arPhones, 'source' => $arSource); if ($useCache) { $cacheTag = array(); if ($obCache->StartDataCache()) { if (defined("BX_COMP_MANAGED_CACHE")) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($cache_dir); $CACHE_MANAGER->RegisterTag("IM_CONTACT_LIST"); if (is_array($arParams['ID'])) { foreach ($arParams['ID'] as $id) { $tag = 'USER_NAME_' . intval($id); if (!in_array($tag, $cacheTag)) { $cacheTag[] = $tag; $CACHE_MANAGER->RegisterTag($tag); } } } elseif (isset($arParams['ID']) && intval($arParams['ID']) > 0) { $tag = 'USER_NAME_' . intval($arParams['ID']); $CACHE_MANAGER->RegisterTag($tag); } $CACHE_MANAGER->EndTagCache(); } $obCache->EndDataCache($result); unset($cacheTag); } } unset($result['source']); return $result; }
public static function GetQueue($params) { $loadQueue = !isset($params['LOAD_QUEUE']) || $params['LOAD_QUEUE'] == 'Y'; $sendInvite = !isset($params['SEND_INVITE']) || $params['SEND_INVITE'] == 'Y'; // TODO check $params $result = array('COMMAND' => CVoxImplantIncoming::RULE_HUNGUP); if (isset($params['CONFIG'])) { $config = $params['CONFIG']; } else { $config = self::GetConfigBySearchId($params['SEARCH_ID']); if (!$config) { $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP; return $result; } $params['CONFIG'] = $config; } if (isset($params['LAST_USER_ID']) && $params['LAST_USER_ID'] > 0) { self::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => intval($params['LAST_USER_ID']), 'CALL_ID' => $params['CALL_ID'], 'MARK' => 'timeout_inc_3')); } $res = CVoxImplantUser::QueuedGetList(array('select' => array('ID', 'USER_ID', 'IS_ONLINE_CUSTOM', 'UF_VI_PHONE' => 'USER.UF_VI_PHONE', 'ACTIVE' => 'USER.ACTIVE'), 'filter' => array('=CONFIG_ID' => $config['ID']), 'order' => array('LAST_ACTIVITY_DATE' => 'asc'))); $findUserId = 0; if ($loadQueue) { CModule::IncludeModule('pull'); while ($queueUser = $res->fetch()) { $orm = \Bitrix\Pull\PushTable::getList(array('select' => array('ID'), 'filter' => array('=USER_ID' => $queueUser['USER_ID']))); $queueUser['USER_HAVE_MOBILE'] = $orm->fetch() ? 'Y' : 'N'; if ($queueUser['IS_ONLINE_CUSTOM'] != 'Y' && $queueUser['UF_VI_PHONE'] != 'Y' && $queueUser['USER_HAVE_MOBILE'] != 'Y' || $queueUser['ACTIVE'] != 'Y') { continue; } if ($config['TIMEMAN'] == "Y" && !CVoxImplantUser::GetActiveStatusByTimeman($queueUser['USER_ID'])) { continue; } else { if (!$findUserId) { VI\QueueTable::update($queueUser['ID'], array('LAST_ACTIVITY_DATE' => new FieldType\DateTime())); $findUserId = $queueUser['ID']; $result['USER_ID'] = $queueUser['USER_ID']; } $result['COMMAND'] = CVoxImplantIncoming::RULE_WAIT; $result['TYPE_CONNECT'] = self::TYPE_CONNECT_QUEUE; $result['USERS'][] = array('USER_ID' => $queueUser['USER_ID'], 'USER_HAVE_PHONE' => $queueUser['UF_VI_PHONE'] == 'Y' ? 'Y' : 'N', 'USER_HAVE_MOBILE' => $queueUser['USER_HAVE_MOBILE']); } } } else { while ($queueUser = $res->fetch()) { if (intval($params['LAST_USER_ID']) == $queueUser['USER_ID']) { continue; } else { self::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $queueUser['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'MARK' => 'timeout_inc_4')); } } } if ($findUserId) { if ($sendInvite) { $crmData = array(); foreach ($result['USERS'] as $queueUser) { if ($config['CRM'] == 'Y') { $crmData = CVoxImplantCrmHelper::GetDataForPopup($params['CALL_ID'], $params['CALLER_ID'], $queueUser['USER_ID']); } self::SendPullEvent(array('COMMAND' => 'invite', 'USER_ID' => $queueUser['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['CALLER_ID'], 'PHONE_NAME' => $config['PHONE_TITLE'], 'TYPE_CONNECT' => $result['TYPE_CONNECT'], 'CONFIG' => array('RECORDING' => $config['RECORDING']), 'CRM' => $crmData)); } } } else { $userId = intval($params['LAST_USER_ID']); if ($userId <= 0) { $res = VI\QueueTable::getList(array('select' => array('ID', 'USER_ID', 'ACTIVE' => 'USER.ACTIVE'), 'order' => array('LAST_ACTIVITY_DATE' => 'asc'), 'filter' => array('=CONFIG_ID' => $config['ID']), 'limit' => 1)); $queueUser = $res->fetch(); if ($queueUser && $queueUser['ACTIVE']) { VI\QueueTable::update($queueUser['ID'], array('LAST_ACTIVITY_DATE' => new FieldType\DateTime())); $userId = $queueUser['USER_ID']; } } if ($config['NO_ANSWER_RULE'] == CVoxImplantIncoming::RULE_PSTN_SPECIFIC) { if (strlen($config['FORWARD_NUMBER']) > 0) { $result['COMMAND'] = CVoxImplantIncoming::RULE_PSTN; $result['PHONE_NUMBER'] = NormalizePhone($config['FORWARD_NUMBER'], 1); $result['USER_ID'] = $userId; } } else { if ($config['NO_ANSWER_RULE'] != CVoxImplantIncoming::RULE_HUNGUP) { $result['COMMAND'] = CVoxImplantIncoming::RULE_VOICEMAIL; $result['USER_ID'] = $userId; if ($config['NO_ANSWER_RULE'] == CVoxImplantIncoming::RULE_PSTN && $userId > 0) { $userPhone = CVoxImplantPhone::GetUserPhone($userId); if ($userPhone) { $result['COMMAND'] = CVoxImplantIncoming::RULE_PSTN; $result['PHONE_NUMBER'] = $userPhone; $result['USER_ID'] = $userId; } } } else { $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP; } } } return $result; }
public function GetDialogInfo($phone, $chatTitle = '', $getPhoto = true) { $phoneNormalize = CVoxImplantPhone::Normalize($phone); if (!$phoneNormalize) { $phoneNormalize = preg_replace("/[^0-9\\#\\*]/i", "", $phone); } $phone = $phoneNormalize; $hrPhoto = array(); $openChat = true; $result = VI\PhoneTable::getList(array('select' => array('USER_ID', 'PHONE_MNEMONIC'), 'filter' => array('=PHONE_NUMBER' => $phone))); $userId = false; while ($row = $result->fetch()) { if (!$userId && $row['PHONE_MNEMONIC'] != 'WORK_PHONE') { $userId = $row['USER_ID']; $openChat = false; } else { if (!$userId && $row['PHONE_MNEMONIC'] == 'WORK_PHONE') { $openChat = true; } } } if ($userId == $this->userId) { $openChat = true; } $dialogId = 0; if (CModule::IncludeModule('im')) { if (CVoxImplantConfig::GetChatAction() == CVoxImplantConfig::INTERFACE_CHAT_NONE) { } else { if ($openChat) { $entityId = $phone; if (CVoxImplantConfig::GetChatAction() == CVoxImplantConfig::INTERFACE_CHAT_APPEND) { $entityId = 'UNIFY_CALL_CHAT'; $chatTitle = GetMessage('VI_CALL_CHAT_UNIFY'); } $result = IM\ChatTable::getList(array('select' => array('ID', 'AVATAR'), 'filter' => array('=ENTITY_TYPE' => 'CALL', '=ENTITY_ID' => $entityId, '=AUTHOR_ID' => $this->userId))); if ($row = $result->fetch()) { $dialogId = 'chat' . $row['ID']; $avatarId = $row['AVATAR']; } else { $CIMChat = new CIMChat($this->userId); $chatId = $CIMChat->Add(array('TITLE' => $chatTitle != '' ? $chatTitle : $phone, 'USERS' => false, 'CALL_NUMBER' => $entityId == 'UNIFY_CALL_CHAT' ? '' : $entityId, 'ENTITY_TYPE' => 'CALL', 'ENTITY_ID' => $entityId)); if ($chatId) { $dialogId = 'chat' . $chatId; $avatarId = $CIMChat->lastAvatarId; } } if ($getPhoto && intval($avatarId) > 0) { $arPhotoHrTmp = CFile::ResizeImageGet($avatarId, array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true); $hrPhoto[$dialogId] = empty($arPhotoHrTmp['src']) ? '/bitrix/js/im/images/hidef-avatar-v2.png' : $arPhotoHrTmp['src']; } } else { if ($userId) { if ($getPhoto) { $userData = CIMContactList::GetUserData(array('ID' => $userId, 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y')); $hrPhoto = $userData['hrphoto']; } $dialogId = $userId; } } } } if (!$dialogId) { $this->error = new CVoxImplantError(__METHOD__, 'ERROR_NEW_CHAT', GetMessage('VI_ERROR_NEW_CHAT')); return false; } //foreach(GetModuleEvents("voximplant", "OnGetDialogInfo", true) as $arEvent) // ExecuteModuleEventEx($arEvent, array('USER_ID' => $this->userId, 'DIALOG_ID' => $dialogId)); return array('DIALOG_ID' => $dialogId, 'HR_PHOTO' => $hrPhoto); }
public static function StartCall($userId, $phoneNumber) { $phoneNormalized = CVoxImplantPhone::Normalize($phoneNumber); $userId = intval($userId); if ($userId <= 0 || !$phoneNormalized) { return false; } $call = VI\CallTable::add(array('CALL_ID' => 'temp.' . md5($userId . $phoneNumber) . time(), 'USER_ID' => $userId, 'CALLER_ID' => $phoneNormalized, 'STATUS' => VI\CallTable::STATUS_CONNECTING, 'DATE_CREATE' => new FieldType\DateTime())); $viHttp = new CVoxImplantHttp(); $result = $viHttp->StartOutgoingCall($userId, $phoneNumber); VI\CallTable::update($call->GetId(), array('CALL_ID' => $result->call_id, 'ACCESS_URL' => $result->access_url, 'DATE_CREATE' => new FieldType\DateTime())); self::SendPullEvent(array('COMMAND' => 'outgoing', 'USER_ID' => $userId, 'PHONE_NUMBER' => $phoneNormalized, 'CALL_ID' => $result->call_id, 'CALL_DEVICE' => 'PHONE', 'EXTERNAL' => true)); return $result ? true : false; }
if (!CModule::IncludeModule('voximplant')) { return; } if ($_SERVER["REQUEST_METHOD"] == "POST" && check_bitrix_sessid()) { if (isset($_POST["BLACKLIST_SETTINGS_BUTTON"])) { Bitrix\Main\Config\Option::set("voximplant", "blacklist_auto", isset($_POST["BLACKLIST_AUTO"]) ? "Y" : "N"); $arBlacklistTime = isset($_POST["BLACKLIST_TIME"]) && intval($_POST["BLACKLIST_TIME"]) && $_POST["BLACKLIST_TIME"] > 0 ? intval($_POST["BLACKLIST_TIME"]) : 5; Bitrix\Main\Config\Option::set("voximplant", "blacklist_time", $arBlacklistTime); $arBlacklistCount = isset($_POST["BLACKLIST_COUNT"]) && intval($_POST["BLACKLIST_COUNT"]) && $_POST["BLACKLIST_COUNT"] > 0 ? intval($_POST["BLACKLIST_COUNT"]) : 5; Bitrix\Main\Config\Option::set("voximplant", "blacklist_count", $arBlacklistCount); Bitrix\Main\Config\Option::set("voximplant", "blacklist_user_id", $USER->GetID()); LocalRedirect(POST_FORM_ACTION_URI); } if (isset($_POST["BLACKLIST_ADD_BUTTON"])) { $newNumber = substr($_POST["BLACKLIST_NEW_NUMBER"], 0, 20); $newNumber = CVoxImplantPhone::Normalize($newNumber); if ($newNumber) { $dbBlacklist = Bitrix\Voximplant\BlacklistTable::getList(array("filter" => array("PHONE_NUMBER" => $newNumber))); if (!$dbBlacklist->Fetch()) { Bitrix\Voximplant\BlacklistTable::add(array("PHONE_NUMBER" => $newNumber)); } LocalRedirect(POST_FORM_ACTION_URI); } else { $arResult["ERROR"] = GetMessage("VI_BLACKLIST_NUMBER_ERROR"); } } if (isset($_POST["action"]) && $_POST["action"] == "delete_number") { $dbBlacklist = Bitrix\Voximplant\BlacklistTable::getList(array("filter" => array("PHONE_NUMBER" => $_POST["number"]))); if ($arBlacklist = $dbBlacklist->Fetch()) { Bitrix\Voximplant\BlacklistTable::delete($arBlacklist["ID"]); }
$arSend['ERROR'] = $result; } } echo CUtil::PhpToJsObject($arSend); } else { if ($_POST['VI_ACTIVATE'] == 'Y') { $arSend['ERROR'] = ''; $result = CVoxImplantPhone::ActivateCallerID(CVoxImplantPhone::GetLinkNumber(), $_POST['CODE']); if ($result) { $arSend['NUMBER'] = $result['NUMBER']; $arSend['VERIFIED'] = $result['VERIFIED']; $arSend['VERIFIED_UNTIL'] = ConvertTimeStamp(MakeTimeStamp($result['VERIFIED_UNTIL']) + CTimeZone::GetOffset() + date("Z"), 'FULL'); } else { $arSend['ERROR'] = 'CONNECT_ERROR'; } echo CUtil::PhpToJsObject($arSend); } else { if ($_POST['VI_REMOVE'] == 'Y') { $result = CVoxImplantPhone::DelCallerID(CVoxImplantPhone::GetLinkNumber()); $arSend['ERROR'] = $result ? '' : 'CONNECT_ERROR'; 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";
<?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;
static function GetUserData($arParams = Array()) { $getDepartment = $arParams['DEPARTMENT'] == 'N' ? false : true; $getHrPhoto = $arParams['HR_PHOTO'] == 'Y' ? true : false; $getPhones = $arParams['PHONES'] == 'Y' ? true : false; $useCache = !$getPhones && $arParams['USE_CACHE'] == 'Y' ? true : false; $showOnline = $arParams['SHOW_ONLINE'] == 'N' ? false : true; $arFilter = Array(); if (isset($arParams['ID']) && is_array($arParams['ID']) && !empty($arParams['ID'])) { foreach ($arParams['ID'] as $key => $value) $arParams['ID'][$key] = intval($value); $arFilter['ID'] = implode('|', $arParams['ID']); } else if (isset($arParams['ID']) && intval($arParams['ID']) > 0) { $arFilter['ID'] = intval($arParams['ID']); } if (empty($arFilter)) return false; $nameTemplate = self::GetUserNameTemplate(SITE_ID); $nameTemplateSite = CSite::GetNameFormat(false); $bIntranetEnable = false; if(IsModuleInstalled('intranet') && CModule::IncludeModule('intranet')) $bIntranetEnable = true; if($useCache) { global $USER; $obCache = new CPHPCache; $cache_ttl = intval($arParams['CACHE_TTL']); if ($cache_ttl <= 0) $cache_ttl = defined("BX_COMP_MANAGED_CACHE") ? 18144000 : 1800; $cache_id = 'user_data_'.(is_object($USER)? $USER->GetID(): 'AGENT').'_'.$arFilter['ID'].'_'.$nameTemplate.'_'.$nameTemplateSite.'_'.$getDepartment.'_'.LANGUAGE_ID; $cache_dir = '/bx/imc/recent'; if($obCache->InitCache($cache_ttl, $cache_id, $cache_dir)) { $arCacheResult = $obCache->GetVars(); if ($showOnline) $arOnline = CIMStatus::GetList(Array('ID' => array_keys($arCacheResult['users']))); foreach ($arCacheResult['users'] as $userId => $value) { $arCacheResult['users'][$userId]['birthday'] = $bIntranetEnable? CIntranetUtils::IsToday($arCacheResult['users'][$userId]['birthday']): false; if ($showOnline) { $arCacheResult['users'][$userId]['status'] = isset($arOnline['users'][$userId])? $arOnline['users'][$userId]['status']: 'offline'; $arCacheResult['users'][$userId]['idle'] = isset($arOnline['users'][$userId])? $arOnline['users'][$userId]['idle']: 0; } if ($getHrPhoto && !isset($arCacheResult['hrphoto'])) { $arPhotoHrTmp = CFile::ResizeImageGet( $arCacheResult['source'][$userId]["PERSONAL_PHOTO"], array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true ); $arCacheResult['hrphoto'][$userId] = empty($arPhotoHrTmp['src'])? '/bitrix/js/im/images/hidef-avatar-v2.png': $arPhotoHrTmp['src']; // TODO REMOVE DEFAULT } } return $arCacheResult; } } $arSelect = array('FIELDS' => array("ID", "LAST_NAME", "NAME", "LOGIN", "PERSONAL_PHOTO", "SECOND_NAME", "PERSONAL_BIRTHDAY", "WORK_POSITION", "PERSONAL_GENDER", "IS_ONLINE"), 'ONLINE_INTERVAL' => 180); if ($getPhones) { $arSelect['FIELDS'][] = 'WORK_PHONE'; $arSelect['FIELDS'][] = 'PERSONAL_PHONE'; $arSelect['FIELDS'][] = 'PERSONAL_MOBILE'; } if($bIntranetEnable && $getDepartment) $arSelect['SELECT'] = array('UF_DEPARTMENT'); $arUsers = array(); $arUserInGroup = array(); $arPhones = array(); $arWoUserInGroup = array(); $arHrPhoto = array(); $arSource = array(); $dbUsers = CUser::GetList(($sort_by = Array('is_online'=>'desc', 'last_name'=>'asc')), ($dummy=''), $arFilter, $arSelect); while ($arUser = $dbUsers->GetNext(true, false)) { $arSource[$arUser["ID"]]["PERSONAL_PHOTO"] = $arUser["PERSONAL_PHOTO"]; $arPhotoTmp = CFile::ResizeImageGet( $arUser["PERSONAL_PHOTO"], array('width' => 58, 'height' => 58), BX_RESIZE_IMAGE_EXACT, false, false, true ); $arUsers[$arUser["ID"]] = Array( 'id' => $arUser["ID"], 'name' => CUser::FormatName($nameTemplateSite, $arUser, true, false), 'nameList' => CUser::FormatName($nameTemplate, $arUser, true, false), 'workPosition' => $arUser['WORK_POSITION'], 'avatar' => empty($arPhotoTmp['src'])? '/bitrix/js/im/images/blank.gif': $arPhotoTmp['src'], 'status' => 'offline', 'birthday' => $arUser['PERSONAL_BIRTHDAY'], 'gender' => $arUser['PERSONAL_GENDER'] == 'F'? 'F': 'M', 'extranet' => self::IsExtranet($arUser), 'profile' => CIMContactList::GetUserPath($arUser["ID"]) ); if(is_array($arUser["UF_DEPARTMENT"]) && !empty($arUser["UF_DEPARTMENT"])) { foreach($arUser["UF_DEPARTMENT"] as $dep_id) { if (isset($arUserInGroup[$dep_id])) $arUserInGroup[$dep_id]['users'][] = $arUser["ID"]; else $arUserInGroup[$dep_id] = Array('id' => $dep_id, 'users' => Array($arUser["ID"])); } if (isset($arWoUserInGroup['all'])) $arWoUserInGroup['all']['users'][] = $arUser["ID"]; else $arWoUserInGroup['all'] = Array('id' => 'all', 'users' => Array($arUser["ID"])); } if ($getHrPhoto) { $arPhotoHrTmp = CFile::ResizeImageGet( $arUser["PERSONAL_PHOTO"], array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true ); $arHrPhoto[$arUser["ID"]] = empty($arPhotoHrTmp['src'])? '/bitrix/js/im/images/hidef-avatar-v2.png': $arPhotoHrTmp['src']; // TODO REMOVE DEFAULT } if ($getPhones) { if (CModule::IncludeModule('voximplant')) { $result = CVoxImplantPhone::Normalize($arUser["WORK_PHONE"]); if ($result) { $arPhones[$arUser["ID"]]['WORK_PHONE'] = $arUser['WORK_PHONE']; } $result = CVoxImplantPhone::Normalize($arUser["PERSONAL_MOBILE"]); if ($result) { $arPhones[$arUser["ID"]]['PERSONAL_MOBILE'] = $arUser['PERSONAL_MOBILE']; } $result = CVoxImplantPhone::Normalize($arUser["PERSONAL_PHONE"]); if ($result) { $arPhones[$arUser["ID"]]['PERSONAL_PHONE'] = $arUser['PERSONAL_PHONE']; } } else { $arPhones[$arUser["ID"]]['WORK_PHONE'] = $arUser['WORK_PHONE']; $arPhones[$arUser["ID"]]['PERSONAL_MOBILE'] = $arUser['PERSONAL_MOBILE']; $arPhones[$arUser["ID"]]['PERSONAL_PHONE'] = $arUser['PERSONAL_PHONE']; } } } $arOnline = Array(); if ($showOnline) $arOnline = CIMStatus::GetList(Array('ID' => array_keys($arUsers))); foreach ($arUsers as $userId => $arUser) { $arUsers[$userId]['birthday'] = $bIntranetEnable? CIntranetUtils::IsToday($arUsers[$userId]['birthday']): false; $arUsers[$userId]['status'] = isset($arOnline['users'][$userId])? $arOnline['users'][$userId]['status']: 'offline'; $arUsers[$userId]['idle'] = isset($arOnline['users'][$userId])? $arOnline['users'][$userId]['idle']: 0; } $result = array('users' => $arUsers, 'hrphoto' => $arHrPhoto, 'userInGroup' => $arUserInGroup, 'woUserInGroup' => $arWoUserInGroup, 'phones' => $arPhones, 'source' => $arSource); if($useCache) { $cacheTag = array(); if($obCache->StartDataCache()) { if(defined("BX_COMP_MANAGED_CACHE")) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($cache_dir); if(is_array($arParams['ID'])) { foreach ($arParams['ID'] as $id) { $tag = 'USER_NAME_'.intval($id); if(!in_array($tag, $cacheTag)) { $cacheTag[] = $tag; $CACHE_MANAGER->RegisterTag($tag); } } } elseif (isset($arParams['ID']) && intval($arParams['ID']) > 0) { $tag = 'USER_NAME_'.intval($arParams['ID']); $CACHE_MANAGER->RegisterTag($tag); } $CACHE_MANAGER->EndTagCache(); } $obCache->EndDataCache($result); unset($cacheTag); } } unset($result['source']); return $result; }
public function OnBeforeUserUpdate(&$arFields) { if ($arFields["ID"] > 0) { $arPhones = array(); $arCorrectPhones = array(); $dbViPhone = VI\PhoneTable::getList(array('select' => array('ID', 'PHONE_MNEMONIC', 'PHONE_NUMBER'), 'filter' => array('=USER_ID' => intval($arFields['ID'])))); while ($phone = $dbViPhone->fetch()) { if (strlen($phone['PHONE_MNEMONIC']) > 0) { $arPhones[$phone['PHONE_MNEMONIC']] = $phone; } } global $APPLICATION; $error = false; if (is_set($arFields, "WORK_PHONE")) { if (strlen($arFields["WORK_PHONE"]) > 0) { $arCorrectPhones["WORK_PHONE"] = CVoxImplantPhone::Normalize($arFields["WORK_PHONE"]); if (!$arCorrectPhones["WORK_PHONE"]) { $APPLICATION->throwException(GetMessage('ERROR_WORK_PHONE') . ' ' . GetMessage('ERROR_NUMBER')); $error = true; } } else { $arCorrectPhones["WORK_PHONE"] = ''; } } if (is_set($arFields, "PERSONAL_PHONE")) { if (strlen($arFields["PERSONAL_PHONE"]) > 0) { $arCorrectPhones["PERSONAL_PHONE"] = CVoxImplantPhone::Normalize($arFields["PERSONAL_PHONE"]); if (!$arCorrectPhones["PERSONAL_PHONE"]) { $APPLICATION->throwException(GetMessage('ERROR_PERSONAL_PHONE') . ' ' . GetMessage('ERROR_NUMBER')); $error = true; } } else { $arCorrectPhones["PERSONAL_PHONE"] = ''; } } if (is_set($arFields, "PERSONAL_MOBILE")) { if (strlen($arFields["PERSONAL_MOBILE"]) > 0) { $arCorrectPhones["PERSONAL_MOBILE"] = CVoxImplantPhone::Normalize($arFields["PERSONAL_MOBILE"]); if (!$arCorrectPhones["PERSONAL_MOBILE"]) { $APPLICATION->throwException(GetMessage('ERROR_PERSONAL_MOBILE') . ' ' . GetMessage('ERROR_NUMBER')); $error = true; } } else { $arCorrectPhones["PERSONAL_MOBILE"] = ''; } } if (is_set($arFields, "UF_PHONE_INNER")) { if (strlen($arFields["UF_PHONE_INNER"]) > 0) { $phoneInner = intval(preg_replace("/[^0-9]/i", "", $arFields["UF_PHONE_INNER"])); if ($phoneInner > 0 && $phoneInner < 10000) { $result = \Bitrix\Main\UserTable::getList(array('select' => array('COUNT'), 'filter' => array('!=ID' => intval($arFields['ID']), '=UF_PHONE_INNER' => $phoneInner, '=ACTIVE' => 'Y'), 'runtime' => array('COUNT' => array('data_type' => 'integer', 'expression' => array('COUNT(1)'))))); $data = $result->fetch(); if ($data['COUNT'] > 0) { $APPLICATION->throwException(GetMessage('ERROR_PHONE_INNER')); $error = true; } else { $arFields["UF_PHONE_INNER"] = $phoneInner; $arCorrectPhones["UF_PHONE_INNER"] = $phoneInner; } } else { $APPLICATION->throwException(GetMessage('ERROR_PHONE_INNER_2')); $error = true; } } else { $arCorrectPhones["UF_PHONE_INNER"] = ''; } } if ($arFields["ACTIVE"] == 'N' && CVoximplantUser::GetPhoneActive($arFields['ID'])) { $viUser = new CVoximplantUser(); $viUser->UpdateUserPassword($arFields['ID'], CVoxImplantUser::MODE_PHONE); $viUser->SetPhoneActive($arFields['ID'], false); } if (!$error) { foreach ($arCorrectPhones as $mnemonic => $phone) { if (isset($arPhones[$mnemonic])) { if ($phone != $arPhones[$mnemonic]['PHONE_NUMBER']) { if (strlen($phone) == 0) { VI\PhoneTable::delete($arPhones[$mnemonic]['ID']); } else { VI\PhoneTable::update($arPhones[$mnemonic]['ID'], array('PHONE_NUMBER' => $phone)); } } } else { if (strlen($phone) > 0) { VI\PhoneTable::add(array('USER_ID' => intval($arFields['ID']), 'PHONE_NUMBER' => $phone, 'PHONE_MNEMONIC' => $mnemonic)); } } } } else { return false; } } }
<?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['NUMBERS'] = CVoxImplantPhone::GetRentNumbers(); $arResult['PAID_BEFORE'] = array('TS' => 0, 'DATE' => '', 'PRICE' => 0, 'NOTICE' => false); foreach ($arResult['NUMBERS'] as $value) { if ($arResult['PAID_BEFORE']['TS'] > $value['PAID_BEFORE_TS'] || $arResult['PAID_BEFORE']['TS'] == 0) { $arResult['PAID_BEFORE']['TS'] = $value['PAID_BEFORE_TS']; $arResult['PAID_BEFORE']['DATE'] = $value['PAID_BEFORE']; $arResult['PAID_BEFORE']['PRICE'] = $value['PRICE']; } else { if ($arResult['PAID_BEFORE']['TS'] == $value['PAID_BEFORE_TS']) { $arResult['PAID_BEFORE']['PRICE'] += $value['PRICE']; } } } $ViAccount = new CVoxImplantAccount(); $arResult['BALANCE_CURRENCY'] = $ViAccount->GetAccountCurrency(); if ($arResult['PAID_BEFORE']['TS'] > 0) { $data = new Bitrix\Main\Type\DateTime(); if ($arResult['PAID_BEFORE']['TS'] <= $data->getTimestamp() + 604800) { $arResult['BALANCE'] = $ViAccount->GetAccountBalance(true); if ($arResult['BALANCE'] < $arResult['PAID_BEFORE']['PRICE']) {
public static function GetByPhone($phone, $type = CVoxImplantPhone::PHONE_USER_INNER) { $phoneNormalize = CVoxImplantPhone::Normalize($phone); if (!$phoneNormalize) { $phoneNormalize = preg_replace("/[^0-9\\#\\*]/i", "", $phone); } $phone = $phoneNormalize; $result = Bitrix\Voximplant\PhoneTable::getList(array('select' => array('USER_ID', 'PHONE_MNEMONIC'), 'filter' => array('=PHONE_NUMBER' => $phone))); $userId = false; while ($row = $result->fetch()) { if ($row['PHONE_MNEMONIC'] == $type) { $userId = $row['USER_ID']; break; } } return $userId; }
public static function GetConfig($id, $type = self::GET_BY_ID) { if (strlen($id) <= 0) { return array('ERROR' => 'Config is`t found for undefined id/number'); } if ($type == self::GET_BY_SEARCH_ID) { $orm = VI\ConfigTable::getList(array('filter' => array('=SEARCH_ID' => (string) $id))); } else { $orm = VI\ConfigTable::getList(array('filter' => array('=ID' => intval($id)))); } $config = $orm->fetch(); if (!$config) { $result = array('ERROR' => $type == self::GET_BY_SEARCH_ID ? 'Config is`t found for number: ' . $id : 'Config is`t found for id: ' . $id); } 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_LINE']) > 0 && $result['FORWARD_LINE'] != self::FORWARD_LINE_DEFAULT) { if ($result['FORWARD_LINE'] == CVoxImplantPhone::GetLinkNumber() || $result['FORWARD_LINE'] == CVoxImplantConfig::LINK_BASE_NUMBER) { $result['FORWARD_LINE_TYPE'] = 'LINK'; if ($result['FORWARD_LINE_NUMBER'] == CVoxImplantConfig::LINK_BASE_NUMBER) { $result['FORWARD_LINE_NUMBER'] = ''; } else { $result['FORWARD_LINE_NUMBER'] = CVoxImplantPhone::GetLinkNumber(); } } else { $ormForward = VI\ConfigTable::getList(array('filter' => array('=SEARCH_ID' => (string) $result['FORWARD_LINE']))); $configForward = $ormForward->fetch(); CVoxImplantHistory::WriteToLog($configForward); if ($configForward) { $result['FORWARD_LINE_TYPE'] = $configForward['PORTAL_MODE']; if ($result['FORWARD_LINE_TYPE'] == self::MODE_SIP) { $viForwardSip = new CVoxImplantSip(); $forwardSipResult = $viForwardSip->Get($configForward["ID"]); $result['FORWARD_LINE_SIP_SERVER'] = $forwardSipResult ? $forwardSipResult['SERVER'] : ''; $result['FORWARD_LINE_SIP_LOGIN'] = $forwardSipResult ? $forwardSipResult['LOGIN'] : ''; $result['FORWARD_LINE_SIP_PASSWORD'] = $forwardSipResult ? $forwardSipResult['PASSWORD'] : ''; } else { $result['FORWARD_LINE_NUMBER'] = $configForward['SEARCH_ID']; } } else { $result['FORWARD_LINE'] = self::FORWARD_LINE_DEFAULT; } } } 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']); $result['MELODY_RECORDING'] = CVoxImplantConfig::GetMelody('MELODY_RECORDING', $config['MELODY_LANG'], $config['MELODY_RECORDING']); $result['MELODY_VOTE'] = CVoxImplantConfig::GetMelody('MELODY_VOTE', $config['MELODY_LANG'], $config['MELODY_VOTE']); $result['MELODY_VOTE_END'] = CVoxImplantConfig::GetMelody('MELODY_VOTE_END', $config['MELODY_LANG'], $config['MELODY_VOTE_END']); } return $result; }
public static function GetNextInQueue($params) { CVoxImplantHistory::WriteToLog($params, '!!!GetNextInQueue'); $fistInQueue = isset($params['FIRST_IN_QUEUE']) && $params['FIRST_IN_QUEUE'] == 'Y'; // TODO check $params $result = array('COMMAND' => CVoxImplantIncoming::RULE_HUNGUP); if (!$fistInQueue) { $res = VI\CallTable::getList(array('select' => array('ID', 'STATUS'), 'filter' => array('=CALL_ID' => $params['CALL_ID']))); $call = $res->fetch(); if ($call['STATUS'] == VI\CallTable::STATUS_CONNECTED) { $result['COMMAND'] = CVoxImplantIncoming::RULE_TALK; return $result; } } if (isset($params['CONFIG'])) { $config = $params['CONFIG']; } else { $config = self::GetConfigBySearchId($params['SEARCH_ID']); if (!$config) { $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP; return $result; } $params['CONFIG'] = $config; } if (isset($params['LAST_USER_ID']) && $params['LAST_USER_ID'] > 0) { self::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => intval($params['LAST_USER_ID']), 'CALL_ID' => $params['CALL_ID'])); } $filter = array('=CONFIG_ID' => $config['ID']); if (isset($params['EXCLUDE_USERS'])) { $excludeUsers = $params['EXCLUDE_USERS']; if (!empty($excludeUsers)) { $filter['!=USER_ID'] = $excludeUsers; } } $res = CVoxImplantUser::QueuedGetList(array('select' => array('ID', 'USER_ID', 'IS_ONLINE_CUSTOM', 'UF_VI_PHONE' => 'USER.UF_VI_PHONE', 'ACTIVE' => 'USER.ACTIVE'), 'filter' => $filter, 'order' => array('LAST_ACTIVITY_DATE' => 'asc'))); $findActiveUser = false; while ($queueUser = $res->fetch()) { if ($queueUser['IS_ONLINE_CUSTOM'] != 'Y' && $queueUser['UF_VI_PHONE'] != 'Y' || $queueUser['ACTIVE'] != 'Y') { continue; } $findActiveUser = true; if ($config['TIMEMAN'] == "Y" && !CVoxImplantUser::GetActiveStatusByTimeman($queueUser['USER_ID'])) { $params['EXCLUDE_USERS'][] = $queueUser['USER_ID']; $params['LAST_USER_ID'] = 0; $result = self::GetNextInQueue($params); } else { VI\QueueTable::update($queueUser['ID'], array('LAST_ACTIVITY_DATE' => new FieldType\DateTime())); $result['COMMAND'] = CVoxImplantIncoming::RULE_WAIT; $result['TYPE_CONNECT'] = self::TYPE_CONNECT_QUEUE; $result['USER_ID'] = $queueUser['USER_ID']; $result['USER_HAVE_PHONE'] = $queueUser['UF_VI_PHONE'] == 'Y' ? 'Y' : 'N'; if (!$fistInQueue) { $crmData = array(); if ($config['CRM'] == 'Y') { $crmData = CVoxImplantCrmHelper::GetDataForPopup($params['CALL_ID'], $params['CALLER_ID'], $queueUser['USER_ID']); } self::SendPullEvent(array('COMMAND' => 'invite', 'USER_ID' => $queueUser['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['CALLER_ID'], 'PHONE_NAME' => $config['PHONE_TITLE'], 'CRM' => $crmData)); } } break; } if (!$findActiveUser) { $userId = intval($params['LAST_ANSWER_USER_ID']) > 0 ? intval($params['LAST_ANSWER_USER_ID']) : intval($params['LAST_USER_ID']); if ($userId <= 0) { $res = VI\QueueTable::getList(array('select' => array('ID', 'USER_ID', 'ACTIVE' => 'USER.ACTIVE'), 'order' => array('LAST_ACTIVITY_DATE' => 'asc'), 'filter' => array('=CONFIG_ID' => $config['ID']), 'limit' => 1)); $queueUser = $res->fetch(); if ($queueUser && $queueUser['ACTIVE']) { VI\QueueTable::update($queueUser['ID'], array('LAST_ACTIVITY_DATE' => new FieldType\DateTime())); $userId = $queueUser['USER_ID']; } } if ($config['NO_ANSWER_RULE'] != CVoxImplantIncoming::RULE_HUNGUP && (isset($params['LAST_ANSWER_USER_ID']) || isset($params['LAST_USER_ID']))) { $result['COMMAND'] = CVoxImplantIncoming::RULE_VOICEMAIL; $result['USER_ID'] = $userId; if ($config['NO_ANSWER_RULE'] == CVoxImplantIncoming::RULE_PSTN_SPECIFIC) { if (strlen($config['FORWARD_NUMBER']) <= 0) { $config['NO_ANSWER_RULE'] == CVoxImplantIncoming::RULE_PSTN; } else { $result['COMMAND'] = CVoxImplantIncoming::RULE_PSTN; $result['PHONE_NUMBER'] = NormalizePhone($config['FORWARD_NUMBER'], 1); $result['USER_ID'] = $userId; } } if ($config['NO_ANSWER_RULE'] == CVoxImplantIncoming::RULE_PSTN) { $userPhone = CVoxImplantPhone::GetUserPhone($userId); if ($userPhone) { $result['COMMAND'] = CVoxImplantIncoming::RULE_PSTN; $result['PHONE_NUMBER'] = $userPhone; $result['USER_ID'] = $userId; } } } else { $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP; } } return $result; }
public static function ActivateCallerID($number, $code) { $number = CVoxImplantPhone::Normalize($number); if ($number && strlen($code) > 0) { $ViHttp = new CVoxImplantHttp(); $result = $ViHttp->ActivateCallerID($number, $code); if ($result) { return array('NUMBER' => $result->callerid_number, 'VERIFIED' => $result->verified, 'VERIFIED_UNTIL' => $result->verified_until); } } return false; }