mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2025-12-30 00:53:50 +00:00
Increase the indention to improve code consistency.
This commit is contained in:
@@ -53,208 +53,189 @@
|
||||
//set pdo attribute that enables exception handling
|
||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
function process_xml_cdr($db, $leg, $xml_string) {
|
||||
//set global variable
|
||||
global $debug;
|
||||
//define the process_xml_cdr function
|
||||
function process_xml_cdr($db, $leg, $xml_string) {
|
||||
//set global variable
|
||||
global $debug;
|
||||
|
||||
//parse the xml to get the call detail record info
|
||||
try {
|
||||
$xml = simplexml_load_string($xml_string);
|
||||
}
|
||||
catch(Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
//prepare the database object
|
||||
require_once "includes/classes/database.php";
|
||||
$database = new database;
|
||||
$database->table = "v_xml_cdr";
|
||||
|
||||
//misc
|
||||
$uuid = check_str(urldecode($xml->variables->uuid));
|
||||
$database->fields['uuid'] = $uuid;
|
||||
$database->fields['accountcode'] = check_str(urldecode($xml->variables->accountcode));
|
||||
$database->fields['default_language'] = check_str(urldecode($xml->variables->default_language));
|
||||
$database->fields['bridge_uuid'] = check_str(urldecode($xml->variables->bridge_uuid));
|
||||
$database->fields['digits_dialed'] = check_str(urldecode($xml->variables->digits_dialed));
|
||||
$database->fields['sip_hangup_disposition'] = check_str(urldecode($xml->variables->sip_hangup_disposition));
|
||||
//time
|
||||
$database->fields['start_epoch'] = check_str(urldecode($xml->variables->start_epoch));
|
||||
$start_stamp = check_str(urldecode($xml->variables->start_stamp));
|
||||
$database->fields['start_stamp'] = $start_stamp;
|
||||
$database->fields['answer_stamp'] = check_str(urldecode($xml->variables->answer_stamp));
|
||||
$database->fields['answer_epoch'] = check_str(urldecode($xml->variables->answer_epoch));
|
||||
$database->fields['end_epoch'] = check_str(urldecode($xml->variables->end_epoch));
|
||||
$database->fields['end_stamp'] = check_str(urldecode($xml->variables->end_stamp));
|
||||
$database->fields['duration'] = check_str(urldecode($xml->variables->duration));
|
||||
$database->fields['mduration'] = check_str(urldecode($xml->variables->mduration));
|
||||
$database->fields['billsec'] = check_str(urldecode($xml->variables->billsec));
|
||||
$database->fields['billmsec'] = check_str(urldecode($xml->variables->billmsec));
|
||||
//codecs
|
||||
$database->fields['read_codec'] = check_str(urldecode($xml->variables->read_codec));
|
||||
$database->fields['read_rate'] = check_str(urldecode($xml->variables->read_rate));
|
||||
$database->fields['write_codec'] = check_str(urldecode($xml->variables->write_codec));
|
||||
$database->fields['write_rate'] = check_str(urldecode($xml->variables->write_rate));
|
||||
$database->fields['remote_media_ip'] = check_str(urldecode($xml->variables->remote_media_ip));
|
||||
$database->fields['hangup_cause'] = check_str(urldecode($xml->variables->hangup_cause));
|
||||
$database->fields['hangup_cause_q850'] = check_str(urldecode($xml->variables->hangup_cause_q850));
|
||||
//call center
|
||||
$database->fields['cc_side'] = check_str(urldecode($xml->variables->cc_side));
|
||||
$database->fields['cc_member_uuid'] = check_str(urldecode($xml->variables->cc_member_uuid));
|
||||
$database->fields['cc_queue_joined_epoch'] = check_str(urldecode($xml->variables->cc_queue_joined_epoch));
|
||||
$database->fields['cc_queue'] = check_str(urldecode($xml->variables->cc_queue));
|
||||
$database->fields['cc_member_session_uuid'] = check_str(urldecode($xml->variables->cc_member_session_uuid));
|
||||
$database->fields['cc_agent'] = check_str(urldecode($xml->variables->cc_agent));
|
||||
$database->fields['cc_agent_type'] = check_str(urldecode($xml->variables->cc_agent_type));
|
||||
$database->fields['waitsec'] = check_str(urldecode($xml->variables->waitsec));
|
||||
//app info
|
||||
$database->fields['last_app'] = check_str(urldecode($xml->variables->last_app));
|
||||
$database->fields['last_arg'] = check_str(urldecode($xml->variables->last_arg));
|
||||
//conference
|
||||
$database->fields['conference_name'] = check_str(urldecode($xml->variables->conference_name));
|
||||
$database->fields['conference_uuid'] = check_str(urldecode($xml->variables->conference_uuid));
|
||||
$database->fields['conference_member_id'] = check_str(urldecode($xml->variables->conference_member_id));
|
||||
|
||||
//get the values from the callflow.
|
||||
$x = 0;
|
||||
foreach ($xml->callflow as $row) {
|
||||
if ($x == 0) {
|
||||
$context = check_str(urldecode($row->caller_profile->context));
|
||||
$database->fields['destination_number'] = check_str(urldecode($row->caller_profile->destination_number));
|
||||
$database->fields['context'] = $context;
|
||||
$database->fields['network_addr'] = check_str(urldecode($row->caller_profile->network_addr));
|
||||
//parse the xml to get the call detail record info
|
||||
try {
|
||||
$xml = simplexml_load_string($xml_string);
|
||||
}
|
||||
$database->fields['caller_id_name'] = check_str(urldecode($row->caller_profile->caller_id_name));
|
||||
$database->fields['caller_id_number'] = check_str(urldecode($row->caller_profile->caller_id_number));
|
||||
$x++;
|
||||
}
|
||||
unset($x);
|
||||
|
||||
//store the call leg
|
||||
$database->fields['leg'] = $leg;
|
||||
|
||||
//store the call direction
|
||||
$database->fields['direction'] = check_str(urldecode($xml->variables->call_direction));
|
||||
|
||||
//store post dial delay, in milliseconds
|
||||
$database->fields['pdd_ms'] = check_str(urldecode($xml->variables->progress_mediamsec) + urldecode($xml->variables->progressmsec));
|
||||
|
||||
//get break down the date to year, month and day
|
||||
$tmp_time = strtotime($start_stamp);
|
||||
$tmp_year = date("Y", $tmp_time);
|
||||
$tmp_month = date("M", $tmp_time);
|
||||
$tmp_day = date("d", $tmp_time);
|
||||
|
||||
//get the domain values from the xml
|
||||
$domain_name = check_str(urldecode($xml->variables->domain_name));
|
||||
$domain_uuid = check_str(urldecode($xml->variables->domain_uuid));
|
||||
|
||||
//get the domain_uuid with the domain_name
|
||||
if (strlen($domain_uuid) == 0) {
|
||||
$sql = "select domain_uuid from v_domains ";
|
||||
if (strlen($domain_name) == 0 && $context != 'public' && $context != 'default') {
|
||||
$sql .= "where domain_name = '".$context."' ";
|
||||
catch(Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
else {
|
||||
$sql .= "where domain_name = '".$domain_name."' ";
|
||||
|
||||
//prepare the database object
|
||||
require_once "includes/classes/database.php";
|
||||
$database = new database;
|
||||
$database->table = "v_xml_cdr";
|
||||
|
||||
//misc
|
||||
$uuid = check_str(urldecode($xml->variables->uuid));
|
||||
$database->fields['uuid'] = $uuid;
|
||||
$database->fields['accountcode'] = check_str(urldecode($xml->variables->accountcode));
|
||||
$database->fields['default_language'] = check_str(urldecode($xml->variables->default_language));
|
||||
$database->fields['bridge_uuid'] = check_str(urldecode($xml->variables->bridge_uuid));
|
||||
$database->fields['digits_dialed'] = check_str(urldecode($xml->variables->digits_dialed));
|
||||
$database->fields['sip_hangup_disposition'] = check_str(urldecode($xml->variables->sip_hangup_disposition));
|
||||
//time
|
||||
$database->fields['start_epoch'] = check_str(urldecode($xml->variables->start_epoch));
|
||||
$start_stamp = check_str(urldecode($xml->variables->start_stamp));
|
||||
$database->fields['start_stamp'] = $start_stamp;
|
||||
$database->fields['answer_stamp'] = check_str(urldecode($xml->variables->answer_stamp));
|
||||
$database->fields['answer_epoch'] = check_str(urldecode($xml->variables->answer_epoch));
|
||||
$database->fields['end_epoch'] = check_str(urldecode($xml->variables->end_epoch));
|
||||
$database->fields['end_stamp'] = check_str(urldecode($xml->variables->end_stamp));
|
||||
$database->fields['duration'] = check_str(urldecode($xml->variables->duration));
|
||||
$database->fields['mduration'] = check_str(urldecode($xml->variables->mduration));
|
||||
$database->fields['billsec'] = check_str(urldecode($xml->variables->billsec));
|
||||
$database->fields['billmsec'] = check_str(urldecode($xml->variables->billmsec));
|
||||
//codecs
|
||||
$database->fields['read_codec'] = check_str(urldecode($xml->variables->read_codec));
|
||||
$database->fields['read_rate'] = check_str(urldecode($xml->variables->read_rate));
|
||||
$database->fields['write_codec'] = check_str(urldecode($xml->variables->write_codec));
|
||||
$database->fields['write_rate'] = check_str(urldecode($xml->variables->write_rate));
|
||||
$database->fields['remote_media_ip'] = check_str(urldecode($xml->variables->remote_media_ip));
|
||||
$database->fields['hangup_cause'] = check_str(urldecode($xml->variables->hangup_cause));
|
||||
$database->fields['hangup_cause_q850'] = check_str(urldecode($xml->variables->hangup_cause_q850));
|
||||
//call center
|
||||
$database->fields['cc_side'] = check_str(urldecode($xml->variables->cc_side));
|
||||
$database->fields['cc_member_uuid'] = check_str(urldecode($xml->variables->cc_member_uuid));
|
||||
$database->fields['cc_queue_joined_epoch'] = check_str(urldecode($xml->variables->cc_queue_joined_epoch));
|
||||
$database->fields['cc_queue'] = check_str(urldecode($xml->variables->cc_queue));
|
||||
$database->fields['cc_member_session_uuid'] = check_str(urldecode($xml->variables->cc_member_session_uuid));
|
||||
$database->fields['cc_agent'] = check_str(urldecode($xml->variables->cc_agent));
|
||||
$database->fields['cc_agent_type'] = check_str(urldecode($xml->variables->cc_agent_type));
|
||||
$database->fields['waitsec'] = check_str(urldecode($xml->variables->waitsec));
|
||||
//app info
|
||||
$database->fields['last_app'] = check_str(urldecode($xml->variables->last_app));
|
||||
$database->fields['last_arg'] = check_str(urldecode($xml->variables->last_arg));
|
||||
//conference
|
||||
$database->fields['conference_name'] = check_str(urldecode($xml->variables->conference_name));
|
||||
$database->fields['conference_uuid'] = check_str(urldecode($xml->variables->conference_uuid));
|
||||
$database->fields['conference_member_id'] = check_str(urldecode($xml->variables->conference_member_id));
|
||||
|
||||
//get the values from the callflow.
|
||||
$x = 0;
|
||||
foreach ($xml->callflow as $row) {
|
||||
if ($x == 0) {
|
||||
$context = check_str(urldecode($row->caller_profile->context));
|
||||
$database->fields['destination_number'] = check_str(urldecode($row->caller_profile->destination_number));
|
||||
$database->fields['context'] = $context;
|
||||
$database->fields['network_addr'] = check_str(urldecode($row->caller_profile->network_addr));
|
||||
}
|
||||
$database->fields['caller_id_name'] = check_str(urldecode($row->caller_profile->caller_id_name));
|
||||
$database->fields['caller_id_number'] = check_str(urldecode($row->caller_profile->caller_id_number));
|
||||
$x++;
|
||||
}
|
||||
$row = $db->query($sql)->fetch();
|
||||
$domain_uuid = $row['domain_uuid'];
|
||||
unset($x);
|
||||
|
||||
//store the call leg
|
||||
$database->fields['leg'] = $leg;
|
||||
|
||||
//store the call direction
|
||||
$database->fields['direction'] = check_str(urldecode($xml->variables->call_direction));
|
||||
|
||||
//store post dial delay, in milliseconds
|
||||
$database->fields['pdd_ms'] = check_str(urldecode($xml->variables->progress_mediamsec) + urldecode($xml->variables->progressmsec));
|
||||
|
||||
//get break down the date to year, month and day
|
||||
$tmp_time = strtotime($start_stamp);
|
||||
$tmp_year = date("Y", $tmp_time);
|
||||
$tmp_month = date("M", $tmp_time);
|
||||
$tmp_day = date("d", $tmp_time);
|
||||
|
||||
//get the domain values from the xml
|
||||
$domain_name = check_str(urldecode($xml->variables->domain_name));
|
||||
$domain_uuid = check_str(urldecode($xml->variables->domain_uuid));
|
||||
|
||||
//get the domain_uuid with the domain_name
|
||||
if (strlen($domain_uuid) == 0) {
|
||||
$sql = "select domain_name, domain_uuid from v_domains ";
|
||||
$sql = "select domain_uuid from v_domains ";
|
||||
if (strlen($domain_name) == 0 && $context != 'public' && $context != 'default') {
|
||||
$sql .= "where domain_name = '".$context."' ";
|
||||
}
|
||||
else {
|
||||
$sql .= "where domain_name = '".$domain_name."' ";
|
||||
}
|
||||
$row = $db->query($sql)->fetch();
|
||||
$domain_uuid = $row['domain_uuid'];
|
||||
if (strlen($domain_name) == 0) { $domain_name = $row['domain_name']; }
|
||||
}
|
||||
}
|
||||
|
||||
//set values in the database
|
||||
$database->domain_uuid = $domain_uuid;
|
||||
$database->fields['domain_uuid'] = $domain_uuid;
|
||||
$database->fields['domain_name'] = $domain_name;
|
||||
|
||||
//check whether a recording exists
|
||||
$recording_relative_path = '/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day;
|
||||
if (file_exists($_SESSION['switch']['recordings']['dir'].$recording_relative_path.'/'.$uuid.'.wav')) {
|
||||
$recording_file = $recording_relative_path.'/'.$uuid.'.wav';
|
||||
}
|
||||
elseif (file_exists($_SESSION['switch']['recordings']['dir'].$recording_relative_path.'/'.$uuid.'.mp3')) {
|
||||
$recording_file = $recording_relative_path.'/'.$uuid.'.mp3';
|
||||
}
|
||||
if(isset($recording_file) && !empty($recording_file)) {
|
||||
$database->fields['recording_file'] = $recording_file;
|
||||
}
|
||||
|
||||
//determine where the xml cdr will be archived
|
||||
$sql = "select * from v_vars ";
|
||||
$sql .= "where var_name = 'xml_cdr_archive' ";
|
||||
$row = $db->query($sql)->fetch();
|
||||
$var_value = trim($row["var_value"]);
|
||||
switch ($var_value) {
|
||||
case "dir":
|
||||
$xml_cdr_archive = 'dir';
|
||||
break;
|
||||
case "db":
|
||||
$xml_cdr_archive = 'db';
|
||||
break;
|
||||
case "none":
|
||||
$xml_cdr_archive = 'none';
|
||||
break;
|
||||
default:
|
||||
$xml_cdr_archive = 'dir';
|
||||
break;
|
||||
}
|
||||
|
||||
//if xml_cdr_archive is set to db then insert it.
|
||||
if ($xml_cdr_archive == "db") {
|
||||
$database->fields['xml_cdr'] = check_str($xml_string);
|
||||
}
|
||||
|
||||
//insert the check_str($extension_uuid)
|
||||
if (strlen($xml->variables->extension_uuid) > 0) {
|
||||
$database->fields['extension_uuid'] = check_str(urldecode($xml->variables->extension_uuid));
|
||||
}
|
||||
|
||||
//insert xml_cdr into the db
|
||||
if (strlen($start_stamp) > 0) {
|
||||
$database->add();
|
||||
if ($debug) {
|
||||
echo $database->sql."\n";
|
||||
}
|
||||
}
|
||||
|
||||
//insert the values
|
||||
if (strlen($uuid) > 0) {
|
||||
if ($debug) {
|
||||
$time5_insert = microtime(true);
|
||||
//echo $sql."<br />\n";
|
||||
}
|
||||
try {
|
||||
$error = "false";
|
||||
//$db->exec(check_sql($sql));
|
||||
}
|
||||
catch(PDOException $e) {
|
||||
$tmp_dir = $_SESSION['switch']['log']['dir'].'/xml_cdr/failed/';
|
||||
if(!file_exists($tmp_dir)) {
|
||||
mkdir($tmp_dir, 0777, true);
|
||||
if (strlen($domain_uuid) == 0) {
|
||||
$sql = "select domain_name, domain_uuid from v_domains ";
|
||||
$row = $db->query($sql)->fetch();
|
||||
$domain_uuid = $row['domain_uuid'];
|
||||
if (strlen($domain_name) == 0) { $domain_name = $row['domain_name']; }
|
||||
}
|
||||
$tmp_file = $uuid.'.xml';
|
||||
$fh = fopen($tmp_dir.'/'.$tmp_file, 'w');
|
||||
fwrite($fh, $xml_string);
|
||||
fclose($fh);
|
||||
}
|
||||
|
||||
//set values in the database
|
||||
$database->domain_uuid = $domain_uuid;
|
||||
$database->fields['domain_uuid'] = $domain_uuid;
|
||||
$database->fields['domain_name'] = $domain_name;
|
||||
|
||||
//check whether a recording exists
|
||||
$recording_relative_path = '/archive/'.$tmp_year.'/'.$tmp_month.'/'.$tmp_day;
|
||||
if (file_exists($_SESSION['switch']['recordings']['dir'].$recording_relative_path.'/'.$uuid.'.wav')) {
|
||||
$recording_file = $recording_relative_path.'/'.$uuid.'.wav';
|
||||
}
|
||||
elseif (file_exists($_SESSION['switch']['recordings']['dir'].$recording_relative_path.'/'.$uuid.'.mp3')) {
|
||||
$recording_file = $recording_relative_path.'/'.$uuid.'.mp3';
|
||||
}
|
||||
if(isset($recording_file) && !empty($recording_file)) {
|
||||
$database->fields['recording_file'] = $recording_file;
|
||||
}
|
||||
|
||||
//determine where the xml cdr will be archived
|
||||
$sql = "select * from v_vars ";
|
||||
$sql .= "where var_name = 'xml_cdr_archive' ";
|
||||
$row = $db->query($sql)->fetch();
|
||||
$var_value = trim($row["var_value"]);
|
||||
switch ($var_value) {
|
||||
case "dir":
|
||||
$xml_cdr_archive = 'dir';
|
||||
break;
|
||||
case "db":
|
||||
$xml_cdr_archive = 'db';
|
||||
break;
|
||||
case "none":
|
||||
$xml_cdr_archive = 'none';
|
||||
break;
|
||||
default:
|
||||
$xml_cdr_archive = 'dir';
|
||||
break;
|
||||
}
|
||||
|
||||
//if xml_cdr_archive is set to db then insert it.
|
||||
if ($xml_cdr_archive == "db") {
|
||||
$database->fields['xml_cdr'] = check_str($xml_string);
|
||||
}
|
||||
|
||||
//insert the check_str($extension_uuid)
|
||||
if (strlen($xml->variables->extension_uuid) > 0) {
|
||||
$database->fields['extension_uuid'] = check_str(urldecode($xml->variables->extension_uuid));
|
||||
}
|
||||
|
||||
//insert xml_cdr into the db
|
||||
if (strlen($start_stamp) > 0) {
|
||||
$database->add();
|
||||
if ($debug) {
|
||||
echo $e->getMessage();
|
||||
echo $database->sql."\n";
|
||||
}
|
||||
$error = "true";
|
||||
}
|
||||
//if xml_cdr_archive is set to dir, then store it.
|
||||
if ($xml_cdr_archive == "dir" && $error != "true") {
|
||||
if (strlen($uuid) > 0) {
|
||||
$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;
|
||||
|
||||
//insert the values
|
||||
if (strlen($uuid) > 0) {
|
||||
if ($debug) {
|
||||
$time5_insert = microtime(true);
|
||||
//echo $sql."<br />\n";
|
||||
}
|
||||
try {
|
||||
$error = "false";
|
||||
//$db->exec(check_sql($sql));
|
||||
}
|
||||
catch(PDOException $e) {
|
||||
$tmp_dir = $_SESSION['switch']['log']['dir'].'/xml_cdr/failed/';
|
||||
if(!file_exists($tmp_dir)) {
|
||||
mkdir($tmp_dir, 0777, true);
|
||||
}
|
||||
@@ -262,18 +243,38 @@ function process_xml_cdr($db, $leg, $xml_string) {
|
||||
$fh = fopen($tmp_dir.'/'.$tmp_file, 'w');
|
||||
fwrite($fh, $xml_string);
|
||||
fclose($fh);
|
||||
if ($debug) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
$error = "true";
|
||||
}
|
||||
//if xml_cdr_archive is set to dir, then store it.
|
||||
if ($xml_cdr_archive == "dir" && $error != "true") {
|
||||
if (strlen($uuid) > 0) {
|
||||
$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)) {
|
||||
mkdir($tmp_dir, 0777, true);
|
||||
}
|
||||
$tmp_file = $uuid.'.xml';
|
||||
$fh = fopen($tmp_dir.'/'.$tmp_file, 'w');
|
||||
fwrite($fh, $xml_string);
|
||||
fclose($fh);
|
||||
}
|
||||
}
|
||||
unset($error);
|
||||
|
||||
if ($debug) {
|
||||
GLOBAL $insert_time,$insert_count;
|
||||
$insert_time+=microtime(true)-$time5_insert;//add this current query.
|
||||
$insert_count++;
|
||||
}
|
||||
}
|
||||
unset($error);
|
||||
|
||||
if ($debug) {
|
||||
GLOBAL $insert_time,$insert_count;
|
||||
$insert_time+=microtime(true)-$time5_insert;//add this current query.
|
||||
$insert_count++;
|
||||
}
|
||||
}
|
||||
unset($sql);
|
||||
}
|
||||
unset($sql);
|
||||
}
|
||||
|
||||
//get cdr details from the http post
|
||||
if (strlen($_POST["cdr"]) > 0) {
|
||||
@@ -375,7 +376,7 @@ function process_xml_cdr($db, $leg, $xml_string) {
|
||||
ob_end_clean(); //clean the buffer
|
||||
$time = "\n\n$insert_count inserts in: ".number_format($insert_time,5). " seconds.\n";
|
||||
$time .= "Other processing time: ".number_format((microtime(true)-$time5-$insert_time),5). " seconds.\n";
|
||||
$fp = fopen(sys_get_temp_dir().'/xml_cdr_post.log', 'w');
|
||||
$fp = fopen($_SESSION['server']['temp']['dir'].'/xml_cdr.log', 'w');
|
||||
fwrite($fp, $content.$time);
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user