Portions created by the Initial Developer are Copyright (C) 2008-2020 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //includes require_once "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; //check permissions if (permission_exists('xml_cdr_export')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //additional includes $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; $archive_request = $_POST['archive_request'] == 'true' ? true : false; require_once "xml_cdr_inc.php"; //get the format $export_format = $_REQUEST['export_format']; //export the csv if (permission_exists('xml_cdr_export_csv') && $export_format == 'csv') { //define file name if ($_GET['show'] == 'all' && permission_exists('xml_cdr_all')) { $csv_filename = "cdr_".date("Ymd_His").".csv"; } else { $csv_filename = "cdr_".$_SESSION['domain_name']."_".date("Ymd_His").".csv"; } //set the http headers header('Content-type: application/octet-binary'); header('Content-Disposition: attachment; filename='.$csv_filename); //set the csv headers $z = 0; foreach ($result[0] as $key => $val) { if ($key != "xml" && $key != "json") { if ($z == 0) { echo '"'.$key.'"'; } else { echo ',"'.$key.'"'; } } $z++; } echo "\n"; //show the csv data $x=0; while (true) { $z = 0; foreach ($result[0] as $key => $val) { if ($key != "xml" && $key != "json") { if ($z == 0) { echo '"'.$result[$x][$key].'"'; } else { echo ',"'.$result[$x][$key].'"'; } } $z++; } echo "\n"; ++$x; if ($x > ($result_count-1)) { break; } } } //export as a PDF if (permission_exists('xml_cdr_export_pdf') && $export_format == 'pdf') { //load pdf libraries require_once "resources/tcpdf/tcpdf.php"; require_once "resources/fpdi/fpdi.php"; //determine page size switch ($_SESSION['fax']['page_size']['text']) { case 'a4': $page_width = 11.7; //in $page_height = 8.3; //in break; case 'legal': $page_width = 14; //in $page_height = 8.5; //in break; case 'letter': default : $page_width = 11; //in $page_height = 8.5; //in } // initialize pdf $pdf = new FPDI('L', 'in'); $pdf->SetAutoPageBreak(false); $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); $pdf->SetMargins(0.5, 0.5, 0.5, true); //set default font $pdf->SetFont('helvetica', '', 7); //add new page $pdf->AddPage('L', array($page_width, $page_height)); //set the number of columns $columns = 12; //write the table column headers $data_start = ''; $data_end = '
'; $data_head = ''; $data_head .= ''.$text['label-direction'].''; $data_head .= ''.$text['label-caller_id_name'].''; $data_head .= ''.$text['label-caller_id_number'].''; $data_head .= ''.$text['label-destination'].''; $data_head .= ''.$text['label-start'].''; $data_head .= ''.$text['label-tta'].''; $data_head .= ''.$text['label-duration'].''; $data_head .= ''.$text['label-billsec'].''; $data_head .= ''."PDD".''; $data_head .= ''."MOS".''; if (is_array($_SESSION['cdr']['field'])) { foreach ($_SESSION['cdr']['field'] as $field) { $array = explode(",", $field); $field_name = end($array); $field_label = ucwords(str_replace("_", " ", $field_name)); $field_label = str_replace("Sip", "SIP", $field_label); if ($field_name != "destination_number") { $data_head .= ''.$field_label.''; } $columns = $columns + 1; } } $data_head .= ''; $data_head .= ''.$text['label-hangup_cause'].''; $data_head .= ''; $data_head .= '
'; //initialize total variables $total['duration'] = 0; $total['billmsec'] = 0; $total['pdd_ms'] = 0; $total['rtp_audio_in_mos'] = 0; $total['tta'] = 0; //write the row cells $z = 0; // total counter $p = 0; // per page counter if (sizeof($result) > 0) { foreach ($result as $cdr_num => $fields) { $data_body[$p] .= ''; $data_body[$p] .= ''.$text['label-'.$fields['direction']].''; $data_body[$p] .= ''.$fields['caller_id_name'].''; $data_body[$p] .= ''.$fields['caller_id_number'].''; $data_body[$p] .= ''.format_phone($fields['destination_number']).''; $data_body[$p] .= ''.$fields['start_stamp'].''; $total['tta'] += ($fields['tta'] > 0) ? $fields['tta'] : 0; $data_body[$p] .= ''.(($fields['tta'] >= 0) ? $fields['tta'].'s' : null).''; $seconds = ($fields['hangup_cause'] == "ORIGINATOR_CANCEL") ? $fields['duration'] : round(($fields['billmsec'] / 1000), 0, PHP_ROUND_HALF_UP); $total['duration'] += $seconds; $data_body[$p] .= ''.gmdate("G:i:s", $seconds).''; $total['billmsec'] += $fields['billmsec']; $data_body[$p] .= ''.number_format(round($fields['billmsec'] / 1000, 2), 2).'s'; $data_body[$p] .= ''; if (permission_exists("xml_cdr_pdd")) { $total['pdd_ms'] += $fields['pdd_ms']; $data_body[$p] .= number_format(round($fields['pdd_ms'] / 1000, 2), 2).'s'; } $data_body[$p] .= ''; $data_body[$p] .= ''; if (permission_exists("xml_cdr_mos")) { $total['rtp_audio_in_mos'] += $fields['rtp_audio_in_mos']; $data_body[$p] .= (strlen($total['rtp_audio_in_mos']) > 0) ? $fields['rtp_audio_in_mos'] : null; } $data_body[$p] .= ''; if (is_array($_SESSION['cdr']['field'])) { foreach ($_SESSION['cdr']['field'] as $field) { $array = explode(",", $field); $field_name = end($array); $field_label = ucwords(str_replace("_", " ", $field_name)); $field_label = str_replace("Sip", "SIP", $field_label); if ($field_name != "destination_number") { $data_body[$p] .= ''; $data_body[$p] .= $fields[$field_name]; $data_body[$p] .= ''; } } } $data_body[$p] .= ' '; $data_body[$p] .= ''.ucwords(strtolower(str_replace("_", " ", $fields['hangup_cause']))).''; $data_body[$p] .= ''; $z++; $p++; if ($p == 60) { //output data $data_body_chunk = $data_start.$data_head; foreach ($data_body as $data_body_row) { $data_body_chunk .= $data_body_row; } $data_body_chunk .= $data_end; $pdf->writeHTML($data_body_chunk, true, false, false, false, ''); unset($data_body_chunk); unset($data_body); $p = 0; //add new page $pdf->AddPage('L', array($page_width, $page_height)); } } } //write divider $data_footer = ''; //write totals $data_footer .= ''; $data_footer .= ''.$text['label-total'].''; $data_footer .= ''.$z.''; $data_footer .= ''; $data_footer .= ''.number_format(round($total['tta'], 1), 0).'s'; $data_footer .= ''.gmdate("G:i:s", $total['duration']).''; $data_footer .= ''.gmdate("G:i:s", round($total['billmsec'] / 1000, 0)).''; $data_footer .= ''.number_format(round(($total['pdd_ms'] / 1000), 2), 2).'s'; $data_footer .= ''; $data_footer .= ''; //write divider $data_footer .= '
'; //write averages $data_footer .= ''; $data_footer .= ''.$text['label-average'].''; $data_footer .= ''; $data_footer .= ''.round(($total['tta'] / $z), 1).''; $data_footer .= ''.gmdate("G:i:s", ($total['duration'] / $z)).''; $data_footer .= ''.gmdate("G:i:s", round($total['billmsec'] / $z / 1000, 0)).''; $data_footer .= ''.number_format(round(($total['pdd_ms'] / $z / 1000), 2), 2).'s'; $data_footer .= ''.round(($total['rtp_audio_in_mos'] / $z), 2).''; $data_footer .= ''; $data_footer .= ''; //write divider $data_footer .= '
'; //add last page if ($p >= 55) { $pdf->AddPage('L', array($page_width, $page_height)); } //output remaining data $data_body_chunk = $data_start.$data_head; foreach ($data_body as $data_body_row) { $data_body_chunk .= $data_body_row; } $data_body_chunk .= $data_footer.$data_end; $pdf->writeHTML($data_body_chunk, true, false, false, false, ''); unset($data_body_chunk); //define file name $pdf_filename = "cdr_".$_SESSION['domain_name']."_".date("Ymd_His").".pdf"; header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Description: File Transfer"); header('Content-Disposition: attachment; filename="'.$pdf_filename.'"'); header("Content-Type: application/pdf"); header('Accept-Ranges: bytes'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // date in the past // push pdf download $pdf -> Output($pdf_filename, 'D'); // Display [I]nline, Save to [F]ile, [D]ownload } ?>