function getMonitoring($limit, $offset, $filter_field, $filter_value, $extension, $date_initial, $date_final)
 {
     $where = "";
     $arrParam = array();
     if (isset($filter_field) & $filter_field != "") {
         if ($filter_field == "ext") {
             $where = " AND (channel like 'SIP/{$filter_value}%' OR dstchannel like 'SIP/{$filter_value}%') ";
         } elseif ($filter_field == "userfield") {
             $in_val = strtolower($filter_value);
             switch ($in_val) {
                 case "outgoing":
                     $where = " AND (userfield like 'audio:O%' OR userfield like 'audio:/var/spool/asterisk/monitor/O%') ";
                     break;
                 case "group":
                     $where = " AND (userfield like 'audio:g%' OR userfield like 'audio:/var/spool/asterisk/monitor/g%') ";
                     break;
                 case "queue":
                     $where = " AND (userfield like 'audio:q%' OR userfield like 'audio:/var/spool/asterisk/monitor/q%') ";
                     break;
                 default:
                     $where = " AND userfield REGEXP '[[:<:]]audio:[0-9]' ";
                     break;
             }
         } else {
             $arrParam[] = "{$filter_value}%";
             $where = " AND {$filter_field} like ? AND userfield LIKE 'audio:%' ";
         }
     }
     if (isset($date_initial) & $date_initial != "" && isset($date_final) & $date_final != "") {
         $arrParam[] = $date_initial;
         $arrParam[] = $date_final;
         $where .= " AND (calldate >= ? AND calldate <= ?) ";
     } else {
         $date_initial = date('Y-m-d') . " 00:00:00";
         $date_final = date('Y-m-d') . " 23:59:59";
         $arrParam[] = $date_initial;
         $arrParam[] = $date_final;
         $where .= " AND (calldate >= ? AND calldate <= ?) ";
     }
     if (isset($extension) & $extension != "") {
         $arrParam[] = $extension;
         $arrParam[] = $extension;
         $where .= " AND (src=? OR dst=?)";
     }
     $arrParam[] = $limit;
     $arrParam[] = $offset;
     $query = "SELECT * FROM cdr WHERE userfield <> '' {$where} ORDER BY uniqueid DESC LIMIT ? OFFSET ?";
     $result = $this->_DB->fetchTable($query, true, $arrParam);
     if ($result == FALSE) {
         $this->errMsg = $this->_DB->errMsg;
         return false;
     }
     //tri
     require_once "modules/agent_console/getinfo.php";
     $oMainConsole = new getInfoMainConsole();
     $oMainConsole->callcenter_db_connect($this->getConfig());
     $index = 0;
     foreach ($result as $row) {
         // get note
         $arr_note = $oMainConsole->getNoteCdr($row['uniqueid']);
         // get delivery info
         $arrDelivery = $oMainConsole->getDeliveryCdr($row['uniqueid']);
         $result[$index]['note_id'] = $arr_note['call_entry_id'];
         $result[$index]['note'] = $arr_note['note'];
         $result[$index]['delivery_id'] = count($arrDelivery) > 0 ? $arrDelivery['id'] : null;
         $index++;
     }
     $oMainConsole->callcenter_db_disconnect();
     return $result;
 }
 function getMonitoring($limit, $offset, $filter_field, $filter_value, $extension, $date_initial, $date_final)
 {
     $where = "";
     $arrParam = array();
     if (isset($filter_field) & $filter_field != "") {
         if ($filter_field == "ext") {
             $where = " AND (channel like 'SIP/{$filter_value}%' OR dstchannel like 'SIP/{$filter_value}%') ";
         } elseif ($filter_field == "userfield") {
             $in_val = strtolower($filter_value);
             switch ($in_val) {
                 case "outgoing":
                     $where = " AND (userfield like 'audio:O%' OR userfield like 'audio:/var/spool/asterisk/monitor/O%') ";
                     break;
                 case "group":
                     $where = " AND (userfield like 'audio:g%' OR userfield like 'audio:/var/spool/asterisk/monitor/g%') ";
                     break;
                 case "queue":
                     $where = " AND (userfield like 'audio:q%' OR userfield like 'audio:/var/spool/asterisk/monitor/q%') ";
                     break;
                 default:
                     $where = " AND userfield REGEXP '[[:<:]]audio:[0-9]' ";
                     break;
             }
         } else {
             $arrParam[] = "{$filter_value}%";
             $where = " AND {$filter_field} like ? ";
         }
     }
     if (isset($date_initial) & $date_initial != "" && isset($date_final) & $date_final != "") {
         $arrParam[] = $date_initial;
         $arrParam[] = $date_final;
         $where .= " AND (calldate >= ? AND calldate <= ?) ";
     } else {
         $date_initial = date('Y-m-d') . " 00:00:00";
         $date_final = date('Y-m-d') . " 23:59:59";
         $arrParam[] = $date_initial;
         $arrParam[] = $date_final;
         $where .= " AND (calldate >= ? AND calldate <= ?) ";
     }
     if (isset($extension) & $extension != "") {
         $arrParam[] = $extension;
         $arrParam[] = $extension;
         $where .= " AND (src=? OR dst=?)";
     }
     $arrParam[] = $limit;
     $arrParam[] = $offset;
     $query = "SELECT * FROM cdr WHERE 1 = 1 {$where} ORDER BY uniqueid DESC LIMIT ? OFFSET ?";
     $result = $this->_DB->fetchTable($query, true, $arrParam);
     if ($result == FALSE) {
         $this->errMsg = $this->_DB->errMsg;
         return false;
     }
     //tri
     require_once "modules/agent_console/getinfo.php";
     $oMainConsole = new getInfoMainConsole();
     $oMainConsole->callcenter_db_connect($this->getConfig());
     $index = 0;
     foreach ($result as $row) {
         // get note
         $arr_note = $oMainConsole->getNoteCdr($row['uniqueid']);
         // get delivery info
         //$arrDelivery = $oMainConsole->getDeliveryCdr($row['uniqueid']);
         $result[$index]['note_id'] = $arr_note['call_entry_id'];
         $result[$index]['note'] = $arr_note['note'];
         $namefile = basename($result[$index]['userfield']);
         $namefile = str_replace("audio:", "", $namefile);
         // handle all situations
         switch ($result[$index]['dcontext']) {
             case 'from-internal-xfer':
                 break;
             case 'from-did-direct':
                 if ($result[$index]['userfield'] == '') {
                     $filename = $this->checkFile(date('Ymd-His', strtotime($result[$index]['calldate'])) . '-' . $result[$index]['uniqueid'] . 'gsm');
                     if (is_null($filename)) {
                         $result[$index]['userfield'] = '';
                     }
                     $result[$index]['userfield'] = "audio:" . $filename;
                     break;
                 }
                 break;
             case 'from-internal':
                 // in case no audio file
                 if ($result[$index]['userfield'] == '') {
                     $filename = $this->checkFile(date('Ymd-His', strtotime($result[$index]['calldate'])) . '-' . $result[$index]['uniqueid'] . 'gsm');
                     if (is_null($filename)) {
                         $result[$index]['userfield'] = '';
                     }
                     $result[$index]['userfield'] = "audio:" . $filename;
                     break;
                 }
                 if (substr($namefile, 0, 1) == 'q') {
                     $result[$index]['userfield2'] = $result[$index]['userfield'];
                     $filename = $this->checkFile(date('Ymd-His', strtotime($result[$index]['calldate'])) . '-' . $result[$index]['uniqueid'] . '.gsm');
                     if (is_null($filename)) {
                         $result[$index]['userfield'] = '';
                     } else {
                         $result[$index]['userfield'] = "audio:" . $filename;
                     }
                     $result[$index]['dcontext'] = 'from-internal-xfer';
                     break;
                 }
                 if (!strpos($result[$index]['userfield'], $result[$index]['uniqueid'])) {
                     $filename = $this->checkFile(date('Ymd-His', strtotime($result[$index]['calldate'])) . '-' . $result[$index]['uniqueid'] . '.gsm');
                     if (is_null($filename)) {
                         $result[$index]['userfield'] = '';
                     }
                     $result[$index]['userfield'] = "audio:" . $filename;
                     break;
                 }
                 break;
             case 'ext-queues':
                 if (!strpos($result[$index]['userfield'], $result[$index]['uniqueid'])) {
                     $filename = $this->checkFile("q" . $result[$index]['dst'] . "-" . date('Ymd-His', strtotime($result[$index]['calldate'])) . '-' . $result[$index]['uniqueid'] . '.gsm');
                     $result[$index]['userfield'] = "audio:/var/spool/asterisk/monitor/" . $filename;
                     break;
                 }
                 break;
             default:
                 break;
         }
         $index++;
     }
     $oMainConsole->callcenter_db_disconnect();
     return $result;
 }