Portions created by the Initial Developer are Copyright (C) 2008-2019 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //includes include "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; //check permissions if (permission_exists('xml_cdr_details')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //get the http values and set them to a variable if (is_uuid($_REQUEST["id"])) { $uuid = $_REQUEST["id"]; } //get the cdr string from the database $sql = "select * from v_xml_cdr "; if (permission_exists('xml_cdr_all')) { $sql .= "where xml_cdr_uuid = :xml_cdr_uuid "; } else { $sql .= "where xml_cdr_uuid = :xml_cdr_uuid "; $sql .= "and domain_uuid = :domain_uuid "; $parameters['domain_uuid'] = $domain_uuid; } $parameters['xml_cdr_uuid'] = $uuid; $database = new database; $row = $database->select($sql, $parameters, 'row'); if (is_array($row) && @sizeof($row) != 0) { $start_stamp = trim($row["start_stamp"]); $xml_string = trim($row["xml"]); $json_string = trim($row["json"]); } unset($sql, $parameters, $row); //get the format if (strlen($xml_string) > 0) { $format = "xml"; } if (strlen($json_string) > 0) { $format = "json"; } //get cdr from the file system if ($format != "xml" && $format != "json") { $tmp_time = strtotime($start_stamp); $tmp_year = date("Y", $tmp_time); $tmp_month = date("M", $tmp_time); $tmp_day = date("d", $tmp_time); $tmp_dir = $_SESSION['switch']['log']['dir'].'/xml_cdr/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day; if (file_exists($tmp_dir.'/'.$uuid.'.json')) { $format = "json"; $json_string = file_get_contents($tmp_dir.'/'.$uuid.'.json'); } if (file_exists($tmp_dir.'/'.$uuid.'.xml')) { $format = "xml"; $xml_string = file_get_contents($tmp_dir.'/'.$uuid.'.xml'); } } //parse the xml to get the call detail record info try { if ($format == 'json') { $array = json_decode($json_string,true); if (is_null($array)) { $j = stripslashes($json_string); $array = json_decode($j,true); } } if ($format == 'xml') { $array = json_decode(json_encode((array)simplexml_load_string($xml_string)),true); } } catch (Exception $e) { echo $e->getMessage(); } //get the header require_once "resources/header.php"; //page title and description echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
".$text['title2']."\n"; echo " \n"; echo "
\n"; echo "".$text['description-5']." \n"; echo "".$text['description-6']." \n"; echo "".$text['description-7']." \n"; echo "
\n"; echo "
\n"; echo "
\n"; //detail summary //get the variables $xml_cdr_uuid = urldecode($array["variables"]["uuid"]); $direction = urldecode($array["variables"]["call_direction"]); $language = urldecode($array["variables"]["language"]); $start_epoch = urldecode($array["variables"]["start_epoch"]); $start_stamp = urldecode($array["variables"]["start_stamp"]); $start_uepoch = urldecode($array["variables"]["start_uepoch"]); $answer_stamp = urldecode($array["variables"]["answer_stamp"]); $answer_epoch = urldecode($array["variables"]["answer_epoch"]); $answer_uepoch = urldecode($array["variables"]["answer_uepoch"]); $end_epoch = urldecode($array["variables"]["end_epoch"]); $end_uepoch = urldecode($array["variables"]["end_uepoch"]); $end_stamp = urldecode($array["variables"]["end_stamp"]); $duration = urldecode($array["variables"]["duration"]); $mduration = urldecode($array["variables"]["mduration"]); $billsec = urldecode($array["variables"]["billsec"]); $billmsec = urldecode($array["variables"]["billmsec"]); $bridge_uuid = urldecode($array["variables"]["bridge_uuid"]); $read_codec = urldecode($array["variables"]["read_codec"]); $write_codec = urldecode($array["variables"]["write_codec"]); $remote_media_ip = urldecode($array["variables"]["remote_media_ip"]); $hangup_cause = urldecode($array["variables"]["hangup_cause"]); $hangup_cause_q850 = urldecode($array["variables"]["hangup_cause_q850"]); if (!isset($array["callflow"][0])) { $tmp = $array["callflow"]; unset($array["callflow"]); $array["callflow"][0] = $tmp; } $x = 0; if (is_array($array["callflow"])) foreach ($array["callflow"] as $row) { if ($x == 0) { $destination_number = urldecode($row["caller_profile"]["destination_number"]); $context = urldecode($row["caller_profile"]["context"]); $network_addr = urldecode($row["caller_profile"]["network_addr"]); } $caller_id_name = urldecode($row["caller_profile"]["caller_id_name"]); $caller_id_number = urldecode($row["caller_profile"]["caller_id_number"]); $call_flow_summary[$x]["destination_number"] = urldecode($row["caller_profile"]["destination_number"]); $tmp_start_stamp = urldecode($row["times"]["profile_created_time"]) / 1000000; if ($x == 0) { $tmp_end_stamp = urldecode($row["times"]["hangup_time"]) / 1000000; } else { $tmp_end_stamp = urldecode($row["times"]["transfer_time"]) / 1000000; } $call_flow_summary[$x]["start_stamp"] = date("Y-m-d H:i:s", $tmp_start_stamp); $call_flow_summary[$x]["end_stamp"] = date("Y-m-d H:i:s", $tmp_end_stamp); $call_flow_summary[$x]["duration"] = gmdate("G:i:s", $tmp_end_stamp - $tmp_start_stamp); $x++; } unset($x); $tmp_year = date("Y", strtotime($start_stamp)); $tmp_month = date("M", strtotime($start_stamp)); $tmp_day = date("d", strtotime($start_stamp)); $c = 0; $row_style["0"] = "row_style0"; $row_style["1"] = "row_style1"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
".$text['label-summary']." 
\n"; echo "\n"; echo "\n"; echo "\n"; //echo "\n"; //echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo " \n"; //echo " \n"; //echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
".$text['table-direction']."LanguageContext".$text['table-name']."".$text['table-download']."".$text['label-destination']."".$text['label-start']."".$text['table-end']."".$text['label-duration']."".$text['label-status']."
".escape($direction)."".$language."".$context.""; if (file_exists($_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day.'/'.$uuid.'.wav')) { //echo " \n"; //echo " "; echo " \n"; //$tmp_file_array = explode("\.",$file); echo $caller_id_name.' '; echo " "; } else { echo $caller_id_name.' '; } echo " "; if (file_exists($_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day.'/'.$uuid.'.wav')) { echo " \n"; echo escape($caller_id_number).' '; echo " "; } else { echo escape($caller_id_number).' '; } echo " ".escape($destination_number)."".escape($start_stamp)."".escape($end_stamp)."".escape(gmdate("G:i:s", $duration))."".escape($hangup_cause)."
"; echo "

