Exemplo n.º 1
0
 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;
 }