function checkNewCall($curid, $exten, $channel = '', $agent = '') { global $db, $config; if ($config['system']['eventtype'] == 'curcdr') { //$query = "SELECT * FROM curcdr WHERE (src = '$exten' OR dst = '$exten' OR dstchan = 'agent/$agent' OR srcchan LIKE '$channel-%' OR dstchan LIKE '$channel-%' OR srcchan LIKE 'local/".$exten."@%' OR dstchan LIKE 'local/".$exten."@%') AND dstchan != '' AND srcchan != '' AND dst != '' AND src != '' AND src !='<unknown>' AND id > $curid "; $query = "SELECT * FROM curcdr WHERE (src = '{$exten}' OR dst = '{$exten}' OR srcchan = 'agent/{$agent}' OR dstchan = 'agent/{$agent}' OR srcchan LIKE '{$channel}-%' OR dstchan LIKE '{$channel}-%') AND dstchan != '' AND srcchan != '' AND id > {$curid} "; //echo $query;exit; $res = $db->query($query); asterEvent::events($query); if ($res->fetchInto($list)) { //if dstchan does not include dst, then clear dst(for process transfer call ) if (!strstr($list['dstchan'], $list['dst'])) { $dst_tmp = $list['dst']; $list['dst'] = ''; } if ($list['didnumber'] != '') { $didnumber = $list['didnumber']; } else { //$sql = "SELECT didnumber FROM curcdr WHERE srcchan = '".$list['didnumber']."' AND didnumber != ''"; //if($res_did = $db->getone($sql)) $didnumber = $res_did; } if (strstr($list['srcchan'], $channel) && !strstr($list['srcchan'], 'local') or $list['src'] == $exten or $list['srcchan'] == "agent/" . $agent) { // dial out //if($list['src'] != $exten){ // $query = "update curcdr set src='$exten' WHERE id='".$list['id']."'"; //$db->query($query); //} $call['status'] = 'dialout'; if ($list['dst'] == '') { $call['callerid'] = $dst_tmp; } else { $call['callerid'] = trim($list['dst']); } $call['didnumber'] = $didnumber; $call['uniqueid'] = trim($list['srcuid']); $call['curid'] = trim($list['id']); $call['callerChannel'] = $list['srcchan']; $call['calleeChannel'] = $list['dstchan']; $call['calldate'] = $list['starttime']; $call['queue'] = $list['queue']; if ($call['uniqueid'] == '') { //$call['uniqueid'] = trim($list['dstuid']); } //检查onhold 通话 $sql = "SELECT * FROM hold_channel WHERE agentchan='" . $list['srcchan'] . "' ORDER BY id DESC LIMIT 1"; $holds = $db->getrow($sql); $call['hold'] = $holds; $call['srcname'] = $list['srcname']; //print_r($call);exit; return $call; } elseif (strstr($list['dstchan'], $channel) && !strstr($list['srcchan'], 'local') or $list['dst'] == $exten or $list['dstchan'] == "agent/" . $agent) { //OR strstr($list['dst'],$agent) //dial in //if($list['dst'] != $exten){ //$query = "update curcdr set dst='$exten' WHERE id='".$list['id']."'"; //$db->query($query); //} $call['callerChannel'] = $list['srcchan']; $call['calleeChannel'] = $list['dstchan']; $call['didnumber'] = $didnumber; $call['status'] = 'incoming'; $call['callerid'] = trim($list['src']); $call['uniqueid'] = trim($list['srcuid']); $call['curid'] = trim($list['id']); $call['calldate'] = $list['starttime']; $call['queue'] = $list['queue']; if (strstr($list['srcchan'], 'local/')) { $query = "SELECT * FROM curcdr WHERE src='" . $list['src'] . "' AND id < '" . $list['id'] . "' ORDER BY id ASC LIMIT 1"; $lega = $db->getrow($query); //print_r($lega);exit; if ($lega['id'] > 0) { if ($lega['dst'] != '' && $lega['dstchan'] != '') { $call['callerid'] = trim($lega['dst']); } if ($lega['dstchan'] != '') { $call['callerChannel'] = $lega['dstchan']; } else { $call['callerChannel'] = $lega['srcchan']; } if ($call['didnumber'] == '') { $call['didnumber'] = $lega['didnumber']; } } } $sql = "SELECT * FROM hold_channel WHERE agentchan='" . $list['dstchan'] . "' ORDER BY id DESC LIMIT 1"; $holds = $db->getrow($sql); $call['hold'] = $holds; $call['srcname'] = $list['srcname']; return $call; } } else { //检查onhold 通话 $sql = "SELECT * FROM hold_channel WHERE accountid='" . $_SESSION['curuser']['accountid'] . "' ORDER BY id DESC LIMIT 1"; $holds = $db->getrow($sql); $call['hold'] = $holds; //$sql = "DELETE FROM hold_channel WHERE accountid='".$_SESSION['curuser']['accountid']."'"; //$db->query($sql); } $call['status'] = ''; $call['curid'] = $curid; return $call; } $call =& asterEvent::checkIncoming($curid, $exten); if ($call['status'] == 'incoming' && $call['callerid'] != '') { return $call; } $call =& asterEvent::checkDialout($curid, $exten, $call['curid']); return $call; }