2012-06-04 14:58:40 +00:00
<? php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
2023-05-16 10:07:32 -06:00
Portions created by the Initial Developer are Copyright (C) 2008-2023
2012-06-04 14:58:40 +00:00
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
2024-01-13 16:14:51 -05:00
Tony Fernandez <tfernandez@smartip.ca>
2012-06-04 14:58:40 +00:00
*/
2016-07-26 20:49:23 -06:00
2022-10-10 16:35:14 -06:00
//includes files
2023-06-15 14:28:23 -03:00
require_once dirname ( __DIR__ , 2 ) . "/resources/require.php" ;
2016-07-26 20:49:23 -06:00
require_once "resources/check_auth.php" ;
2020-02-11 10:44:00 -07:00
require_once "resources/paging.php" ;
2016-07-26 20:49:23 -06:00
//check permissions
if ( permission_exists ( 'xml_cdr_view' )) {
//access granted
}
else {
echo "access denied" ;
exit ;
}
2012-06-04 14:58:40 +00:00
//set 24hr or 12hr clock
define ( 'TIME_24HR' , 1 );
2023-05-12 16:28:42 -03:00
//set defaults
2023-05-16 10:07:32 -06:00
if ( empty ( $_GET [ 'show' ])) {
2023-05-12 16:28:42 -03:00
$_GET [ 'show' ] = 'false' ;
}
2012-06-04 14:58:40 +00:00
//get post or get variables from http
2023-05-16 10:07:32 -06:00
if ( ! empty ( $_REQUEST )) {
2023-05-12 16:28:42 -03:00
$cdr_id = $_REQUEST [ "cdr_id" ] ?? '' ;
$direction = $_REQUEST [ "direction" ] ?? '' ;
$caller_id_name = $_REQUEST [ "caller_id_name" ] ?? '' ;
$caller_id_number = $_REQUEST [ "caller_id_number" ] ?? '' ;
$caller_destination = $_REQUEST [ "caller_destination" ] ?? '' ;
$extension_uuid = $_REQUEST [ "extension_uuid" ] ?? '' ;
$destination_number = $_REQUEST [ "destination_number" ] ?? '' ;
$context = $_REQUEST [ "context" ] ?? '' ;
$start_stamp_begin = $_REQUEST [ "start_stamp_begin" ] ?? '' ;
$start_stamp_end = $_REQUEST [ "start_stamp_end" ] ?? '' ;
$answer_stamp_begin = $_REQUEST [ "answer_stamp_begin" ] ?? '' ;
$answer_stamp_end = $_REQUEST [ "answer_stamp_end" ] ?? '' ;
$end_stamp_begin = $_REQUEST [ "end_stamp_begin" ] ?? '' ;
$end_stamp_end = $_REQUEST [ "end_stamp_end" ] ?? '' ;
$start_epoch = $_REQUEST [ "start_epoch" ] ?? '' ;
$stop_epoch = $_REQUEST [ "stop_epoch" ] ?? '' ;
$duration_min = $_REQUEST [ "duration_min" ] ?? '' ;
$duration_max = $_REQUEST [ "duration_max" ] ?? '' ;
$billsec = $_REQUEST [ "billsec" ] ?? '' ;
$hangup_cause = $_REQUEST [ "hangup_cause" ] ?? '' ;
2023-10-24 15:58:13 -06:00
$status = $_REQUEST [ "status" ] ?? '' ;
2023-05-12 16:28:42 -03:00
$xml_cdr_uuid = $_REQUEST [ "xml_cdr_uuid" ] ?? '' ;
$bleg_uuid = $_REQUEST [ "bleg_uuid" ] ?? '' ;
$accountcode = $_REQUEST [ "accountcode" ] ?? '' ;
$read_codec = $_REQUEST [ "read_codec" ] ?? '' ;
$write_codec = $_REQUEST [ "write_codec" ] ?? '' ;
$remote_media_ip = $_REQUEST [ "remote_media_ip" ] ?? '' ;
$network_addr = $_REQUEST [ "network_addr" ] ?? '' ;
$bridge_uuid = $_REQUEST [ "network_addr" ] ?? '' ;
$tta_min = $_REQUEST [ 'tta_min' ] ?? '' ;
$tta_max = $_REQUEST [ 'tta_max' ] ?? '' ;
$recording = $_REQUEST [ 'recording' ] ?? '' ;
$order_by = $_REQUEST [ "order_by" ] ?? '' ;
$order = $_REQUEST [ "order" ] ?? '' ;
2024-01-12 13:57:48 -07:00
$cc_side = $_REQUEST [ "cc_side" ] ?? '' ;
$call_center_queue_uuid = $_REQUEST [ "call_center_queue_uuid" ] ?? '' ;
2023-05-12 16:28:42 -03:00
if ( isset ( $_SESSION [ 'cdr' ][ 'field' ]) && is_array ( $_SESSION [ 'cdr' ][ 'field' ])) {
2016-12-22 21:36:46 -07:00
foreach ( $_SESSION [ 'cdr' ][ 'field' ] as $field ) {
$array = explode ( "," , $field );
$field_name = end ( $array );
if ( isset ( $_REQUEST [ $field_name ])) {
2019-06-06 21:10:20 -06:00
$$field_name = $_REQUEST [ $field_name ];
2016-12-22 21:36:46 -07:00
}
2016-12-21 17:02:10 -07:00
}
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $_REQUEST [ "mos_comparison" ])) {
2019-06-06 21:10:20 -06:00
switch ( $_REQUEST [ "mos_comparison" ]) {
2016-03-10 16:29:47 -07:00
case 'less' : $mos_comparison = "<" ; break ;
case 'greater' : $mos_comparison = ">" ; break ;
case 'lessorequal' : $mos_comparison = "<=" ; break ;
case 'greaterorequal' : $mos_comparison = ">=" ; break ;
case 'equal' : $mos_comparison = "<" ; break ;
case 'notequal' : $mos_comparison = "<>" ; break ;
2015-12-09 14:08:33 -08:00
}
2019-09-03 08:29:44 -06:00
}
else {
2016-07-26 20:49:23 -06:00
$mos_comparison = '' ;
}
2019-06-06 21:10:20 -06:00
//$mos_comparison = $_REQUEST["mos_comparison"];
2023-05-12 16:28:42 -03:00
$mos_score = $_REQUEST [ "mos_score" ] ?? '' ;
$leg = $_REQUEST [ "leg" ] ?? 'a' ;
2012-06-04 14:58:40 +00:00
}
2019-06-06 21:10:20 -06:00
//check to see if permission does not exist
2020-02-11 10:44:00 -07:00
if ( ! permission_exists ( 'xml_cdr_b_leg' )) {
2017-06-03 07:31:20 +03:00
$leg = 'a' ;
}
2015-12-09 14:08:33 -08:00
2023-05-12 14:30:16 -06:00
//set the export_format
if ( isset ( $_REQUEST [ 'export_format' ])) {
$export_format = $_REQUEST [ 'export_format' ];
}
else {
$export_format = '' ;
}
2019-06-06 21:10:20 -06:00
//validate the order
switch ( $order ) {
case 'asc' :
break ;
case 'desc' :
break ;
default :
$order = '' ;
2014-06-24 00:37:17 +00:00
}
2016-12-21 17:02:10 -07:00
2019-06-06 21:10:20 -06:00
//set the assigned extensions
2023-05-12 16:28:42 -03:00
if ( ! permission_exists ( 'xml_cdr_domain' ) && isset ( $_SESSION [ 'user' ][ 'extension' ]) && is_array ( $_SESSION [ 'user' ][ 'extension' ])) {
2019-06-06 21:10:20 -06:00
foreach ( $_SESSION [ 'user' ][ 'extension' ] as $row ) {
if ( is_uuid ( $row [ 'extension_uuid' ])) {
$extension_uuids [] = $row [ 'extension_uuid' ];
2012-06-04 14:58:40 +00:00
}
}
}
//set the param variable which is used with paging
2023-05-05 13:46:37 -03:00
$param = "&cdr_id=" . urlencode ( $cdr_id ?? '' );
$param .= "&missed=" . urlencode ( $missed ?? '' );
$param .= "&direction=" . urlencode ( $direction ?? '' );
$param .= "&caller_id_name=" . urlencode ( $caller_id_name ?? '' );
$param .= "&caller_id_number=" . urlencode ( $caller_id_number ?? '' );
$param .= "&caller_destination=" . urlencode ( $caller_destination ?? '' );
$param .= "&extension_uuid=" . urlencode ( $extension_uuid ?? '' );
$param .= "&destination_number=" . urlencode ( $destination_number ?? '' );
$param .= "&context=" . urlencode ( $context ?? '' );
$param .= "&start_stamp_begin=" . urlencode ( $start_stamp_begin ?? '' );
$param .= "&start_stamp_end=" . urlencode ( $start_stamp_end ?? '' );
$param .= "&answer_stamp_begin=" . urlencode ( $answer_stamp_begin ?? '' );
$param .= "&answer_stamp_end=" . urlencode ( $answer_stamp_end ?? '' );
$param .= "&end_stamp_begin=" . urlencode ( $end_stamp_begin ?? '' );
$param .= "&end_stamp_end=" . urlencode ( $end_stamp_end ?? '' );
$param .= "&start_epoch=" . urlencode ( $start_epoch ?? '' );
$param .= "&stop_epoch=" . urlencode ( $stop_epoch ?? '' );
$param .= "&duration_min=" . urlencode ( $duration_min ?? '' );
$param .= "&duration_max=" . urlencode ( $duration_max ?? '' );
$param .= "&billsec=" . urlencode ( $billsec ?? '' );
$param .= "&hangup_cause=" . urlencode ( $hangup_cause ?? '' );
2023-10-24 15:58:13 -06:00
$param .= "&status=" . urlencode ( $status ?? '' );
2023-05-05 13:46:37 -03:00
$param .= "&xml_cdr_uuid=" . urlencode ( $xml_cdr_uuid ?? '' );
$param .= "&bleg_uuid=" . urlencode ( $bleg_uuid ?? '' );
$param .= "&accountcode=" . urlencode ( $accountcode ?? '' );
$param .= "&read_codec=" . urlencode ( $read_codec ?? '' );
$param .= "&write_codec=" . urlencode ( $write_codec ?? '' );
$param .= "&remote_media_ip=" . urlencode ( $remote_media_ip ?? '' );
$param .= "&network_addr=" . urlencode ( $network_addr ?? '' );
$param .= "&bridge_uuid=" . urlencode ( $bridge_uuid ?? '' );
$param .= "&mos_comparison=" . urlencode ( $mos_comparison ?? '' );
$param .= "&mos_score=" . urlencode ( $mos_score ?? '' );
$param .= "&tta_min=" . urlencode ( $tta_min ?? '' );
$param .= "&tta_max=" . urlencode ( $tta_max ?? '' );
$param .= "&recording=" . urlencode ( $recording ?? '' );
2024-01-12 13:57:48 -07:00
$param .= "&cc_side=" . urlencode ( $cc_side ?? '' );
$param .= "&call_center_queue_uuid=" . urlencode ( $call_center_queue_uuid ?? '' );
2023-05-12 16:28:42 -03:00
if ( isset ( $_SESSION [ 'cdr' ][ 'field' ]) && is_array ( $_SESSION [ 'cdr' ][ 'field' ])) {
2016-12-22 21:36:46 -07:00
foreach ( $_SESSION [ 'cdr' ][ 'field' ] as $field ) {
$array = explode ( "," , $field );
$field_name = end ( $array );
if ( isset ( $$field_name )) {
2019-09-06 18:46:50 -06:00
$param .= "&" . $field_name . "=" . urlencode ( $$field_name );
2016-12-22 21:36:46 -07:00
}
2016-12-21 17:02:10 -07:00
}
}
2017-12-09 12:26:36 -07:00
if ( $_GET [ 'show' ] == 'all' && permission_exists ( 'xml_cdr_all' )) {
$param .= "&show=all" ;
2015-03-06 17:15:09 +00:00
}
2023-05-16 10:07:32 -06:00
if ( ! empty ( $order_by )) {
2019-09-06 18:46:50 -06:00
$param .= "&order_by=" . urlencode ( $order_by ) . "&order=" . urlencode ( $order );
2012-08-24 05:56:45 +00:00
}
2012-06-04 14:58:40 +00:00
//create the sql query to get the xml cdr records
2023-05-05 13:46:37 -03:00
if ( empty ( $order_by )) { $order_by = "start_stamp" ; }
if ( empty ( $order )) { $order = "desc" ; }
2012-06-04 14:58:40 +00:00
2014-07-11 01:34:47 +00:00
//set a default number of rows to show
2012-06-04 14:58:40 +00:00
$num_rows = '0' ;
2018-05-01 02:57:47 -06:00
//count the records in the database
/*
if ($_SESSION['cdr']['limit']['numeric'] == 0) {
2019-09-03 08:29:44 -06:00
$sql = "select count(*) from v_xml_cdr ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= ".$sql_where;
$parameters['domain_uuid'] = $domain_uuid;
$database = new database;
$num_rows = $database->select($sql, $parameters, 'column');
unset($sql, $parameters);
2018-05-01 02:57:47 -06:00
}
*/
2017-04-08 15:17:52 -06:00
2018-05-01 02:57:47 -06:00
//limit the number of results
2023-06-06 11:31:22 -06:00
if ( ! empty ( $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ]) && $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ] > 0 ) {
2018-05-01 02:57:47 -06:00
$num_rows = $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ];
2012-06-04 14:58:40 +00:00
}
2018-05-01 02:57:47 -06:00
//set the default paging
2023-05-16 10:07:32 -06:00
//$rows_per_page = $_SESSION['domain']['paging']['numeric'];
2018-05-01 02:57:47 -06:00
//prepare to page the results
//$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; //set on the page that includes this page
2024-02-20 13:57:29 -07:00
if ( empty ( $_GET [ 'page' ]) || ( ! empty ( $_GET [ 'page' ]) && ! is_numeric ( $_GET [ 'page' ]))) {
2023-05-12 16:28:42 -03:00
$_GET [ 'page' ] = 0 ;
}
//ensure page is within bounds of integer
$page = filter_input ( INPUT_GET , 'page' , FILTER_VALIDATE_INT );
2018-05-01 02:57:47 -06:00
$offset = $rows_per_page * $page ;
2021-05-10 11:28:22 -06:00
//set the time zone
if ( isset ( $_SESSION [ 'domain' ][ 'time_zone' ][ 'name' ])) {
$time_zone = $_SESSION [ 'domain' ][ 'time_zone' ][ 'name' ];
}
else {
$time_zone = date_default_timezone_get ();
}
$parameters [ 'time_zone' ] = $time_zone ;
2024-02-20 13:57:29 -07:00
//set the sql time format
$sql_time_format = 'HH12:MI am' ;
if ( ! empty ( $_SESSION [ 'domain' ][ 'time_format' ][ 'text' ])) {
$sql_time_format = $_SESSION [ 'domain' ][ 'time_format' ][ 'text' ] == '12h' ? "HH12:MI am" : "HH24:MI" ;
}
2012-06-04 14:58:40 +00:00
//get the results from the db
2019-01-30 08:36:37 -07:00
$sql = "select \n " ;
$sql .= "c.domain_uuid, \n " ;
2021-07-31 19:28:59 -06:00
$sql .= "c.sip_call_id, \n " ;
2019-01-30 08:36:37 -07:00
$sql .= "e.extension, \n " ;
$sql .= "c.start_stamp, \n " ;
$sql .= "c.end_stamp, \n " ;
2021-05-10 11:28:22 -06:00
$sql .= "to_char(timezone(:time_zone, start_stamp), 'DD Mon YYYY') as start_date_formatted, \n " ;
2024-02-20 13:57:29 -07:00
$sql .= "to_char(timezone(:time_zone, start_stamp), '" . $sql_time_format . "') as start_time_formatted, \n " ;
2019-01-30 08:36:37 -07:00
$sql .= "c.start_epoch, \n " ;
$sql .= "c.hangup_cause, \n " ;
2023-10-24 15:58:13 -06:00
$sql .= "c.billsec as duration, \n " ;
2019-01-30 08:36:37 -07:00
$sql .= "c.billmsec, \n " ;
2022-08-04 18:37:14 -06:00
$sql .= "c.missed_call, \n " ;
2019-01-30 08:36:37 -07:00
$sql .= "c.record_path, \n " ;
$sql .= "c.record_name, \n " ;
$sql .= "c.xml_cdr_uuid, \n " ;
$sql .= "c.bridge_uuid, \n " ;
$sql .= "c.direction, \n " ;
$sql .= "c.billsec, \n " ;
$sql .= "c.caller_id_name, \n " ;
$sql .= "c.caller_id_number, \n " ;
$sql .= "c.caller_destination, \n " ;
$sql .= "c.source_number, \n " ;
$sql .= "c.destination_number, \n " ;
$sql .= "c.leg, \n " ;
2024-03-16 13:56:28 -03:00
$sql .= "c.read_codec, \n " ;
$sql .= "c.write_codec, \n " ;
2021-01-12 16:51:28 -05:00
$sql .= "c.cc_side, \n " ;
2020-09-16 15:26:50 -06:00
//$sql .= "(c.xml is not null or c.json is not null) as raw_data_exists, \n";
//$sql .= "c.json, \n";
2023-05-12 16:28:42 -03:00
if ( isset ( $_SESSION [ 'cdr' ][ 'field' ]) && is_array ( $_SESSION [ 'cdr' ][ 'field' ])) {
2016-06-03 19:47:35 -06:00
foreach ( $_SESSION [ 'cdr' ][ 'field' ] as $field ) {
2016-12-22 16:59:34 -07:00
$array = explode ( "," , $field );
$field_name = end ( $array );
2019-01-30 08:36:37 -07:00
$sql .= $field_name . ", \n " ;
2016-06-03 19:47:35 -06:00
}
}
2023-05-12 16:28:42 -03:00
if ( isset ( $_SESSION [ 'cdr' ][ 'export' ]) && is_array ( $_SESSION [ 'cdr' ][ 'export' ])) {
2018-02-09 13:39:32 -07:00
foreach ( $_SESSION [ 'cdr' ][ 'export' ] as $field ) {
2019-01-30 08:36:37 -07:00
$sql .= $field . ", \n " ;
2018-02-09 13:39:32 -07:00
}
}
2024-01-10 21:34:53 +00:00
if ( permission_exists ( 'xml_cdr_account_code' )) {
$sql .= "c.accountcode, \n " ;
}
2019-01-30 08:36:37 -07:00
$sql .= "c.answer_stamp, \n " ;
2023-10-24 15:58:13 -06:00
$sql .= "c.status, \n " ;
2019-01-30 08:36:37 -07:00
$sql .= "c.sip_hangup_disposition, \n " ;
2014-12-10 03:57:48 +00:00
if ( permission_exists ( "xml_cdr_pdd" )) {
2019-01-30 08:36:37 -07:00
$sql .= "c.pdd_ms, \n " ;
2014-12-10 03:57:48 +00:00
}
if ( permission_exists ( "xml_cdr_mos" )) {
2019-01-30 08:36:37 -07:00
$sql .= "c.rtp_audio_in_mos, \n " ;
2014-12-10 03:57:48 +00:00
}
2019-01-30 08:36:37 -07:00
$sql .= "(c.answer_epoch - c.start_epoch) as tta " ;
2023-06-01 22:55:19 +00:00
if ( ! empty ( $_REQUEST [ 'show' ]) && $_REQUEST [ 'show' ] == "all" && permission_exists ( 'xml_cdr_all' )) {
2019-01-30 08:36:37 -07:00
$sql .= ", c.domain_name \n " ;
2015-03-06 17:15:09 +00:00
}
2019-02-01 13:35:30 -07:00
$sql .= "from v_xml_cdr as c \n " ;
2019-06-06 21:10:20 -06:00
$sql .= "left join v_extensions as e on e.extension_uuid = c.extension_uuid \n " ;
$sql .= "inner join v_domains as d on d.domain_uuid = c.domain_uuid \n " ;
2023-06-01 22:55:19 +00:00
if ( ! empty ( $_REQUEST [ 'show' ]) && $_REQUEST [ 'show' ] == "all" && permission_exists ( 'xml_cdr_all' )) {
2022-08-05 11:15:09 -06:00
$sql .= "where true \n " ;
2019-09-03 08:29:44 -06:00
}
else {
2019-06-06 21:10:20 -06:00
$sql .= "where c.domain_uuid = :domain_uuid \n " ;
$parameters [ 'domain_uuid' ] = $domain_uuid ;
}
2020-05-14 20:48:57 -06:00
if ( ! permission_exists ( 'xml_cdr_domain' )) { //only show the user their calls
2023-05-12 16:28:42 -03:00
if ( isset ( $extension_uuids ) && is_array ( $extension_uuids ) && @ sizeof ( $extension_uuids )) {
2022-08-05 11:15:09 -06:00
$sql .= "and (c.extension_uuid = '" . implode ( "' or c.extension_uuid = '" , $extension_uuids ) . "') \n " ;
2020-09-29 13:56:10 -06:00
}
else {
2022-08-05 11:15:09 -06:00
$sql .= "and false \n " ;
2020-09-29 13:56:10 -06:00
}
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $start_epoch ) && ! empty ( $stop_epoch )) {
2019-09-03 08:29:44 -06:00
$sql .= "and start_epoch between :start_epoch and :stop_epoch \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'start_epoch' ] = $start_epoch ;
$parameters [ 'stop_epoch' ] = $stop_epoch ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $cdr_id )) {
2019-06-06 21:10:20 -06:00
$sql .= "and cdr_id like :cdr_id \n " ;
$parameters [ 'cdr_id' ] = '%' . $cdr_id . '%' ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $direction )) {
2019-06-06 21:10:20 -06:00
$sql .= "and direction = :direction \n " ;
$parameters [ 'direction' ] = $direction ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $caller_id_name )) {
2019-06-06 21:10:20 -06:00
$mod_caller_id_name = str_replace ( "*" , "%" , $caller_id_name );
2021-08-30 19:10:31 -06:00
if ( strstr ( $mod_caller_id_name , '%' )) {
$sql .= "and caller_id_name like :caller_id_name \n " ;
$parameters [ 'caller_id_name' ] = $mod_caller_id_name ;
}
else {
$sql .= "and caller_id_name = :caller_id_name \n " ;
$parameters [ 'caller_id_name' ] = $mod_caller_id_name ;
}
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $caller_id_number )) {
2021-08-30 19:10:31 -06:00
$mod_caller_id_number = str_replace ( "*" , "%" , $caller_id_number );
$mod_caller_id_number = preg_replace ( "#[^\+0-9.%/]#" , "" , $mod_caller_id_number );
if ( strstr ( $mod_caller_id_number , '%' )) {
$sql .= "and caller_id_number like :caller_id_number \n " ;
$parameters [ 'caller_id_number' ] = $mod_caller_id_number ;
}
else {
$sql .= "and caller_id_number = :caller_id_number \n " ;
$parameters [ 'caller_id_number' ] = $mod_caller_id_number ;
2019-06-06 21:10:20 -06:00
}
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $extension_uuid ) && is_uuid ( $extension_uuid )) {
2019-06-06 21:10:20 -06:00
$sql .= "and e.extension_uuid = :extension_uuid \n " ;
2019-09-28 18:42:13 -06:00
$parameters [ 'extension_uuid' ] = $extension_uuid ;
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $caller_destination )) {
2021-08-30 19:10:31 -06:00
$mod_caller_destination = str_replace ( "*" , "%" , $caller_destination );
$mod_caller_destination = preg_replace ( "#[^\+0-9.%/]#" , "" , $mod_caller_destination );
if ( strstr ( $mod_caller_destination , '%' )) {
$sql .= "and caller_destination like :caller_destination \n " ;
$parameters [ 'caller_destination' ] = $mod_caller_destination ;
}
else {
$sql .= "and caller_destination = :caller_destination \n " ;
$parameters [ 'caller_destination' ] = $mod_caller_destination ;
2019-06-06 21:10:20 -06:00
}
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $destination_number )) {
2021-08-30 19:10:31 -06:00
$mod_destination_number = str_replace ( "*" , "%" , $destination_number );
$mod_destination_number = preg_replace ( "#[^\+0-9.%/]#" , "" , $mod_destination_number );
if ( strstr ( $mod_destination_number , '%' )) {
$sql .= "and destination_number like :destination_number \n " ;
$parameters [ 'destination_number' ] = $mod_destination_number ;
}
else {
$sql .= "and destination_number = :destination_number \n " ;
$parameters [ 'destination_number' ] = $mod_destination_number ;
2019-06-06 21:10:20 -06:00
}
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $context )) {
2019-06-06 21:10:20 -06:00
$sql .= "and context like :context \n " ;
$parameters [ 'context' ] = '%' . $context . '%' ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $_SESSION [ 'cdr' ][ 'field' ]) && is_array ( $_SESSION [ 'cdr' ][ 'field' ])) {
2019-06-06 21:10:20 -06:00
foreach ( $_SESSION [ 'cdr' ][ 'field' ] as $field ) {
$array = explode ( "," , $field );
$field_name = end ( $array );
if ( isset ( $$field_name )) {
$$field_name = $_REQUEST [ $field_name ];
2023-05-05 13:46:37 -03:00
if ( ! empty ( $$field_name )) {
2021-08-30 19:10:31 -06:00
if ( strstr ( $$field_name , '%' )) {
$sql .= "and $field_name like :" . $field_name . " \n " ;
$parameters [ $field_name ] = $$field_name ;
}
else {
$sql .= "and $field_name = :" . $field_name . " \n " ;
$parameters [ $field_name ] = $$field_name ;
}
2019-06-06 21:10:20 -06:00
}
}
}
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $start_stamp_begin ) && ! empty ( $start_stamp_end )) {
2022-08-05 11:15:09 -06:00
$sql .= "and start_stamp between :start_stamp_begin::timestamptz and :start_stamp_end::timestamptz \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'start_stamp_begin' ] = $start_stamp_begin . ':00.000 ' . $time_zone ;
$parameters [ 'start_stamp_end' ] = $start_stamp_end . ':59.999 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
else {
2023-05-05 13:46:37 -03:00
if ( ! empty ( $start_stamp_begin )) {
2022-08-05 11:15:09 -06:00
$sql .= "and start_stamp >= :start_stamp_begin \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'start_stamp_begin' ] = $start_stamp_begin . ':00.000 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $start_stamp_end )) {
2022-08-05 11:15:09 -06:00
$sql .= "and start_stamp <= :start_stamp_end \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'start_stamp_end' ] = $start_stamp_end . ':59.999 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $answer_stamp_begin ) && ! empty ( $answer_stamp_end )) {
2022-08-05 11:15:09 -06:00
$sql .= "and answer_stamp between :answer_stamp_begin::timestamptz and :answer_stamp_end::timestamptz \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'answer_stamp_begin' ] = $answer_stamp_begin . ':00.000 ' . $time_zone ;
$parameters [ 'answer_stamp_end' ] = $answer_stamp_end . ':59.999 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
else {
2023-05-05 13:46:37 -03:00
if ( ! empty ( $answer_stamp_begin )) {
2022-08-05 11:15:09 -06:00
$sql .= "and answer_stamp >= :answer_stamp_begin \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'answer_stamp_begin' ] = $answer_stamp_begin . ':00.000 ' . $time_zone ;;
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $answer_stamp_end )) {
2022-08-05 11:15:09 -06:00
$sql .= "and answer_stamp <= :answer_stamp_end \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'answer_stamp_end' ] = $answer_stamp_end . ':59.999 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $end_stamp_begin ) && ! empty ( $end_stamp_end )) {
2022-08-05 11:15:09 -06:00
$sql .= "and end_stamp between :end_stamp_begin::timestamptz and :end_stamp_end::timestamptz \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'end_stamp_begin' ] = $end_stamp_begin . ':00.000 ' . $time_zone ;
$parameters [ 'end_stamp_end' ] = $end_stamp_end . ':59.999 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
else {
2023-05-05 13:46:37 -03:00
if ( ! empty ( $end_stamp_begin )) {
2022-08-05 11:15:09 -06:00
$sql .= "and end_stamp >= :end_stamp_begin \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'end_stamp_begin' ] = $end_stamp_begin . ':00.000 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $end_stamp_end )) {
2022-08-05 11:15:09 -06:00
$sql .= "and end_stamp <= :end_stamp_end \n " ;
2021-05-10 11:28:22 -06:00
$parameters [ 'end_stamp' ] = $end_stamp_end . ':59.999 ' . $time_zone ;
2019-06-06 21:10:20 -06:00
}
}
2019-09-28 19:21:55 -06:00
if ( is_numeric ( $duration_min )) {
2023-10-24 15:58:13 -06:00
$sql .= "and billsec >= :duration_min \n " ;
2019-09-28 19:21:55 -06:00
$parameters [ 'duration_min' ] = $duration_min ;
}
if ( is_numeric ( $duration_max )) {
2023-10-24 15:58:13 -06:00
$sql .= "and billsec <= :duration_max \n " ;
2019-09-28 19:21:55 -06:00
$parameters [ 'duration_max' ] = $duration_max ;
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $billsec )) {
2022-08-05 11:15:09 -06:00
$sql .= "and billsec like :billsec \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'billsec' ] = '%' . $billsec . '%' ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $hangup_cause )) {
2022-08-05 11:15:09 -06:00
$sql .= "and hangup_cause like :hangup_cause \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'hangup_cause' ] = '%' . $hangup_cause . '%' ;
}
2022-08-05 11:15:09 -06:00
//exclude ring group legs that were not answered
2022-08-05 11:30:57 -06:00
if ( ! permission_exists ( 'xml_cdr_lose_race' )) {
2022-08-05 11:15:09 -06:00
$sql .= "and hangup_cause != 'LOSE_RACE' \n " ;
2021-02-18 07:51:48 -06:00
}
2023-10-24 15:58:13 -06:00
if ( ! empty ( $status )) {
2024-02-22 15:54:18 -07:00
$sql .= "and status = :status \n " ;
2023-10-24 15:58:13 -06:00
$parameters [ 'status' ] = $status ;
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $xml_cdr_uuid )) {
2022-08-05 11:15:09 -06:00
$sql .= "and xml_cdr_uuid = :xml_cdr_uuid \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'xml_cdr_uuid' ] = $xml_cdr_uuid ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $bleg_uuid )) {
2022-08-05 11:15:09 -06:00
$sql .= "and bleg_uuid = :bleg_uuid \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'bleg_uuid' ] = $bleg_uuid ;
}
2024-01-10 21:34:53 +00:00
if ( permission_exists ( 'xml_cdr_account_code' ) && ! empty ( $accountcode )) {
2022-08-05 11:15:09 -06:00
$sql .= "and c.accountcode = :accountcode \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'accountcode' ] = $accountcode ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $read_codec )) {
2022-08-05 11:15:09 -06:00
$sql .= "and read_codec like :read_codec \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'read_codec' ] = '%' . $read_codec . '%' ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $write_codec )) {
2022-08-05 11:15:09 -06:00
$sql .= "and write_codec like :write_codec \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'write_codec' ] = '%' . $write_codec . '%' ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $remote_media_ip )) {
2022-08-05 11:15:09 -06:00
$sql .= "and remote_media_ip like :remote_media_ip \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'remote_media_ip' ] = $remote_media_ip ;
}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $network_addr )) {
2022-08-05 11:15:09 -06:00
$sql .= "and network_addr like :network_addr \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'network_addr' ] = '%' . $network_addr . '%' ;
}
2023-05-05 13:46:37 -03:00
//if (strlen($mos_comparison) > 0 && !empty($mos_score) ) {
2019-06-06 21:10:20 -06:00
// $sql .= "and rtp_audio_in_mos = :mos_comparison :mos_score ";
// $parameters['mos_comparison'] = $mos_comparison;
// $parameters['mos_score'] = $mos_score;
//}
2023-05-05 13:46:37 -03:00
if ( ! empty ( $leg )) {
2022-08-05 11:15:09 -06:00
$sql .= "and leg = :leg \n " ;
2019-06-06 21:10:20 -06:00
$parameters [ 'leg' ] = $leg ;
}
2019-09-28 19:30:07 -06:00
if ( is_numeric ( $tta_min )) {
2022-08-05 11:15:09 -06:00
$sql .= "and (c.answer_epoch - c.start_epoch) >= :tta_min \n " ;
2019-09-28 19:30:07 -06:00
$parameters [ 'tta_min' ] = $tta_min ;
}
if ( is_numeric ( $tta_max )) {
2022-08-05 11:15:09 -06:00
$sql .= "and (c.answer_epoch - c.start_epoch) <= :tta_max \n " ;
2019-09-28 19:30:07 -06:00
$parameters [ 'tta_max' ] = $tta_max ;
}
2019-09-28 19:47:00 -06:00
if ( $recording == 'true' || $recording == 'false' ) {
if ( $recording == 'true' ) {
2022-08-05 11:15:09 -06:00
$sql .= "and c.record_path is not null and c.record_name is not null \n " ;
2019-09-28 19:47:00 -06:00
}
if ( $recording == 'false' ) {
2022-08-05 11:15:09 -06:00
$sql .= "and (c.record_path is null or c.record_name is null) \n " ;
2019-09-28 19:47:00 -06:00
}
}
2021-02-21 18:26:24 -06:00
//show agent originated legs only to those with the permission
if ( ! permission_exists ( 'xml_cdr_cc_agent_leg' )) {
2022-08-05 11:15:09 -06:00
$sql .= "and (cc_side is null or cc_side != 'agent') \n " ;
2021-02-21 18:26:24 -06:00
}
2024-01-12 13:57:48 -07:00
//call center queue search for member or agent
2024-01-13 16:14:51 -05:00
if ( ! empty ( $cc_side ) && permission_exists ( 'xml_cdr_cc_side' )) {
2024-01-12 13:57:48 -07:00
$sql .= "and cc_side = :cc_side \n " ;
$parameters [ 'cc_side' ] = $cc_side ;
}
//show specific call center queue
2024-01-13 17:07:11 -07:00
if ( ! empty ( $call_center_queue_uuid ) && permission_exists ( 'xml_cdr_call_center_queues' )) {
2024-01-12 13:57:48 -07:00
$sql .= "and call_center_queue_uuid = :call_center_queue_uuid \n " ;
$parameters [ 'call_center_queue_uuid' ] = $call_center_queue_uuid ;
}
2019-06-06 21:10:20 -06:00
//end where
2023-05-05 13:46:37 -03:00
if ( ! empty ( $order_by )) {
2019-09-06 18:46:50 -06:00
$sql .= order_by ( $order_by , $order );
2015-03-06 17:15:09 +00:00
}
2023-05-12 14:30:16 -06:00
if ( $export_format !== "csv" && $export_format !== "pdf" ) {
2016-05-04 22:35:05 -06:00
if ( $rows_per_page == 0 ) {
2019-06-06 21:10:20 -06:00
$sql .= " limit :limit offset 0 \n " ;
$parameters [ 'limit' ] = $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ];
2016-05-04 22:35:05 -06:00
}
else {
2019-06-06 21:10:20 -06:00
$sql .= " limit :limit offset :offset \n " ;
2023-05-16 15:05:07 -04:00
$parameters [ 'limit' ] = intval ( $rows_per_page );
$parameters [ 'offset' ] = intval ( $offset );
2016-05-04 22:35:05 -06:00
}
2012-07-11 02:23:05 +00:00
}
2019-06-06 21:10:20 -06:00
$sql = str_replace ( " " , " " , $sql );
2018-04-23 15:24:30 -04:00
$database = new database ;
2020-02-11 10:44:00 -07:00
if ( $archive_request && $_SESSION [ 'cdr' ][ 'archive_database' ][ 'boolean' ] == 'true' ) {
$database -> driver = $_SESSION [ 'cdr' ][ 'archive_database_driver' ][ 'text' ];
$database -> host = $_SESSION [ 'cdr' ][ 'archive_database_host' ][ 'text' ];
$database -> type = $_SESSION [ 'cdr' ][ 'archive_database_type' ][ 'text' ];
$database -> port = $_SESSION [ 'cdr' ][ 'archive_database_port' ][ 'text' ];
$database -> db_name = $_SESSION [ 'cdr' ][ 'archive_database_name' ][ 'text' ];
$database -> username = $_SESSION [ 'cdr' ][ 'archive_database_username' ][ 'text' ];
$database -> password = $_SESSION [ 'cdr' ][ 'archive_database_password' ][ 'text' ];
2018-04-23 15:24:30 -04:00
}
2019-06-06 21:10:20 -06:00
$result = $database -> select ( $sql , $parameters , 'all' );
2020-12-28 14:23:00 -07:00
$result_count = is_array ( $result ) ? sizeof ( $result ) : 0 ;
2019-09-28 18:47:53 -06:00
unset ( $database , $sql , $parameters );
2018-05-01 02:57:47 -06:00
//return the paging
2023-05-16 10:07:32 -06:00
if ( empty ( $_REQUEST [ 'export_format' ])) {
2020-01-28 17:27:23 -07:00
list ( $paging_controls_mini , $rows_per_page ) = paging ( $num_rows , $param , $rows_per_page , true , $result_count ); //top
list ( $paging_controls , $rows_per_page ) = paging ( $num_rows , $param , $rows_per_page , false , $result_count ); //bottom
}
2012-06-04 14:58:40 +00:00
2020-04-24 12:07:35 -04:00
?>