\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
".$text['label-call_flow_summary']." 
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; foreach (array_reverse($call_flow_summary) as $row) { echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "\n"; $c = $c ? 0 : 1; } echo "
".$text['label-destination']."".$text['label-start']."".$text['table-end']."".$text['label-duration']."
".escape($row["destination_number"])."".escape($row["start_stamp"])."".escape($row["end_stamp"])."".escape($row["duration"])."
"; echo "

\n"; //call stats $c = 0; $row_style["0"] = "row_style0"; $row_style["1"] = "row_style1"; if (is_array($array["call-stats"])) { if (is_array($array["call-stats"]['audio'])) { foreach($array["call-stats"]['audio'] as $audio_direction => $stat) { echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-call-stats'].": ".$audio_direction."  
\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; foreach($stat as $key => $value) { $value = urldecode($value); echo "\n"; echo " \n"; echo " \n"; echo "\n"; $c = $c ? 0 : 1; } echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-name']."".$text['label-value']."
".escape($key)."".escape(wordwrap($value,75,"\n", true))." 


\n"; } } } echo ""; echo "

\n"; //channel data loop $c = 0; $row_style["0"] = "row_style0"; $row_style["1"] = "row_style1"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
".$text['label-channel']." 
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (is_array($array["channel_data"])) foreach($array["channel_data"] as $key => $value) { $value = urldecode($value); echo "\n"; echo " \n"; echo " \n"; echo "\n"; $c = $c ? 0 : 1; } echo "
".$text['label-name']."".$text['label-value']."
".escape($key)." ".escape(wordwrap($value,75,"\n", TRUE))." 
"; echo "

\n"; //variable loop $c = 0; $row_style["0"] = "row_style0"; $row_style["1"] = "row_style1"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; echo "\n"; echo "
".$text['label-variables']." 
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (is_array($array["variables"])) { foreach($array["variables"] as $key => $value) { if (is_array($value)) { $value = implode($value); } $value = urldecode($value); if ($key != "digits_dialed" && $key != "dsn") { echo "\n"; echo " \n"; if ($key == "bridge_uuid" || $key == "signal_bond") { echo " \n"; } else { echo " \n"; } echo "\n"; } $c = $c ? 0 : 1; } } echo "
".$text['label-name']."".$text['label-value']."
".escape($key)."\n"; echo " ".escape($value)." \n"; $tmp_dir = $_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day; $tmp_name = ''; if (file_exists($tmp_dir.'/'.$value.'.wav')) { $tmp_name = $value.".wav"; } else if (file_exists($tmp_dir.'/'.$value.'_1.wav')) { $tmp_name = $value."_1.wav"; } else if (file_exists($tmp_dir.'/'.$value.'.mp3')) { $tmp_name = $value.".mp3"; } else if (file_exists($tmp_dir.'/'.$value.'_1.mp3')) { $tmp_name = $value."_1.mp3"; } if (strlen($tmp_name) > 0 && file_exists($_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day.'/'.$tmp_name)) { echo " \n"; echo " play"; echo "  "; } if (strlen($tmp_name) > 0 && file_exists($_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day.'/'.$tmp_name)) { echo " \n"; echo " download"; echo " "; } echo "".escape(wordwrap($value,75,"\n", true))." 
"; echo "

