mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2026-03-03 23:36:37 +00:00
Merge branch 'fusionpbx/master' into Enhance-Languages
Conflicts: app/extensions/app_languages.php
This commit is contained in:
187
app/extensions/extension_download.php
Normal file
187
app/extensions/extension_download.php
Normal file
@@ -0,0 +1,187 @@
|
||||
<?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>
|
||||
Portions created by the Initial Developer are Copyright (C) 2008-2012
|
||||
the Initial Developer. All Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
*/
|
||||
include "root.php";
|
||||
require_once "resources/require.php";
|
||||
require_once "resources/check_auth.php";
|
||||
require_once "resources/paging.php";
|
||||
if (if_group("superadmin")) {
|
||||
//access granted
|
||||
}
|
||||
else {
|
||||
echo "access denied";
|
||||
exit;
|
||||
}
|
||||
|
||||
//add multi-lingual support
|
||||
$language = new text;
|
||||
$text = $language->get();
|
||||
|
||||
function array2csv(array &$array)
|
||||
{
|
||||
if (count($array) == 0) {
|
||||
return null;
|
||||
}
|
||||
ob_start();
|
||||
$df = fopen("php://output", 'w');
|
||||
fputcsv($df, array_keys(reset($array)));
|
||||
foreach ($array as $row) {
|
||||
fputcsv($df, $row);
|
||||
}
|
||||
fclose($df);
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
function download_send_headers($filename) {
|
||||
// disable caching
|
||||
$now = gmdate("D, d M Y H:i:s");
|
||||
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
|
||||
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
|
||||
header("Last-Modified: {$now} GMT");
|
||||
|
||||
// force download
|
||||
header("Content-Type: application/force-download");
|
||||
header("Content-Type: application/octet-stream");
|
||||
header("Content-Type: application/download");
|
||||
|
||||
// disposition / encoding on response body
|
||||
header("Content-Disposition: attachment;filename={$filename}");
|
||||
header("Content-Transfer-Encoding: binary");
|
||||
}
|
||||
|
||||
if (isset($_REQUEST["column_group"])) {
|
||||
|
||||
$columns = implode(",",$_REQUEST["column_group"]);
|
||||
$sql = "select " . $columns . " from v_extensions ";
|
||||
$sql .= " where domain_uuid = '".$domain_uuid."' ";
|
||||
$prep_statement = $db->prepare(check_sql($sql));
|
||||
$prep_statement->execute();
|
||||
$extensions = $prep_statement->fetchAll(PDO::FETCH_ASSOC);
|
||||
unset ($sql, $prep_statement);
|
||||
// print_r($extensions);
|
||||
|
||||
download_send_headers("data_export_" . date("Y-m-d") . ".csv");
|
||||
echo array2csv($extensions);
|
||||
die();
|
||||
|
||||
}
|
||||
|
||||
$columns[] = 'extension_uuid';
|
||||
$columns[] = 'domain_uuid';
|
||||
$columns[] = 'extension';
|
||||
$columns[] = 'number_alias';
|
||||
$columns[] = 'password';
|
||||
$columns[] = 'accountcode';
|
||||
$columns[] = 'effective_caller_id_name';
|
||||
$columns[] = 'effective_caller_id_number';
|
||||
$columns[] = 'outbound_caller_id_name';
|
||||
$columns[] = 'outbound_caller_id_number';
|
||||
$columns[] = 'emergency_caller_id_name';
|
||||
$columns[] = 'emergency_caller_id_number';
|
||||
$columns[] = 'directory_full_name';
|
||||
$columns[] = 'directory_visible';
|
||||
$columns[] = 'directory_exten_visible';
|
||||
$columns[] = 'limit_max';
|
||||
$columns[] = 'limit_destination';
|
||||
$columns[] = 'missed_call_app';
|
||||
$columns[] = 'missed_call_data';
|
||||
$columns[] = 'user_context';
|
||||
$columns[] = 'toll_allow';
|
||||
$columns[] = 'call_timeout';
|
||||
$columns[] = 'call_group';
|
||||
$columns[] = 'call_screen_enabled';
|
||||
$columns[] = 'user_record';
|
||||
$columns[] = 'hold_music';
|
||||
$columns[] = 'auth_acl';
|
||||
$columns[] = 'cidr';
|
||||
$columns[] = 'sip_force_contact';
|
||||
$columns[] = 'nibble_account';
|
||||
$columns[] = 'sip_force_expires';
|
||||
$columns[] = 'mwi_account';
|
||||
$columns[] = 'sip_bypass_media';
|
||||
$columns[] = 'unique_id';
|
||||
$columns[] = 'dial_string';
|
||||
$columns[] = 'dial_user';
|
||||
$columns[] = 'dial_domain';
|
||||
$columns[] = 'do_not_disturb';
|
||||
$columns[] = 'forward_all_destination';
|
||||
$columns[] = 'forward_all_enabled';
|
||||
$columns[] = 'forward_busy_destination';
|
||||
$columns[] = 'forward_busy_enabled';
|
||||
$columns[] = 'forward_no_answer_destination';
|
||||
$columns[] = 'forward_no_answer_enabled';
|
||||
$columns[] = 'follow_me_uuid';
|
||||
$columns[] = 'enabled';
|
||||
$columns[] = 'description';
|
||||
$columns[] = 'forward_caller_id_uuid';
|
||||
$columns[] = 'absolute_codec_string';
|
||||
$columns[] = 'forward_user_not_registered_destination';
|
||||
$columns[] = 'forward_user_not_registered_enabled';
|
||||
|
||||
$c = 0;
|
||||
$row_style["0"] = "row_style0";
|
||||
$row_style["1"] = "row_style1";
|
||||
|
||||
//begin the page content
|
||||
require_once "resources/header.php";
|
||||
|
||||
echo "<form method='post' name='frm' action='' autocomplete='off'>\n";
|
||||
echo "<table class='tr_hover' width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<th><input type=\"checkbox\" id=\"selecctall\"/>";
|
||||
echo "</th>";
|
||||
echo "<th> Column Name";
|
||||
echo "</th>";
|
||||
echo "<th> Description";
|
||||
echo "</th>";
|
||||
echo "</tr>";
|
||||
echo "</tr>";
|
||||
foreach ($columns as $value) {
|
||||
echo "<tr>\n";
|
||||
echo " <td width = '20px' valign='top' class='".$row_style[$c]."'><input class=\"checkbox1\" type=\"checkbox\" name=\"column_group[]\" value=\"$value\"/>";
|
||||
echo "</td>";
|
||||
echo " <td valign='top' class='".$row_style[$c]."'> $value";
|
||||
echo "</td>";
|
||||
echo " <td valign='top' class='".$row_style[$c]."'>";
|
||||
echo "</td>";
|
||||
echo "</tr>";
|
||||
if ($c==0) { $c=1; } else { $c=0; }
|
||||
}
|
||||
|
||||
echo " <tr>\n";
|
||||
echo " <td colspan='3' align='right'>\n";
|
||||
echo " <br>";
|
||||
echo " <input type='submit' class='btn' value='".$text['button-export']."'>\n";
|
||||
echo " </td>\n";
|
||||
echo " </tr>";
|
||||
|
||||
echo "</table>";
|
||||
echo "<br><br>";
|
||||
echo "</form>";
|
||||
|
||||
//include the footer
|
||||
require_once "resources/footer.php";
|
||||
?>
|
||||
@@ -123,6 +123,9 @@ require_once "resources/paging.php";
|
||||
echo " </td>\n";
|
||||
echo " <form method='get' action=''>\n";
|
||||
echo " <td width='30%' align='right'>\n";
|
||||
if (if_group("superadmin")) {
|
||||
echo " <input type='button' class='btn' value='".$text['button-export']."' onclick=\"window.location.href='extension_download.php'\">\n";
|
||||
}
|
||||
echo " <input type='text' class='txt' style='width: 150px' name='search' value='".$search."'>";
|
||||
echo " <input type='submit' class='btn' name='submit' value='".$text['button-search']."'>";
|
||||
echo " </td>\n";
|
||||
|
||||
@@ -100,15 +100,15 @@ $text['label-git_info']['sv-se'] = "";
|
||||
$text['label-git_info']['uk'] = "";
|
||||
$text['label-git_info']['de-at'] = "";
|
||||
|
||||
$text['label-switch_version']['en-us'] = "Switch Version";
|
||||
$text['label-switch_version']['es-cl'] = "";
|
||||
$text['label-switch_version']['pt-pt'] = "";
|
||||
$text['label-switch_version']['fr-fr'] = "";
|
||||
$text['label-switch_version']['pt-br'] = "";
|
||||
$text['label-switch_version']['pl'] = "";
|
||||
$text['label-switch_version']['sv-se'] = "";
|
||||
$text['label-switch_version']['uk'] = "";
|
||||
$text['label-switch_version']['de-at'] = "";
|
||||
$text['label-switch']['en-us'] = "Switch";
|
||||
$text['label-switch']['es-cl'] = "";
|
||||
$text['label-switch']['pt-pt'] = "";
|
||||
$text['label-switch']['fr-fr'] = "";
|
||||
$text['label-switch']['pt-br'] = "";
|
||||
$text['label-switch']['pl'] = "";
|
||||
$text['label-switch']['sv-se'] = "";
|
||||
$text['label-switch']['uk'] = "";
|
||||
$text['label-switch']['de-at'] = "";
|
||||
|
||||
$text['label-git_branch']['en-us'] = "Branch:";
|
||||
$text['label-git_branch']['es-cl'] = "";
|
||||
|
||||
@@ -108,15 +108,25 @@ $document['title'] = $text['title-sys-status'];
|
||||
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
|
||||
if ($fp) {
|
||||
$switch_version = event_socket_request($fp, 'api version');
|
||||
preg_match("/FreeSWITCH Version (\d+\.\d+\.\d+(?:\.\d+)?).*\(\s*(\d+\w+)\s*\)/", $switch_version, $matches);
|
||||
preg_match("/FreeSWITCH Version (\d+\.\d+\.\d+(?:\.\d+)?).*\(.*?(\d+\w+)\s*\)/", $switch_version, $matches);
|
||||
$switch_version = $matches[1];
|
||||
$switch_bits = $matches[2];
|
||||
echo "<tr>\n";
|
||||
echo " <td width='20%' class=\"vncell\" style='text-align: left;'>\n";
|
||||
echo " ".$text['label-switch_version']."\n";
|
||||
echo " ".$text['label-switch']." ".$text['label-version']."\n";
|
||||
echo " </td>\n";
|
||||
echo " <td class=\"row_style1\">$switch_version ($switch_bits)</td>\n";
|
||||
echo "</tr>\n";
|
||||
preg_match("/\(git\s*(.*?)\s*\d+\w+\s*\)/", $switch_version, $matches);
|
||||
$switch_git_info = $matches[1];
|
||||
if(strlen($switch_git_info) > 0){
|
||||
echo "<tr>\n";
|
||||
echo " <td width='20%' class=\"vncell\" style='text-align: left;'>\n";
|
||||
echo " ".$text['label-switch']." ".$text['label-git_info']."\n";
|
||||
echo " </td>\n";
|
||||
echo " <td class=\"row_style1\">$switch_git_info</td>\n";
|
||||
echo "</tr>\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "<!--\n";
|
||||
|
||||
@@ -53,8 +53,12 @@ echo " if ($('#caller_id_number').is(':visible')) { $('#caller_id_number').foc
|
||||
echo " }";
|
||||
echo " }";
|
||||
echo "</script>";
|
||||
|
||||
echo "<form method='post' action='xml_cdr.php'>\n";
|
||||
|
||||
if (strlen(check_str($_GET['redirect'])) > 0) {
|
||||
echo "<form method='get' action='" . $_GET['redirect'] . ".php'>\n";
|
||||
} else {
|
||||
echo "<form method='post' action='xml_cdr.php'>\n";
|
||||
}
|
||||
|
||||
echo "<table width='100%' cellpadding='0' cellspacing='0'>\n";
|
||||
echo " <tr>\n";
|
||||
|
||||
@@ -43,10 +43,14 @@ else {
|
||||
require_once "resources/header.php";
|
||||
|
||||
//page title and description
|
||||
|
||||
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
|
||||
echo "<tr>\n";
|
||||
echo " <td width='30%' align='left' valign='top' nowrap='nowrap'><b>".$text['label-call-statistics']."</b></td>\n";
|
||||
echo " <td width='70%' align='right' valign='top'>\n";
|
||||
if (permission_exists('xml_cdr_search_advanced')) {
|
||||
echo " <input type='button' class='btn' value='".$text['button-advanced_search']."' onclick=\"window.location='xml_cdr_search.php?redirect=xml_cdr_statistics';\">\n";
|
||||
}
|
||||
if (permission_exists('xml_cdr_all')) {
|
||||
if ($_GET['showall'] != 'true') {
|
||||
echo "<input type='button' class='btn' value='".$text['button-show_all']."' onclick=\"window.location='xml_cdr_statistics.php?showall=true';\">\n";
|
||||
@@ -75,6 +79,7 @@ else {
|
||||
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="<?php echo PROJECT_PATH; ?>/resources/jquery/flot/excanvas.min.js"></script><![endif]-->
|
||||
<script language="javascript" type="text/javascript" src="<?php echo PROJECT_PATH; ?>/resources/jquery/jquery-1.8.3.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="<?php echo PROJECT_PATH; ?>/resources/jquery/flot/jquery.flot.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="<?php echo PROJECT_PATH; ?>/resources/jquery/flot/jquery.flot.time.js"></script>
|
||||
<div align='center'>
|
||||
<table>
|
||||
<tr>
|
||||
@@ -147,7 +152,17 @@ else {
|
||||
if (data.length > 0)
|
||||
$.plot($("#placeholder"), data, {
|
||||
yaxis: { min: 0 },
|
||||
xaxis: { tickDecimals: 0 }
|
||||
<?php
|
||||
if ($hours <= 48) {
|
||||
echo "xaxis: {mode: \"time\",timeformat: \"%d:%H\",minTickSize: [1, \"hour\"]}";
|
||||
} else if ($hours > 48 && $hours < 168) {
|
||||
echo "xaxis: {mode: \"time\",timeformat: \"%m:%d\",minTickSize: [1, \"day\"]}";
|
||||
} else {
|
||||
echo "xaxis: {mode: \"time\",timeformat: \"%m:%d\",minTickSize: [1, \"month\"]}";
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@@ -173,10 +188,10 @@ else {
|
||||
$i = 0;
|
||||
foreach ($stats as $row) {
|
||||
echo "<tr >\n";
|
||||
if ($i < 24) {
|
||||
if ($i <= $hours) {
|
||||
echo " <td valign='top' class='".$row_style[$c]."'>".($i+1)."</td>\n";
|
||||
}
|
||||
elseif ($i == 24) {
|
||||
elseif ($i == $hours+1) {
|
||||
echo " <br /><br />\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
@@ -198,14 +213,14 @@ else {
|
||||
echo "<tr>\n";
|
||||
echo " <td valign='top' class='".$row_style[$c]."'>1</td>\n";
|
||||
}
|
||||
elseif ($i == 25) {
|
||||
elseif ($i == $hours+2) {
|
||||
echo "<tr>\n";
|
||||
echo " <td valign='top' class='".$row_style[$c]."'>7</td>\n";
|
||||
}
|
||||
elseif ($i == 26) {
|
||||
elseif ($i == $hours+3) {
|
||||
echo " <td valign='top' class='".$row_style[$c]."'>30</td>\n";
|
||||
}
|
||||
if ($i < 24) {
|
||||
if ($i <= $hours) {
|
||||
echo " <td valign='top' class='".$row_style[$c]."'>".date('j M', $row['start_epoch'])."</td>\n";
|
||||
echo " <td valign='top' class='".$row_style[$c]."'>".date('H:i', $row['start_epoch'])." - ".date('H:i', $row['stop_epoch'])." </td>\n";
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ else {
|
||||
exit;
|
||||
}
|
||||
|
||||
//show all call detail records to admin and superadmin. for everyone else show only the call details for extensions assigned to them
|
||||
/*//show all call detail records to admin and superadmin. for everyone else show only the call details for extensions assigned to them
|
||||
if (!if_group("admin") && !if_group("superadmin")) {
|
||||
// select caller_id_number, destination_number from v_xml_cdr where domain_uuid = ''
|
||||
// and (caller_id_number = '1001' or destination_number = '1001' or destination_number = '*991001')
|
||||
@@ -68,6 +68,166 @@ else {
|
||||
//create the sql query to get the xml cdr records
|
||||
if (strlen($order_by) == 0) { $order_by = "start_epoch"; }
|
||||
if (strlen($order) == 0) { $order = "desc"; }
|
||||
*/
|
||||
|
||||
//get post or get variables from http
|
||||
if (count($_REQUEST) > 0) {
|
||||
$cdr_id = check_str($_REQUEST["cdr_id"]);
|
||||
$missed = check_str($_REQUEST["missed"]);
|
||||
$direction = check_str($_REQUEST["direction"]);
|
||||
$caller_id_name = check_str($_REQUEST["caller_id_name"]);
|
||||
$caller_id_number = check_str($_REQUEST["caller_id_number"]);
|
||||
$caller_extension_uuid = check_str($_REQUEST["caller_extension_uuid"]);
|
||||
$destination_number = check_str($_REQUEST["destination_number"]);
|
||||
$context = check_str($_REQUEST["context"]);
|
||||
$start_stamp_begin = check_str($_REQUEST["start_stamp_begin"]);
|
||||
$start_stamp_end = check_str($_REQUEST["start_stamp_end"]);
|
||||
$answer_stamp_begin = check_str($_REQUEST["answer_stamp_begin"]);
|
||||
$answer_stamp_end = check_str($_REQUEST["answer_stamp_end"]);
|
||||
$end_stamp_begin = check_str($_REQUEST["end_stamp_begin"]);
|
||||
$end_stamp_end = check_str($_REQUEST["end_stamp_end"]);
|
||||
$start_epoch = check_str($_REQUEST["start_epoch"]);
|
||||
$stop_epoch = check_str($_REQUEST["stop_epoch"]);
|
||||
$duration = check_str($_REQUEST["duration"]);
|
||||
$billsec = check_str($_REQUEST["billsec"]);
|
||||
$hangup_cause = check_str($_REQUEST["hangup_cause"]);
|
||||
$uuid = check_str($_REQUEST["uuid"]);
|
||||
$bleg_uuid = check_str($_REQUEST["bleg_uuid"]);
|
||||
$accountcode = check_str($_REQUEST["accountcode"]);
|
||||
$read_codec = check_str($_REQUEST["read_codec"]);
|
||||
$write_codec = check_str($_REQUEST["write_codec"]);
|
||||
$remote_media_ip = check_str($_REQUEST["remote_media_ip"]);
|
||||
$network_addr = check_str($_REQUEST["network_addr"]);
|
||||
$bridge_uuid = check_str($_REQUEST["network_addr"]);
|
||||
$order_by = check_str($_REQUEST["order_by"]);
|
||||
$order = check_str($_REQUEST["order"]);
|
||||
if (strlen(check_str($_REQUEST["mos_comparison"])) > 0) {
|
||||
switch(check_str($_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;
|
||||
}
|
||||
} else {
|
||||
$mos_comparison = '';
|
||||
}
|
||||
//$mos_comparison = check_str($_REQUEST["mos_comparison"]);
|
||||
$mos_score = check_str($_REQUEST["mos_score"]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//build the sql where string
|
||||
if ($missed == true) {
|
||||
$sql_where_ands[] = "billsec = '0'";
|
||||
}
|
||||
if (strlen($start_epoch) > 0 && strlen($stop_epoch) > 0) {
|
||||
$sql_where_ands[] = "start_epoch BETWEEN ".$start_epoch." AND ".$stop_epoch." ";
|
||||
}
|
||||
if (strlen($cdr_id) > 0) { $sql_where_ands[] = "cdr_id like '%".$cdr_id."%'"; }
|
||||
if (strlen($direction) > 0) { $sql_where_ands[] = "direction = '".$direction."'"; }
|
||||
if (strlen($caller_id_name) > 0) {
|
||||
$mod_caller_id_name = str_replace("*", "%", $caller_id_name);
|
||||
$sql_where_ands[] = "caller_id_name like '".$mod_caller_id_name."'";
|
||||
}
|
||||
if (strlen($caller_extension_uuid) > 0) {
|
||||
$sql_where_ands[] = "extension_uuid = '".$caller_extension_uuid."'";
|
||||
}
|
||||
if (strlen($caller_id_number) > 0) {
|
||||
$mod_caller_id_number = str_replace("*", "%", $caller_id_number);
|
||||
$sql_where_ands[] = "caller_id_number like '".$mod_caller_id_number."'";
|
||||
}
|
||||
if (strlen($destination_number) > 0) {
|
||||
$mod_destination_number = str_replace("*", "%", $destination_number);
|
||||
$sql_where_ands[] = "destination_number like '".$mod_destination_number."'";
|
||||
}
|
||||
if (strlen($context) > 0) { $sql_where_ands[] = "context like '%".$context."%'"; }
|
||||
/* if (strlen($start_stamp_begin) > 0 && strlen($start_stamp_end) > 0) { $sql_where_ands[] = "start_stamp BETWEEN '".$start_stamp_begin.":00.000' AND '".$start_stamp_end.":59.999'"; }
|
||||
else {
|
||||
if (strlen($start_stamp_begin) > 0) { $sql_where_ands[] = "start_stamp >= '".$start_stamp_begin.":00.000'"; }
|
||||
if (strlen($start_stamp_end) > 0) { $sql_where_ands[] = "start_stamp <= '".$start_stamp_end.":59.999'"; }
|
||||
}
|
||||
*/ if (strlen($answer_stamp_begin) > 0 && strlen($answer_stamp_end) > 0) { $sql_where_ands[] = "answer_stamp BETWEEN '".$answer_stamp_begin.":00.000' AND '".$answer_stamp_end.":59.999'"; }
|
||||
else {
|
||||
if (strlen($answer_stamp_begin) > 0) { $sql_where_ands[] = "answer_stamp >= '".$answer_stamp_begin.":00.000'"; }
|
||||
if (strlen($answer_stamp_end) > 0) { $sql_where_ands[] = "answer_stamp <= '".$answer_stamp_end.":59.999'"; }
|
||||
}
|
||||
if (strlen($end_stamp_begin) > 0 && strlen($end_stamp_end) > 0) { $sql_where_ands[] = "end_stamp BETWEEN '".$end_stamp_begin.":00.000' AND '".$end_stamp_end.":59.999'"; }
|
||||
else {
|
||||
if (strlen($end_stamp_begin) > 0) { $sql_where_ands[] = "end_stamp >= '".$end_stamp_begin.":00.000'"; }
|
||||
if (strlen($end_stamp_end) > 0) { $sql_where_ands[] = "end_stamp <= '".$end_stamp_end.":59.999'"; }
|
||||
}
|
||||
if (strlen($duration) > 0) { $sql_where_ands[] = "duration like '%".$duration."%'"; }
|
||||
if (strlen($billsec) > 0) { $sql_where_ands[] = "billsec like '%".$billsec."%'"; }
|
||||
if (strlen($hangup_cause) > 0) { $sql_where_ands[] = "hangup_cause like '%".$hangup_cause."%'"; }
|
||||
if (strlen($uuid) > 0) { $sql_where_ands[] = "uuid = '".$uuid."'"; }
|
||||
if (strlen($bleg_uuid) > 0) { $sql_where_ands[] = "bleg_uuid = '".$bleg_uuid."'"; }
|
||||
if (strlen($accountcode) > 0) { $sql_where_ands[] = "accountcode = '".$accountcode."'"; }
|
||||
if (strlen($read_codec) > 0) { $sql_where_ands[] = "read_codec like '%".$read_codec."%'"; }
|
||||
if (strlen($write_codec) > 0) { $sql_where_ands[] = "write_codec like '%".$write_codec."%'"; }
|
||||
if (strlen($remote_media_ip) > 0) { $sql_where_ands[] = "remote_media_ip like '%".$remote_media_ip."%'"; }
|
||||
if (strlen($network_addr) > 0) { $sql_where_ands[] = "network_addr like '%".$network_addr."%'"; }
|
||||
if (strlen($mos_comparison) > 0 && strlen($mos_score) > 0 ) { $sql_where_ands[] = "rtp_audio_in_mos " . $mos_comparison . " ".$mos_score.""; }
|
||||
|
||||
//if not admin or superadmin, only show own calls
|
||||
if (!permission_exists('xml_cdr_domain')) {
|
||||
if (count($_SESSION['user']['extension']) > 0) { // extensions are assigned to this user
|
||||
// create simple user extension array
|
||||
foreach ($_SESSION['user']['extension'] as $row) { $user_extensions[] = $row['user']; }
|
||||
// if both a source and destination are submitted, but neither are an assigned extension, restrict results
|
||||
if (
|
||||
$caller_id_number != '' &&
|
||||
$destination_number != '' &&
|
||||
array_search($caller_id_number, $user_extensions) === false &&
|
||||
array_search($destination_number, $user_extensions) === false
|
||||
) {
|
||||
$sql_where_ors[] = "caller_id_number like '".$user_extension."'";
|
||||
$sql_where_ors[] = "destination_number like '".$user_extension."'";
|
||||
$sql_where_ors[] = "destination_number like '*99".$user_extension."'";
|
||||
}
|
||||
// if source submitted is blank, implement restriction for assigned extension(s)
|
||||
if ($caller_id_number == '') { // if source criteria is blank, then restrict to assigned ext
|
||||
foreach ($user_extensions as $user_extension) {
|
||||
if (strlen($user_extension) > 0) { $sql_where_ors[] = "caller_id_number like '".$user_extension."'"; }
|
||||
}
|
||||
}
|
||||
// if destination submitted is blank, implement restriction for assigned extension(s)
|
||||
if ($destination_number == '') {
|
||||
foreach ($user_extensions as $user_extension) {
|
||||
if (strlen($user_extension) > 0) {
|
||||
$sql_where_ors[] = "destination_number like '".$user_extension."'";
|
||||
$sql_where_ors[] = "destination_number like '*99".$user_extension."'";
|
||||
}
|
||||
}
|
||||
}
|
||||
// concatenate the 'or's array, then add to the 'and's array
|
||||
if (sizeof($sql_where_ors) > 0) {
|
||||
$sql_where_ands[] = "( ".implode(" or ", $sql_where_ors)." )";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$sql_where_ands[] = "1 <> 1"; //disable viewing of cdr records by users with no assigned extensions
|
||||
}
|
||||
}
|
||||
|
||||
// concatenate the 'ands's array, add to where clause
|
||||
if (sizeof($sql_where_ands) > 0) {
|
||||
$sql_where = " where ".implode(" and ", $sql_where_ands)." and ";
|
||||
}
|
||||
|
||||
//calculate the seconds in different time frames
|
||||
$seconds_hour = 3600;
|
||||
@@ -89,6 +249,7 @@ else {
|
||||
$sql = "select count(*) as count from v_xml_cdr ";
|
||||
$sql .= $where;
|
||||
$sql .= " start_epoch BETWEEN ".$start." AND ".$end." ";
|
||||
|
||||
$prep_statement = $db->prepare(check_sql($sql));
|
||||
$prep_statement->execute();
|
||||
$result = $prep_statement->fetchAll(PDO::FETCH_ASSOC);
|
||||
@@ -141,11 +302,20 @@ else {
|
||||
//$call_seconds_1st_hour = get_call_seconds_between(3600, 0);
|
||||
//if (strlen($call_seconds_1st_hour) == 0) { $call_seconds_1st_hour = 0; }
|
||||
|
||||
//round down to the nearest hour
|
||||
$time = time() - time() % 3600;
|
||||
if (strlen(check_str($_GET['start_stamp_begin'])) > 0 && strlen(check_str($_GET['start_stamp_end'])) > 0 ) {
|
||||
$start_date = new DateTime(check_str($_GET['start_stamp_begin']));
|
||||
$end_date = new DateTime(check_str($_GET['start_stamp_end']));
|
||||
$time = $end_date->getTimestamp();
|
||||
$time = $time - $time % 3600;
|
||||
$hours = ($end_date->getTimestamp() - $start_date->getTimestamp()) / 3600;
|
||||
} else {
|
||||
//round down to the nearest hour
|
||||
$time = time() - time() % 3600;
|
||||
$hours = 23;
|
||||
}
|
||||
|
||||
//call info hour by hour
|
||||
for ($i = 0; $i <= 23; $i++) {
|
||||
for ($i = 0; $i <= $hours; $i++) {
|
||||
$start_epoch = $time - 3600*$i;
|
||||
$stop_epoch = $start_epoch + 3600;
|
||||
$stats[$i]['hours'] = $i + 1;
|
||||
@@ -153,7 +323,7 @@ else {
|
||||
$stats[$i]['stop_stamp'] = date('Y-m-d h:n:s', $stop_epoch);
|
||||
$stats[$i]['start_epoch'] = $start_epoch;
|
||||
$stats[$i]['stop_epoch'] = $stop_epoch;
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], $sql_where);
|
||||
$stats[$i]['seconds'] = get_call_seconds_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['minutes'] = $stats[$i]['seconds'] / 60;
|
||||
$stats[$i]['avg_sec'] = $stats[$i]['seconds'] / $stats[$i]['volume'];
|
||||
@@ -175,7 +345,7 @@ else {
|
||||
}
|
||||
|
||||
//call info for a day
|
||||
$i = 24;
|
||||
$i = $hours+1;
|
||||
$start_epoch = time() - $seconds_day;
|
||||
$stop_epoch = time();
|
||||
$stats[$i]['hours'] = 24;
|
||||
@@ -183,7 +353,7 @@ else {
|
||||
$stats[$i]['stop_stamp'] = date('Y-m-d h:n:s', $stop_epoch);
|
||||
$stats[$i]['start_epoch'] = $start_epoch;
|
||||
$stats[$i]['stop_epoch'] = $stop_epoch;
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], $sql_where);
|
||||
$stats[$i]['seconds'] = get_call_seconds_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['minutes'] = $stats[$i]['seconds'] / 60;
|
||||
$stats[$i]['avg_sec'] = $stats[$i]['seconds'] / $stats[$i]['volume'];
|
||||
@@ -208,7 +378,7 @@ else {
|
||||
$stats[$i]['stop_stamp'] = date('Y-m-d h:n:s', $stop_epoch);
|
||||
$stats[$i]['start_epoch'] = $start_epoch;
|
||||
$stats[$i]['stop_epoch'] = $stop_epoch;
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], $sql_where);
|
||||
$stats[$i]['seconds'] = get_call_seconds_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['minutes'] = $stats[$i]['seconds'] / 60;
|
||||
$stats[$i]['avg_sec'] = $stats[$i]['seconds'] / $stats[$i]['volume'];
|
||||
@@ -233,7 +403,7 @@ else {
|
||||
$stats[$i]['stop_stamp'] = date('Y-m-d h:n:s', $stop_epoch);
|
||||
$stats[$i]['start_epoch'] = $start_epoch;
|
||||
$stats[$i]['stop_epoch'] = $stop_epoch;
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['volume'] = get_call_volume_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], $sql_where);
|
||||
$stats[$i]['seconds'] = get_call_seconds_between($stats[$i]['start_epoch'], $stats[$i]['stop_epoch'], '');
|
||||
$stats[$i]['minutes'] = $stats[$i]['seconds'] / 60;
|
||||
$stats[$i]['avg_sec'] = $stats[$i]['seconds'] / $stats[$i]['volume'];
|
||||
@@ -251,47 +421,47 @@ else {
|
||||
$i++;
|
||||
|
||||
//show the graph
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['volume'][$x][] = date('H', $row['start_epoch']);
|
||||
$graph['volume'][$x][] = $row['volume']/1;
|
||||
if ($x == 23) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['minutes'][$x][] = date('H', $row['start_epoch']);
|
||||
$graph['minutes'][$x][] = round($row['minutes'],2);
|
||||
if ($x == 23) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['call_per_min'][$x][] = date('H', $row['start_epoch']);
|
||||
$graph['call_per_min'][$x][] = round($row['avg_min'],2);
|
||||
if ($x == 23) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['missed'][$x][] = date('H', $row['start_epoch']);
|
||||
$graph['missed'][$x][] = $row['missed']/1;
|
||||
if ($x == 23) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['asr'][$x][] = date('H', $row['start_epoch']);
|
||||
$graph['asr'][$x][] = round($row['asr'],2)/100;
|
||||
if ($x == 23) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['aloc'][$x][] = date('H', $row['start_epoch']);
|
||||
$graph['aloc'][$x][] = round($row['aloc'],2);
|
||||
if ($x == 23) { break; }
|
||||
$x++;
|
||||
}
|
||||
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['volume'][$x][] = $row['start_epoch'] * 1000;
|
||||
$graph['volume'][$x][] = $row['volume']/1;
|
||||
if ($x == $hours) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['minutes'][$x][] = $row['start_epoch'] * 1000;
|
||||
$graph['minutes'][$x][] = round($row['minutes'],2);
|
||||
if ($x == $hours) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['call_per_min'][$x][] = $row['start_epoch'] * 1000;
|
||||
$graph['call_per_min'][$x][] = round($row['avg_min'],2);
|
||||
if ($x == $hours) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['missed'][$x][] = $row['start_epoch'] * 1000;
|
||||
$graph['missed'][$x][] = $row['missed']/1;
|
||||
if ($x == $hours) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['asr'][$x][] = $row['start_epoch'] * 1000;
|
||||
$graph['asr'][$x][] = round($row['asr'],2)/100;
|
||||
if ($x == $hours) { break; }
|
||||
$x++;
|
||||
}
|
||||
$x = 0;
|
||||
foreach ($stats as $row) {
|
||||
$graph['aloc'][$x][] = $row['start_epoch'] * 1000;
|
||||
$graph['aloc'][$x][] = round($row['aloc'],2);
|
||||
if ($x == $hours) { break; }
|
||||
$x++;
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user