function showQueuesStatus() { global $config; $objResponse = new xajaxResponse(); $myAsterisk = new Asterisk(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); if (!$res) { $objResponse->addAssign("divAMIStatus", "innerHTML", $locate->Translate("AMI_connection_failed")); } else { $peer = $myAsterisk->command("show queues"); if (!strpos($peer['data'], ':')) { echo $peer['data']; } else { //print $peer['data']; $data = array(); $HTML .= "<table>"; foreach (explode("\n", $peer['data']) as $line) { $a = strpos('z' . $line, ':') - 1; if ($a >= 0) { $data[trim(substr($line, 0, $a))] = trim(substr($line, $a + 1)); $HTML .= "<tr><td>" . trim(substr($line, 0, $a)) . "</td></tr>"; $HTML .= "<tr><td>" . trim(substr($line, $a + 1)) . "</td></tr>"; } //print_r(trim(substr($line, $a + 1))); //exit; } //foreach ($data as $row){ //} $HTML .= "</table>"; // print_r($data); } } //print $HTML; $objResponse->addAssign("divQueue", "innerHTML", $HTML); // print_r($myAsterisk->QueueStatus()); return $objResponse; }
/** * function to verify user data * * @param $aFormValues (array) login form data $aFormValues['username'] $aFormValues['password'] $aFormValues['locate'] * @return $objResponse * @session $_SESSION['curuser']['username'] $_SESSION['curuser']['extension'] $_SESSION['curuser']['extensions'] $_SESSION['curuser']['country'] $_SESSION['curuser']['language'] $_SESSION['curuser']['channel'] $_SESSION['curuser']['accountcode'] */ function processAccountData($aFormValues) { global $db, $config; list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']); //get locate parameter $locate = new Localization($_SESSION['curuser']['country'], $_SESSION['curuser']['language'], 'login'); $objResponse = new xajaxResponse(); /* check whether the pear had been installed */ $pear_exists_result = class_exists('PEAR'); if (empty($pear_exists_result)) { $objResponse->addAlert($locate->Translate("Please install php pear")); $objResponse->addAssign("loginButton", "value", $locate->Translate("submit")); $objResponse->addAssign("loginButton", "disabled", false); return $objResponse; } if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { if ($_SERVER["HTTP_CLIENT_IP"]) { $proxy = $_SERVER["HTTP_CLIENT_IP"]; } else { $proxy = $_SERVER["REMOTE_ADDR"]; } } else { if (isset($_SERVER["HTTP_CLIENT_IP"])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } else { $ip = $_SERVER["REMOTE_ADDR"]; } } $query = "SELECT * FROM account_log WHERE ip='" . $ip . "' AND action='login' ORDER BY id DESC LIMIT 1"; $res = $db->query($query); if ($res->fetchInto($this_ip_log)) { $failedtimes = $this_ip_log['failedtimes']; } $log = array(); $log['action'] = 'login'; $log['ip'] = $ip; $log['username'] = $aFormValues['username']; if ($failedtimes >= $config['system']['max_incorrect_login'] && $config['system']['max_incorrect_login'] > 0) { $objResponse->addAlert($locate->Translate("login failed,your ip is locked for login")); $objResponse->addAssign("loginButton", "value", $locate->Translate("submit")); $objResponse->addAssign("loginButton", "disabled", false); return $objResponse; } $bError = false; $loginError = false; if (!$bError) { $query = "SELECT account.*, accountgroup.accountcode,accountgroup.allowcallback as allowcallbackgroup,resellergroup.allowcallback as allowcallbackreseller,accountgroup.limittype FROM account LEFT JOIN accountgroup ON accountgroup.id = account.groupid LEFT JOIN resellergroup ON resellergroup.id = account.resellerid WHERE username='******'username'] . "'"; $res = $db->query($query); if ($res->fetchInto($list)) { $log['account_id'] = $list['id']; $log['usertype'] = $list['usertype']; if ($list['password'] == $aFormValues['password']) { $log['status'] = 'success'; $log['failedtimes'] = 0; if ($aFormValues['rememberme'] == "forever") { // set cookies for three years setcookie("username", $aFormValues['username'], time() + 94608000); setcookie("password", $aFormValues['password'], time() + 94608000); setcookie("language", $aFormValues['locate'], time() + 94608000); setcookie("pagestyle", $aFormValues['pagestyle'], time() + 94608000); } else { // destroy cookies setcookie("username", "", time() - 3600); setcookie("password", "", time() - 3600); setcookie("language", "", time() - 3600); setcookie("pagestyle", $aFormValues['pagestyle'], time() + 94608000); $username = ''; $password = ''; $language = 'en_US'; $checked = false; } $_SESSION = array(); $_SESSION['curuser']['username'] = trim($aFormValues['username']); $_SESSION['curuser']['usertype'] = $list['usertype']; $_SESSION['curuser']['ipaddress'] = $_SERVER["REMOTE_ADDR"]; $_SESSION['curuser']['userid'] = $list['id']; $_SESSION['curuser']['groupid'] = $list['groupid']; $_SESSION['curuser']['resellerid'] = $list['resellerid']; $_SESSION['curuser']['limittype'] = $list['limittype']; $configstatus = common::read_ini_file($config['system']['astercc_path'] . '/astercc.conf', $asterccConfig); if ($configstatus == -2) { $html = "(fail to read " . $config['system']['astercc_path'] . "/astercc.conf)"; return $html; } else { $billingfield = trim($asterccConfig['system']['billingfield']); if ($billingfield == 'accountcode') { $_SESSION['curuser']['billingfield'] = $billingfield; } } $res = astercrm::getCalleridListByID($list['groupid']); while ($res->fetchInto($row)) { $_SESSION['curuser']['extensions'][] = $row['clid']; } if (!is_array($_SESSION['curuser']['extensions'])) { $_SESSION['curuser']['extensions'] = array(); } if ($list['usertype'] == 'reseller') { $_SESSION['curuser']['allowcallback'] = $list['allowcallbackreseller']; } else { $_SESSION['curuser']['allowcallback'] = $list['allowcallbackgroup']; } $_SESSION['curuser']['accountcode'] = $list['accountcode']; // if ($list['extensions'] != ''){ // $_SESSION['curuser']['extensions'] = split(',',$list['extensions']); // } // else{ // } list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']); /* if you dont want check manager status and show device status when user login please uncomment these three line */ // $objResponse->addAlert($locate->Translate("login_success")); if ($_SESSION['curuser']['usertype'] == 'groupadmin' || $_SESSION['curuser']['usertype'] == 'operator') { if ($aFormValues['pagestyle'] == 'classic') { $objResponse->addScript('window.location.href="systemstatus.php";'); } else { $objResponse->addScript('window.location.href="systemstatus_simple.php";'); } } else { $objResponse->addScript('window.location.href="account.php";'); } astercrm::insertAccountLog($log); return $objResponse; //check AMI connection $myAsterisk = new Asterisk(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); $html .= $locate->Translate("server_connection_test"); if ($res) { $html .= '<font color=green>' . $locate->Translate("pass") . '</font><br>'; $html .= '<b>' . $_SESSION['curuser']['extension'] . ' ' . $locate->Translate("device_status") . '</b><br>'; $html .= asterisk::getPeerIP($_SESSION['curuser']['extension']) . '<br>'; $html .= asterisk::getPeerStatus($_SESSION['curuser']['extension']) . '<br>'; } else { $html .= '<font color=red>' . $locate->Translate("no_pass") . '</font>'; } if ($aFormValues['pagestyle'] == 'classic') { $html .= '<input type="button" value="' . $locate->Translate("continue") . '" id="btnContinue" name="btnContinue" onclick="window.location.href=\'systemstatus.php\';">'; } else { $html .= '<input type="button" value="' . $locate->Translate("continue") . '" id="btnContinue" name="btnContinue" onclick="window.location.href=\'systemstatus_simple.php\';">'; } $objResponse->addAssign("formDiv", "innerHTML", $html); $objResponse->addClear("titleDiv", "innerHTML"); $objResponse->addScript("xajax.\$('btnContinue').focus();"); } else { //$log['account_id'] = 0; $log['failedtimes'] = $failedtimes + 1; $log['status'] = 'failed'; $log['failedcause'] = 'incorrect password'; $loginError = true; } } else { $log['failedtimes'] = $failedtimes + 1; $log['account_id'] = 0; $log['usertype'] = 'manager_login'; $log['status'] = 'failed'; $log['failedcause'] = 'notexistent user'; $loginError = true; } astercrm::insertAccountLog($log); if (!$loginError) { return $objResponse; } else { $objResponse->addAlert($locate->Translate("login failed")); $objResponse->addAssign("loginButton", "value", $locate->Translate("submit")); $objResponse->addAssign("loginButton", "disabled", false); return $objResponse; } } else { $objResponse->addAssign("loginButton", "value", $locate->Translate("submit")); $objResponse->addAssign("loginButton", "disabled", false); } return $objResponse; }
function requireReasionWhenPause($f) { global $locate, $config, $db; $agent = $f['require_reasion_agent']; $queueno = $f['require_reasion_queueno']; $context = $f['require_reasion_context']; $objResponse = new xajaxResponse(); //add a record to table pause_reasion $saveResult = Customer::savePauseReasion($f['require_reasion_queueno'], 'pause', $f['require_reasion']); if (!$saveResult) { $objResponse->addAlert('Save Pause Reasion Failed'); } else { $objResponse->addAssign("formRequiredReasionDiv", "style.visibility", 'hidden'); $objResponse->addAssign("formRequiredReasionDiv", "innerHTML", ''); $myAsterisk = new Asterisk(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); $action = 'pause'; if ($agent == '') { if ($context == '') { if ($_SESSION['curuser']['group']['incontext'] != '') { $context = $_SESSION['curuser']['group']['incontext']; } else { $context = $config['system']['incontext']; } } $agentstr = 'Local/' . $_SESSION['curuser']['extension'] . '@' . $context . '/n'; } else { $agentstr = $agent; } if ($action == 'pause') { if ($_SESSION['asterisk']['paramdelimiter'] == '|') { $res = $myAsterisk->queuePause($queueno, $agentstr, 1); } else { $cmd = "queue pause member {$agentstr} queue {$queueno}"; } } else { if ($action == 'pausea') { $agentstr = 'Agent/' . $_SESSION['curuser']['agent']; if ($_SESSION['asterisk']['paramdelimiter'] == '|') { $res = $myAsterisk->queuePause($queueno, $agentstr, 1); } else { $cmd = "queue pause member {$agentstr} queue {$queueno}"; } } else { if ($action == 'pausec') { if ($_SESSION['asterisk']['paramdelimiter'] == '|') { $res = $myAsterisk->queuePause($queueno, $agentstr, 1); } else { $cmd = "queue pause member {$agentstr} queue {$queueno}"; } } } } if (!empty($cmd)) { $res = $myAsterisk->Command($cmd); } if (strstr($res['data'], 'failed')) { if ($action == 'pausea') { $action == 'pause'; } elseif ($action == 'continuea') { $action == 'continue'; } $objResponse->addAlert($locate->translate($action) . ' ' . $locate->translate('failed')); } else { $sql = "SELECT * FROM campaign WHERE queuename = '" . $queueno . "' AND groupid='" . $_SESSION['curuser']['groupid'] . "' AND enable= 1"; $res =& $db->query($sql); while ($res->fetchInto($row)) { if ($action == 'pause') { $objResponse->addAssign("campaign-pause-" . $row['id'], "innerHTML", '[' . $locate->translate('continue') . ']'); $objResponse->addAssign("campaign-pause-" . $row['id'], "title", 'continue'); $objResponse->addAssign("campaign-" . $row['id'], "style.color", '#30569D'); } elseif ($action == 'pausea') { $objResponse->addAssign("campaign-pause-" . $row['id'], "innerHTML", '[' . $locate->translate('continue') . ']'); $objResponse->addAssign("campaign-pause-" . $row['id'], "title", 'continuea'); $objResponse->addAssign("campaign-" . $row['id'], "style.color", '#30569D'); } elseif ($action == 'pausec') { $objResponse->addAssign("campaign-pause-" . $row['id'], "innerHTML", '[' . $locate->translate('continue') . ']'); $objResponse->addAssign("campaign-pause-" . $row['id'], "title", 'continuec'); $objResponse->addAssign("campaign-" . $row['id'], "style.color", '#30569D'); } } } $objResponse->addAssign("clkPauseTime", "value", date("Y-m-d H:i:s")); } return $objResponse; }
function dial($phoneNum, $first = '', $myValue, $dtmf = '') { global $config, $locate; $objResponse = new xajaxResponse(); if (trim($myValue['curid']) > 0) { $curid = trim($myValue['curid']) - 1; } else { $curid = trim($myValue['curid']); } if ($dtmf != '') { $app = 'Dial'; $data = 'local/' . $phoneNum . '@' . $config['system']['outcontext'] . '|30' . '|D' . $dtmf; $first = 'caller'; } $myAsterisk = new Asterisk(); if ($first == '') { $first = $config['system']['firstring']; } $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); if (!$res) { $objResponse->addAssign("mobileStatus", "innerText", "Failed"); } if ($first == 'caller') { //caller will ring first $strChannel = "local/" . $_SESSION['curuser']['extension'] . "@" . $config['system']['incontext'] . "/n"; if ($config['system']['allow_dropcall'] == true) { $myAsterisk->dropCall($sid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $phoneNum, 'Context' => $config['system']['outcontext'], 'Account' => $_SESSION['curuser']['accountcode'], 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $phoneNum)); } else { $myAsterisk->sendCall($strChannel, $phoneNum, $config['system']['outcontext'], 1, $app, $data, 30, $phoneNum, NULL, $_SESSION['curuser']['accountcode']); } } else { $strChannel = "local/" . $phoneNum . "@" . $config['system']['outcontext'] . "/n"; if ($config['system']['allow_dropcall'] == true) { /* coz after we use new method to capture dial event there's no good method to make both leg display correct clid for now so we comment these lines */ $myAsterisk->dropCall($sid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $_SESSION['curuser']['extension'], 'Context' => $config['system']['incontext'], 'Account' => $_SESSION['curuser']['accountcode'], 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $_SESSION['curuser']['extension'])); } else { $myAsterisk->sendCall($strChannel, $_SESSION['curuser']['extension'], $config['system']['incontext'], 1, $app, $data, 30, $_SESSION['curuser']['extension'], NULL, NULL); } } //$myAsterisk->disconnect(); $objResponse->addAssign("divMsg", "style.visibility", "hidden"); return $objResponse->getXML(); }
/** * hangup a channel * @param channel string channel name * @return object xajax response object */ function hangup($channel) { global $config; $myAsterisk = new Asterisk(); $objResponse = new xajaxResponse(); if (trim($channel) == '') { return $objResponse; } $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); if (!$res) { $objResponse->addALert("action Huangup failed"); return $objResponse; } $myAsterisk->Hangup($channel); //$objResponse->addAssign("btnHangup", "disabled", true); $objResponse->addAssign("divMsg", "style.visibility", "hidden"); return $objResponse; }
function invite($src, $dest, $creditLimit) { global $config; $src = trim($src); $dest = trim($dest); $credit = trim($credit); $myAsterisk = new Asterisk(); $objResponse = new xajaxResponse(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); if (!$res) { $objResponse->addAssign("mobileStatus", "innerText", "Failed"); } $strChannel = "local/" . $src . "@" . $config['system']['outcontext'] . "/n"; $_SESSION['callbacks'][$src . $dest] = array('legA' => $dest, 'legB' => $src, 'start' => 0, 'creditLimit' => $creditLimit); if ($config['system']['allow_dropcall'] == true) { $myAsterisk->dropCall($sid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $dest, 'Context' => $config['system']['outcontext'], 'Account' => $_SESSION['curuser']['accountcode'], 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $dest)); } else { $myAsterisk->sendCall($strChannel, $dest, $config['system']['outcontext'], 1, NULL, NULL, 30, $dest, NULL, $_SESSION['curuser']['accountcode']); } // add to callback table $callback['lega'] = $dest; $callback['legb'] = $src; $callback['credit'] = $creditLimit; $callback['groupid'] = $_SESSION['curuser']['groupid']; astercc::insertNewCallback($callback); return $objResponse->getXML(); }
function checkAMI($aFormValues) { global $locate; $objResponse = new xajaxResponse(); $myAsterisk = new Asterisk(); $myConfig['server'] = $aFormValues["iptAsServer"]; $myConfig['port'] = $aFormValues["iptAsPort"]; $myConfig['username'] = $aFormValues["iptAsUsername"]; $myConfig['secret'] = $aFormValues["iptAsSecret"]; $myAsterisk->config['asmanager'] = $myConfig; $res = $myAsterisk->connect(); if ($res) { $objResponse->addAssign("divAsMsg", "innerHTML", "<span class='passed'>" . $locate->Translate('AMI_connect_success') . "</span"); } else { $objResponse->addAssign("divAsMsg", "innerHTML", "<span class='failed'>" . $locate->Translate('AMI_connect_failed') . "</span>"); } return $objResponse; }
function barge($srcchan, $dstchan) { global $config, $locate; $myAsterisk = new Asterisk(); $objResponse = new xajaxResponse(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); if (!$res) { return; } $group_info = astercrm::getRecordByID($_SESSION['curuser']['groupid'], "astercrm_accountgroup"); if ($group_info['incontext'] != '') { $incontext = $group_info['incontext']; } else { $incontext = $config['system']['incontext']; } //if ($group_info['outcontext'] != '' ) $outcontext = $group_info['outcontext']; //else $outcontext = $config['system']['outcontext']; $strChannel = "local/" . $_SESSION['curuser']['extension'] . "@" . $incontext . "/n"; $myAsterisk->Originate($strChannel, '', '', 1, 'meetme', $_SESSION['curuser']['extension'] . $_SESSION['asterisk']['paramdelimiter'] . "pqdx", 30, $_SESSION['curuser']['extension'], NULL, $_SESSION['curuser']['accountcode']); $myAsterisk->Redirect($srcchan, $dstchan, $_SESSION['curuser']['extension'], "astercc-barge", "1"); return $objResponse; }
function checkAMI($id) { global $locate; $objResponse = new xajaxResponse(); $server =& Customer::getRecordByID($id, 'servers'); $myAsterisk = new Asterisk(); $myConfig['server'] = $server["ip"]; $myConfig['port'] = $server["port"]; $myConfig['username'] = $server["username"]; $myConfig['secret'] = $server["secret"]; $myAsterisk->config['asmanager'] = $myConfig; $res = $myAsterisk->connect(); if ($res) { $objResponse->addAssign("divCheckServer", "innerHTML", "<span class='passed'>" . $locate->Translate('AMI_connect_success') . "</span"); } else { $objResponse->addAssign("divCheckServer", "innerHTML", "<span class='failed'>" . $locate->Translate('AMI_connect_failed') . "</span>"); } return $objResponse; }
function restartAsterisk() { global $config; $myAsterisk = new Asterisk(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); $myAsterisk->Command(" restart now "); $myAsterisk->disconnect(); return; }
function agentPause($agent, $queueno = '', $action) { global $locate, $config; $myAsterisk = new Asterisk(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); if (!$res) { return; } if ($action == 'pause') { if ($config['system']['require_reason_when_pause'] == 'yes') { savePauseReasion($agent, $queueno, $action, 'admin pause'); } if ($_SESSION['asterisk']['paramdelimiter'] == '|') { $res = $myAsterisk->queuePause($queueno, $agent, 1); } else { $cmd = "queue pause member {$agent} queue {$queueno}"; $res = $myAsterisk->Command($cmd); } } else { if ($config['system']['require_reason_when_pause'] == 'yes') { savePauseToContinue($agent, $queueno); } if ($_SESSION['asterisk']['paramdelimiter'] == '|') { $res = $myAsterisk->queuePause($queueno, $agent, 0); } else { $cmd = "queue unpause member {$agent} queue {$queueno}"; $res = $myAsterisk->Command($cmd); } } $objResponse = new xajaxResponse(); $objResponse->addAssign("updated", "value", date("Y-m-d H:i:s")); return $objResponse; }
function hangupchnnel($channel) { global $config; $objResponse = new xajaxResponse(); if ($channel == '') { $curchannels = getCurchannels(); $objResponse->addAssign("curchanels", "innerHTML", $curchannels); return $objResponse; } $myAsterisk = new Asterisk(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); if (!$res) { return; } $myAsterisk->Hangup($channel); sleep(1); $curchannels = getCurchannels(); $objResponse->addAssign("curchanels", "innerHTML", $curchannels); return $objResponse; }
/** * function to verify user data * * @param $aFormValues (array) login form data $aFormValues['username'] $aFormValues['password'] $aFormValues['locate'] * @return $objResponse * @session $_SESSION['curuser']['username'] $_SESSION['curuser']['extension'] $_SESSION['curuser']['extensions'] $_SESSION['curuser']['country'] $_SESSION['curuser']['language'] $_SESSION['curuser']['channel'] $_SESSION['curuser']['accountcode'] */ function processAccountData($aFormValues) { global $db, $locate, $config; $objResponse = new xajaxResponse(); $bError = false; $loginError = false; list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']); $locate = new Localization($_SESSION['curuser']['country'], $_SESSION['curuser']['language'], 'login'); /* check whether the pear had been installed */ $pear_exists_result = class_exists('PEAR'); if (empty($pear_exists_result)) { $objResponse->addAlert($locate->Translate("Please install php pear")); return $objResponse; } if (!$bError) { //$query = "SELECT * FROM account WHERE username='******'username'] . "'"; //$res = $db->query($query); $row = astercrm::getRecordByField("username", $aFormValues['username'], "astercrm_account"); if ($row['id'] != '') { if ($row['password'] == $aFormValues['password']) { $identity = astercrm::calculateAgentOntime('login', trim($aFormValues['username'])); if ($identity) { $update = astercrm::updateAgentOnlineTime('login', date('Y-m-d H:i:s'), $row['id']); } if ($aFormValues['rememberme'] == "forever") { // set cookies for three years setcookie("username", $aFormValues['username'], time() + 94608000); setcookie("password", $aFormValues['password'], time() + 94608000); setcookie("language", $aFormValues['locate'], time() + 94608000); } else { // destroy cookies setcookie("username", "", time() - 3600); setcookie("password", "", time() - 3600); setcookie("language", "", time() - 3600); $username = ''; $password = ''; $language = 'en_US'; $checked = false; } $_SESSION = array(); $_SESSION['curuser']['username'] = trim($aFormValues['username']); $_SESSION['curuser']['extension'] = $row['extension']; $_SESSION['curuser']['usertype'] = $row['usertype']; $_SESSION['curuser']['usertype_id'] = $row['usertype_id']; $_SESSION['curuser']['accountid'] = $row['id']; $_SESSION['curuser']['accountcode'] = $row['accountcode']; $_SESSION['curuser']['agent'] = $row['agent']; $_SESSION['curuser']['callerid'] = trim($row['callerid']); $_SESSION['curuser']['update_online_interval'] = date("Y-m-d H:i:s"); // added by solo 2007-10-90 $_SESSION['curuser']['channel'] = $row['channel']; $_SESSION['curuser']['extensions'] = array(); $_SESSION['curuser']['groupid'] = $row['groupid']; $privilege = array(); if ($row['usertype_id'] > 0) { $privileges = $db->getAll("SELECT * FROM user_privileges WHERE user_type_id='" . $row['usertype_id'] . "'"); foreach ($privileges as $p) { $privilege[$p['page']][$p['action']] = 1; } } $_SESSION['curuser']['privileges'] = $privilege; if ($row['extensions'] != '') { $_SESSION['curuser']['extensions'] = split(',', $row['extensions']); } //check extensions if exists in account table foreach ($_SESSION['curuser']['extensions'] as $key => $value) { $exten_row = astercrm::getRecordByField("username", $value, "astercrm_account"); if ($exten_row['id'] == '') { unset($_SESSION['curuser']['extensions'][$key]); } } // if it's a group admin, then add all group extension to it if ($row['usertype'] == 'groupadmin' || is_array($_SESSION['curuser']['privileges']['systemstatus']) || is_array($_SESSION['curuser']['privileges']['import'])) { $_SESSION['curuser']['memberExtens'] = array(); $_SESSION['curuser']['memberNames'] = array(); $_SESSION['curuser']['memberAgents'] = array(); $groupList = astercrm::getGroupMemberListByID($row['groupid']); while ($groupList->fetchInto($groupRow)) { $_SESSION['curuser']['memberExtens'][] = $groupRow['extension']; $_SESSION['curuser']['memberNames'][] = $groupRow['username']; if ($groupRow['agent'] != '') { $_SESSION['curuser']['memberAgents'][] = $groupRow['agent']; } } } list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $aFormValues['locate']); // get group information $_SESSION['curuser']['group'] = astercrm::getRecordByField("groupid", $row['groupid'], "astercrm_accountgroup"); if ($row['dialinterval'] != 0) { $_SESSION['curuser']['dialinterval'] = $row['dialinterval']; } else { $row_group = astercrm::getRecordByField("groupid", $row['groupid'], "astercrm_accountgroup"); $_SESSION['curuser']['dialinterval'] = $_SESSION['curuser']['group']['agentinterval']; } if ($_SESSION['curuser']['groupid'] > 0) { $sql = "SELECT id,campaignname,queuename,queue_context,use_ext_chan FROM campaign WHERE queuename != '' AND groupid='" . $_SESSION['curuser']['groupid'] . "' AND enable= 1 ORDER BY queuename ASC"; $result =& $db->query($sql); $dataArray = array(); while ($row = $result->fetchRow()) { $dataArray[$row['id']] = $row; } $_SESSION['curuser']['campaign_queue'] = $dataArray; } /* if you dont want check manager status and show device status when user login please uncomment these three line */ //$objResponse->addAlert($locate->Translate("Login success")); // if($_SESSION['curuser']['agent'] != ''){ // $msg = $locate->Translate("choose user mode"); // $objResponse->addScript("selectmode('".$msg."')"); // return $objResponse; // } //$_SESSION['error_report'] = $config['error_report']['error_report_level']; //$objResponse->addScript('window.location.href="portal.php";'); //return $objResponse; //check AMI connection $myAsterisk = new Asterisk(); $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); //$html .= $locate->Translate("server_connection_test"); if ($res) { //$html .= '<font color=green>'.$locate->Translate("pass").'</font><br>'; //$html .= '<b>'.$_SESSION['curuser']['extension'].' '.$locate->Translate("device_status").'</b><br>'; //$html .= asterisk::getPeerIP($_SESSION['curuser']['extension']).'<br>'; //$html .= asterisk::getPeerStatus($_SESSION['curuser']['extension']).'<br>'; $v = $myAsterisk->Command("core show version"); $v = explode(' ', $v['data']); $version = $v['2']; $_SESSION['asterisk']['version'] = $version; $version_arr = split('\\.', $version); if ($version_arr['1'] > 4) { $_SESSION['asterisk']['paramdelimiter'] = ','; } else { $_SESSION['asterisk']['paramdelimiter'] = '|'; } } else { $_SESSION['asterisk']['paramdelimiter'] = '|'; //$html .= '<font color=red>'.$locate->Translate("no_pass").'</font>'; } $_SESSION['error_report'] = $config['error_report']['error_report_level']; //clear socket_url session to $_SESSION['socket_url_flag'] = 'yes'; $objResponse->addScript('window.location.href="portal.php";'); return $objResponse; $html .= '<input type="button" value="' . $locate->Translate("continue") . '" id="btnContinue" name="btnContinue" onclick="window.location.href=\'portal.php\';">'; $objResponse->addAssign("formDiv", "innerHTML", $html); $objResponse->addClear("titleDiv", "innerHTML"); $objResponse->addScript("xajax.\$('btnContinue').focus();"); } else { $loginError = true; } } else { $loginError = true; } if (!$loginError) { return $objResponse; } else { $objResponse->addAlert($locate->Translate("login_failed")); $objResponse->addAssign("loginButton", "value", $locate->Translate("Submit")); $objResponse->addAssign("loginButton", "disabled", false); return $objResponse; } } else { $objResponse->addAssign("loginButton", "value", $locate->Translate("Submit")); $objResponse->addAssign("loginButton", "disabled", false); } return $objResponse; }
function placeCall($campaignid) { global $config; $myAsterisk = new Asterisk(); $row =& astercrm::getDialNumber($campaignid); // 待拨号码为空 if (!$row) { return false; } //print_r($row); $id = $row['id']; $groupid = $row['groupid']; $campaignid = $row['campaignid']; $phoneNum = $row['dialnumber']; $trytime = $row['trytime']; $assign = $row['assign']; $pdcontext = $row['incontext']; $outcontext = $row['outcontext']; if ($row['inexten'] != "") { $pdextension = $row['inexten']; } else { if ($row['assign'] != "") { $pdextension = $row['assign']; } else { $pdextension = $row['dialnumber']; } } $res = astercrm::deleteRecord($id, "diallist"); $f['dialednumber'] = $phoneNum; $f['dialedby'] = $_SESSION['curuser']['username']; $f['groupid'] = $groupid; $f['trytime'] = $trytime + 1; $f['assign'] = $assign; $f['campaignid'] = $campaignid; $res = astercrm::insertNewDialedlist($f); $actionid = md5(uniqid("")); $strChannel = "local/" . $phoneNum . "@" . $outcontext . "/n"; if ($config['system']['allow_dropcall'] == true) { $myAsterisk->dropCall($actionid, array('Channel' => "{$strChannel}", 'WaitTime' => 30, 'Exten' => $pdextension, 'Context' => $pdcontext, 'Variable' => "{$strVariable}", 'Priority' => 1, 'MaxRetries' => 0, 'CallerID' => $phoneNum)); } else { $myAsterisk->config['asmanager'] = $config['asterisk']; $res = $myAsterisk->connect(); $myAsterisk->sendCall($strChannel, $pdextension, $pdcontext, 1, NULL, NULL, 30, $phoneNum, NULL, NULL, NULL, $actionid); } return true; }