Example #1
0
 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;
 }
Example #2
0
                             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'));
                         }
                     }
                 }
             }
         }
     }
 }
Example #3
0
 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;
 }
Example #4
0
 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;
 }
Example #5
0
 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);
 }
Example #6
0
 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;
 }
Example #7
0
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"]);
        }
Example #8
0
                    $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";
Example #9
0
<?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;
	}
Example #11
0
 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;
         }
     }
 }
Example #12
0
<?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']) {
Example #13
0
 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;
 }
Example #14
0
 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;
 }
Example #15
0
 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;
 }
Example #16
0
 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;
 }