\n"; //app_log $c = 0; $row_style["0"] = "row_style0"; $row_style["1"] = "row_style1"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
".$text['label-application-log']." 
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; //foreach($array["variables"] as $key => $value) { if (is_array($array["app_log"]["application"])) { foreach ($array["app_log"]["application"] as $key=>$row) { //single app if ($key === "@attributes") { $app_name = $row["app_name"]; $app_data = urldecode($row["app_data"]); } //multiple apps else { $app_name = $row["@attributes"]["app_name"]; $app_data = urldecode($row["@attributes"]["app_data"]); } echo "\n"; echo " \n"; echo " \n"; echo "\n"; $c = $c ? 0 : 1; } } echo "
".$text['label-name']."".$text['label-data']."
".escape($app_name)." ".escape(wordwrap($app_data,75,"\n", true))." 
"; echo "

\n"; //call flow $c = 0; $row_style["0"] = "row_style0"; $row_style["1"] = "row_style1"; if (is_array($array["callflow"])) { foreach ($array["callflow"] as $row) { echo "\n"; echo "\n"; echo " \n"; echo "\n"; echo "
\n"; //attributes echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-call-flow']."  
\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (is_array($row["@attributes"])) { foreach($row["@attributes"] as $key => $value) { $value = urldecode($value); echo " \n"; echo " \n"; echo " \n"; echo " \n"; $c = $c ? 0 : 1; } } echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-name']."".$text['label-value']."
".escape($key)." ".escape(wordwrap($value,75,"\n", true))." 


\n"; //extension attributes echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-call-flow-2']."  
\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (is_array($row["extension"]["@attributes"])) { foreach($row["extension"]["@attributes"] as $key => $value) { $value = urldecode($value); echo " \n"; echo " \n"; echo " \n"; echo " \n"; $c = $c ? 0 : 1; } } echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-name']."".$text['label-value']."
".escape($key)." ".escape(wordwrap($value,75,"\n", true))." 


\n"; //extension application echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-call-flow-3']."  
\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (is_array($row["extension"]["application"])) { foreach ($row["extension"]["application"] as $tmp_row) { $app_name = $tmp_row["@attributes"]["app_name"]; $app_data = urldecode($tmp_row["@attributes"]["app_data"]); echo " \n"; echo " \n"; echo " \n"; echo " \n"; $c = $c ? 0 : 1; } } echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-name']."".$text['label-data']."
".escape($app_name)." ".escape(wordwrap($app_data,75,"\n", true))." 


\n"; //caller profile echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-call-flow-4']."  
\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (is_array($row["caller_profile"])) { foreach($row["caller_profile"] as $key => $value) { if (is_array($value)) { $value = implode($value); } $value = urldecode($value); echo " \n"; if ($key != "originatee") { if (is_array($value)) { $value = implode($value); } $value = urldecode($value); echo " \n"; echo " \n"; } else { echo " \n"; echo " \n"; } echo "\n"; $c = $c ? 0 : 1; } } echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-name']."".$text['label-value']."
".escape($key)." ".escape(wordwrap($value,75,"\n", true))." ".escape($key)." \n"; echo " \n"; if (isset($child["originatee_caller_profile"])) { foreach($child["originatee_caller_profile"] as $key => $value) { //print_r($tmp_child); echo " \n"; echo " \n"; if ($key != "uuid") { echo " \n"; } else { echo " \n"; } echo " \n"; } } echo "
".escape($key)." ".escape(wordwrap($value,75,"\n", true))." ".escape($value)." 
\n"; echo "


\n"; //times echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (is_array($row["times"])) { foreach($row["times"] as $key => $value) { $value = urldecode($value); echo " \n"; echo " \n"; echo " \n"; echo " \n"; $c = $c ? 0 : 1; } } echo " \n"; echo " \n"; echo " \n"; echo "
".$text['label-call-flow-5']." 
".$text['label-name']."".$text['label-value']."
".escape($key)." ".escape(wordwrap($value,75,"\n", true))." 


"; echo "

\n"; echo "
"; } } //get the footer require_once "resources/footer.php"; ?>