Files
fusionpbx/app/xml_cdr/xml_cdr_inc.php
T

656 lines
26 KiB
PHP
Raw Normal View History

<?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>
2024-08-08 16:17:28 -06:00
Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Tony Fernandez <tfernandez@smartip.ca>
*/
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";
require_once "resources/paging.php";
2016-07-26 20:49:23 -06:00
//check permissions
if (permission_exists('xml_cdr_view')) {
2016-07-26 20:49:23 -06:00
//access granted
}
else {
echo "access denied";
exit;
}
//set permissions
$permission = array();
$permission['xml_cdr_view'] = permission_exists('xml_cdr_view');
$permission['xml_cdr_search_extension'] = permission_exists('xml_cdr_search_extension');
$permission['xml_cdr_delete'] = permission_exists('xml_cdr_delete');
$permission['xml_cdr_domain'] = permission_exists('xml_cdr_domain');
$permission['xml_cdr_search_call_center_queues'] = permission_exists('xml_cdr_search_call_center_queues');
2024-11-01 12:06:23 -04:00
$permission['xml_cdr_search_ring_groups'] = permission_exists('xml_cdr_search_ring_groups');
$permission['xml_cdr_statistics'] = permission_exists('xml_cdr_statistics');
$permission['xml_cdr_archive'] = permission_exists('xml_cdr_archive');
$permission['xml_cdr_all'] = permission_exists('xml_cdr_all');
$permission['xml_cdr_export'] = permission_exists('xml_cdr_export');
$permission['xml_cdr_export_csv'] = permission_exists('xml_cdr_export_csv');
$permission['xml_cdr_export_pdf'] = permission_exists('xml_cdr_export_pdf');
$permission['xml_cdr_search'] = permission_exists('xml_cdr_search');
$permission['xml_cdr_search_direction'] = permission_exists('xml_cdr_search_direction');
$permission['xml_cdr_b_leg'] = permission_exists('xml_cdr_b_leg');
$permission['xml_cdr_search_status'] = permission_exists('xml_cdr_search_status');
$permission['xml_cdr_search_caller_id'] = permission_exists('xml_cdr_search_caller_id');
$permission['xml_cdr_search_start_range'] = permission_exists('xml_cdr_search_start_range');
$permission['xml_cdr_search_duration'] = permission_exists('xml_cdr_search_duration');
$permission['xml_cdr_search_caller_destination'] = permission_exists('xml_cdr_search_caller_destination');
$permission['xml_cdr_search_destination'] = permission_exists('xml_cdr_search_destination');
$permission['xml_cdr_codecs'] = permission_exists('xml_cdr_codecs');
$permission['xml_cdr_search_tta'] = permission_exists('xml_cdr_search_tta');
$permission['xml_cdr_search_hangup_cause'] = permission_exists('xml_cdr_search_hangup_cause');
$permission['xml_cdr_search_recording'] = permission_exists('xml_cdr_search_recording');
$permission['xml_cdr_search_order'] = permission_exists('xml_cdr_search_order');
$permission['xml_cdr_extension'] = permission_exists('xml_cdr_extension');
$permission['xml_cdr_caller_id_name'] = permission_exists('xml_cdr_caller_id_name');
$permission['xml_cdr_caller_id_number'] = permission_exists('xml_cdr_caller_id_number');
$permission['xml_cdr_caller_destination'] = permission_exists('xml_cdr_caller_destination');
$permission['xml_cdr_destination'] = permission_exists('xml_cdr_destination');
$permission['xml_cdr_start'] = permission_exists('xml_cdr_start');
$permission['xml_cdr_tta'] = permission_exists('xml_cdr_tta');
$permission['xml_cdr_duration'] = permission_exists('xml_cdr_duration');
$permission['xml_cdr_pdd'] = permission_exists('xml_cdr_pdd');
$permission['xml_cdr_mos'] = permission_exists('xml_cdr_mos');
$permission['xml_cdr_hangup_cause'] = permission_exists('xml_cdr_hangup_cause');
$permission['xml_cdr_custom_fields'] = permission_exists('xml_cdr_custom_fields');
$permission['xml_cdr_search_advanced'] = permission_exists('xml_cdr_search_advanced');
$permission['xml_cdr_direction'] = permission_exists('xml_cdr_direction');
$permission['xml_cdr_recording'] = permission_exists('xml_cdr_recording');
$permission['xml_cdr_recording_play'] = permission_exists('xml_cdr_recording_play');
$permission['xml_cdr_recording_download'] = permission_exists('xml_cdr_recording_download');
$permission['xml_cdr_account_code'] = permission_exists('xml_cdr_account_code');
$permission['xml_cdr_status'] = permission_exists('xml_cdr_status');
$permission['xml_cdr_details'] = permission_exists('xml_cdr_details');
$permission['xml_cdr_lose_race'] = permission_exists('xml_cdr_lose_race');
$permission['xml_cdr_cc_agent_leg'] = permission_exists('xml_cdr_cc_agent_leg');
$permission['xml_cdr_cc_side'] = permission_exists('xml_cdr_cc_side');
$permission['xml_cdr_call_center_queues'] = permission_exists('xml_cdr_call_center_queues');
//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';
}
//connect to database
$database = database::new();
//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"] ?? '';
$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"] ?? '';
2024-11-01 12:06:23 -04:00
$ring_group_uuid = $_REQUEST["ring_group_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"]) {
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';
}
2019-06-06 21:10:20 -06:00
//check to see if permission does not exist
2024-08-08 16:17:28 -06:00
if (!$permission['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 = '';
}
2016-12-21 17:02:10 -07:00
2019-06-06 21:10:20 -06:00
//set the assigned extensions
2024-08-08 16:17:28 -06:00
if (!$permission['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'];
}
}
}
//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 ?? '');
$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
}
}
2024-08-08 16:17:28 -06:00
if ($_GET['show'] == 'all' && $permission['xml_cdr_all']) {
2017-12-09 12:26:36 -07:00
$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);
}
//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"; }
2014-07-11 01:34:47 +00:00
//set a default number of rows to show
$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
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'];
}
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";
}
//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";
2024-05-23 14:31:56 -06:00
$sql .= "e.effective_caller_id_name as extension_name, \n";
2019-01-30 08:36:37 -07:00
$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";
$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";
$sql .= "c.read_codec, \n";
$sql .= "c.write_codec, \n";
$sql .= "c.cc_side, \n";
//$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-08-08 16:17:28 -06:00
if ($permission['xml_cdr_account_code']) {
$sql .= "c.accountcode, \n";
}
2019-01-30 08:36:37 -07:00
$sql .= "c.answer_stamp, \n";
$sql .= "c.status, \n";
2019-01-30 08:36:37 -07:00
$sql .= "c.sip_hangup_disposition, \n";
2024-08-08 16:17:28 -06:00
if ($permission['xml_cdr_pdd']) {
2019-01-30 08:36:37 -07:00
$sql .= "c.pdd_ms, \n";
}
2024-08-08 16:17:28 -06:00
if ($permission['xml_cdr_mos']) {
2019-01-30 08:36:37 -07:00
$sql .= "c.rtp_audio_in_mos, \n";
}
2019-01-30 08:36:37 -07:00
$sql .= "(c.answer_epoch - c.start_epoch) as tta ";
2024-08-08 16:17:28 -06:00
if (!empty($_REQUEST['show']) && $_REQUEST['show'] == "all" && $permission['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";
2024-08-08 16:17:28 -06:00
if (!empty($_REQUEST['show']) && $_REQUEST['show'] == "all" && $permission['xml_cdr_all']) {
$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;
}
2024-08-08 16:17:28 -06:00
if (!$permission['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)) {
$sql .= "and (c.extension_uuid = '".implode("' or c.extension_uuid = '", $extension_uuids)."') \n";
}
else {
$sql .= "and false \n";
}
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);
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)) {
$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)) {
$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)) {
$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)) {
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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$sql .= "and billsec >= :duration_min \n";
2019-09-28 19:21:55 -06:00
$parameters['duration_min'] = $duration_min;
}
if (is_numeric($duration_max)) {
$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)) {
$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)) {
$sql .= "and hangup_cause like :hangup_cause \n";
2019-06-06 21:10:20 -06:00
$parameters['hangup_cause'] = '%'.$hangup_cause.'%';
}
//exclude ring group legs that were not answered
2024-08-08 16:17:28 -06:00
if (!$permission['xml_cdr_lose_race']) {
$sql .= "and hangup_cause != 'LOSE_RACE' \n";
}
if (!empty($status)) {
2024-02-22 15:54:18 -07:00
$sql .= "and status = :status \n";
$parameters['status'] = $status;
2019-06-06 21:10:20 -06:00
}
2023-05-05 13:46:37 -03:00
if (!empty($xml_cdr_uuid)) {
$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)) {
$sql .= "and bleg_uuid = :bleg_uuid \n";
2019-06-06 21:10:20 -06:00
$parameters['bleg_uuid'] = $bleg_uuid;
}
2024-08-08 16:17:28 -06:00
if ($permission['xml_cdr_account_code'] && !empty($accountcode)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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)) {
$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') {
$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') {
$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
2024-08-08 16:17:28 -06:00
if (!$permission['xml_cdr_cc_agent_leg']) {
$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-08-08 16:17:28 -06:00
if (!empty($cc_side) && $permission['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-08-08 16:17:28 -06:00
if (!empty($call_center_queue_uuid) && $permission['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;
}
2024-11-01 12:06:23 -04:00
//show specific ring groups
if (!empty($ring_group_uuid)) {
$sql .= "and ring_group_uuid = :ring_group_uuid \n";
$parameters['ring_group_uuid'] = $ring_group_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") {
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'];
}
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);
}
}
2019-06-06 21:10:20 -06:00
$sql = str_replace(" ", " ", $sql);
2025-03-04 14:25:47 -04:00
if ($archive_request && filter_var($_SESSION['cdr']['archive_database']['boolean'] ?? false, FILTER_VALIDATE_BOOL)) {
$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'];
}
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;
unset($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
}
?>