2012-06-04 16:58:40 +02:00
< ? 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 >
2014-07-11 03:34:47 +02:00
Portions created by the Initial Developer are Copyright ( C ) 2008 - 2014
2012-06-04 16:58:40 +02:00
the Initial Developer . All Rights Reserved .
Contributor ( s ) :
Mark J Crane < markjcrane @ fusionpbx . com >
*/
require_once " root.php " ;
2013-07-06 08:03:27 +02:00
require_once " resources/require.php " ;
2013-07-06 07:50:55 +02:00
require_once " resources/check_auth.php " ;
2012-06-04 16:58:40 +02:00
if ( permission_exists ( 'xml_cdr_view' )) {
//access granted
}
else {
echo " access denied " ;
exit ;
}
//import xml_cdr files
require_once " v_xml_cdr_import.php " ;
//additional includes
2013-07-06 08:29:50 +02:00
require_once " resources/paging.php " ;
2012-06-04 16:58:40 +02:00
//set 24hr or 12hr clock
define ( 'TIME_24HR' , 1 );
//get post or get variables from http
2014-07-17 18:23:49 +02:00
if ( count ( $_REQUEST ) > 0 ) {
2013-01-17 19:32:16 +01:00
$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 " ]);
2014-08-03 06:03:44 +02:00
$caller_extension_uuid = check_str ( $_REQUEST [ " caller_extension_uuid " ]);
2013-01-17 19:32:16 +01:00
$destination_number = check_str ( $_REQUEST [ " destination_number " ]);
$context = check_str ( $_REQUEST [ " context " ]);
2014-08-02 12:57:02 +02:00
$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 " ]);
2013-01-17 19:32:16 +01:00
$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 " ]);
2015-02-20 00:28:40 +01:00
$bridge_uuid = check_str ( $_REQUEST [ " network_addr " ]);
$order_by = check_str ( $_REQUEST [ " order_by " ]);
$order = check_str ( $_REQUEST [ " order " ]);
2012-06-04 16:58:40 +02:00
}
//build the sql where string
2013-01-17 19:32:16 +01:00
if ( $missed == true ) {
2014-06-17 00:08:30 +02:00
$sql_where_ands [] = " billsec = '0' " ;
2013-01-17 19:32:16 +01:00
}
2014-06-16 20:12:21 +02:00
if ( strlen ( $start_epoch ) > 0 && strlen ( $stop_epoch ) > 0 ) {
2014-06-17 00:08:30 +02:00
$sql_where_ands [] = " start_epoch BETWEEN " . $start_epoch . " AND " . $stop_epoch . " " ;
2013-01-17 19:32:16 +01:00
}
2014-06-17 00:08:30 +02:00
if ( strlen ( $cdr_id ) > 0 ) { $sql_where_ands [] = " cdr_id like '% " . $cdr_id . " %' " ; }
2014-07-17 18:52:31 +02:00
if ( strlen ( $direction ) > 0 ) { $sql_where_ands [] = " direction = ' " . $direction . " ' " ; }
2014-06-24 02:37:17 +02:00
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 . " ' " ;
}
2014-08-03 06:03:44 +02:00
if ( strlen ( $caller_extension_uuid ) > 0 ) {
$sql_where_ands [] = " extension_uuid = ' " . $caller_extension_uuid . " ' " ;
}
2014-06-24 02:37:17 +02:00
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 . " ' " ;
}
2014-06-17 00:08:30 +02:00
if ( strlen ( $context ) > 0 ) { $sql_where_ands [] = " context like '% " . $context . " %' " ; }
2014-08-02 12:57:02 +02:00
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' " ; }
2012-06-04 16:58:40 +02:00
}
2014-08-02 12:57:02 +02:00
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' " ; }
2012-06-04 16:58:40 +02:00
}
2014-06-17 00:08:30 +02:00
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 . " %' " ; }
2012-06-04 16:58:40 +02:00
2015-03-14 01:03:16 +01:00
//if not admin or superadmin, only show own calls
2014-06-17 00:08:30 +02:00
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 . " ' " ; }
2012-06-04 16:58:40 +02:00
}
2014-06-17 00:08:30 +02:00
}
// 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 . " ' " ;
}
2012-06-04 16:58:40 +02:00
}
2014-06-17 00:08:30 +02:00
}
// 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 ) . " ) " ;
2012-06-04 16:58:40 +02:00
}
}
2015-03-14 01:03:16 +01:00
else {
$sql_where_ands [] = " 1 <> 1 " ; //disable viewing of cdr records by users with no assigned extensions
}
2012-06-04 16:58:40 +02:00
}
2014-06-17 00:08:30 +02:00
// concatenate the 'ands's array, add to where clause
if ( sizeof ( $sql_where_ands ) > 0 ) {
$sql_where = " and " . implode ( " and " , $sql_where_ands );
2012-06-04 16:58:40 +02:00
}
//set the param variable which is used with paging
2015-02-20 00:28:40 +01:00
$param = " &cdr_id= " . $cdr_id ;
$param .= " &missed= " . $missed ;
$param .= " &direction= " . $direction ;
2014-06-17 00:08:30 +02:00
$param .= " &caller_id_name= " . $caller_id_name ;
$param .= " &caller_id_number= " . $caller_id_number ;
2015-02-20 00:28:40 +01:00
$param .= " &caller_extension_uuid= " . $caller_extension_uuid ;
2014-06-17 00:08:30 +02:00
$param .= " &destination_number= " . $destination_number ;
$param .= " &context= " . $context ;
2014-08-02 12:57:02 +02:00
$param .= " &start_stamp_begin= " . $start_stamp_begin ;
$param .= " &start_stamp_end= " . $start_stamp_end ;
$param .= " &answer_stamp_begin= " . $answer_stamp_begin ;
$param .= " &answer_stamp_end= " . $answer_stamp_end ;
$param .= " &end_stamp_begin= " . $end_stamp_begin ;
$param .= " &end_stamp_end= " . $end_stamp_end ;
2014-06-17 00:08:30 +02:00
$param .= " &start_epoch= " . $start_epoch ;
$param .= " &stop_epoch= " . $stop_epoch ;
$param .= " &duration= " . $duration ;
$param .= " &billsec= " . $billsec ;
2015-02-20 00:28:40 +01:00
$param .= " &hangup_cause= " . $hangup_cause ;
2014-06-17 00:08:30 +02:00
$param .= " &uuid= " . $uuid ;
2015-02-20 00:28:40 +01:00
$param .= " &bleg_uuid= " . $bleg_uuid ;
2014-06-17 00:08:30 +02:00
$param .= " &accountcode= " . $accountcode ;
$param .= " &read_codec= " . $read_codec ;
$param .= " &write_codec= " . $write_codec ;
$param .= " &remote_media_ip= " . $remote_media_ip ;
$param .= " &network_addr= " . $network_addr ;
2015-02-20 00:28:40 +01:00
$param .= " &bridge_uuid= " . $bridge_uuid ;
2015-03-06 18:15:09 +01:00
if ( $_GET [ 'showall' ] && permission_exists ( 'xml_cdr_all' )) {
$param .= " &showall= " . $_GET [ 'showall' ];
}
2012-08-24 07:56:45 +02:00
if ( isset ( $order_by )) {
2015-02-20 00:28:40 +01:00
$param .= " &order_by= " . $order_by . " &order= " . $order ;
2012-08-24 07:56:45 +02:00
}
2012-06-04 16:58:40 +02:00
//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 " ; }
2014-07-11 03:34:47 +02:00
//set a default number of rows to show
2012-06-04 16:58:40 +02:00
$num_rows = '0' ;
2014-07-11 03:34:47 +02:00
//set a default CDR limit
if ( ! isset ( $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ])) {
$_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ] = 800 ;
}
2012-07-11 04:23:05 +02:00
//page results if rows_per_page is greater than zero
if ( $rows_per_page > 0 ) {
2014-06-16 20:12:21 +02:00
//get the number of rows in the v_xml_cdr
2014-06-17 00:08:30 +02:00
$sql = " select count(*) as num_rows from v_xml_cdr where domain_uuid = ' " . $domain_uuid . " ' " . $sql_where ;
2012-07-11 04:23:05 +02:00
$prep_statement = $db -> prepare ( check_sql ( $sql ));
if ( $prep_statement ) {
$prep_statement -> execute ();
$row = $prep_statement -> fetch ( PDO :: FETCH_ASSOC );
if ( $row [ 'num_rows' ] > 0 ) {
$num_rows = $row [ 'num_rows' ];
}
else {
$num_rows = '0' ;
}
}
unset ( $prep_statement , $result );
2014-08-02 12:57:02 +02:00
2014-07-11 03:34:47 +02:00
//limit the number of results
if ( $num_rows > $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ]) {
$num_rows = $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ];
}
if ( $rows_per_page > $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ]) {
$rows_per_page = $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ];
}
2012-07-11 04:23:05 +02:00
//prepare to page the results
//$rows_per_page = 150; //set on the page that includes this page
$page = $_GET [ 'page' ];
2014-06-16 20:12:21 +02:00
if ( strlen ( $page ) == 0 ) { $page = 0 ; $_GET [ 'page' ] = 0 ; }
list ( $paging_controls , $rows_per_page , $var_3 ) = paging ( $num_rows , $param , $rows_per_page );
2012-07-11 04:23:05 +02:00
$offset = $rows_per_page * $page ;
2012-06-04 16:58:40 +02:00
}
//get the results from the db
2014-12-10 04:57:48 +01:00
$sql = " select " ;
$sql .= " start_stamp, " ;
$sql .= " start_epoch, " ;
$sql .= " hangup_cause, " ;
$sql .= " duration, " ;
$sql .= " billmsec, " ;
$sql .= " recording_file, " ;
$sql .= " uuid, " ;
$sql .= " bridge_uuid, " ;
$sql .= " direction, " ;
$sql .= " billsec, " ;
$sql .= " caller_id_name, " ;
$sql .= " caller_id_number, " ;
$sql .= " destination_number, " ;
if ( file_exists ( $_SERVER [ 'DOCUMENT_ROOT' ] . PROJECT_PATH . " /app/billing/app_config.php " )){
$sql .= " accountcode, " ;
$sql .= " call_sell, " ;
$sql .= " xml, " ;
$sql .= " json, " ;
}
if ( permission_exists ( " xml_cdr_pdd " )) {
$sql .= " pdd_ms, " ;
}
if ( permission_exists ( " xml_cdr_mos " )) {
$sql .= " rtp_audio_in_mos, " ;
}
$sql .= " (answer_epoch - start_epoch) as tta " ;
2015-03-06 18:15:09 +01:00
if ( $_GET [ 'showall' ] && permission_exists ( 'xml_cdr_all' )) {
$sql .= " , domain_name " ;
}
$sql .= " from v_xml_cdr " ;
if ( $_GET [ 'showall' ] && permission_exists ( 'xml_cdr_all' )) {
if ( $sql_where ) { $sql .= " where " ; }
} else {
$sql .= " where domain_uuid = ' " . $domain_uuid . " ' " ;
}
$sql .= $sql_where ;
2014-06-17 00:08:30 +02:00
if ( strlen ( $order_by ) > 0 ) { $sql .= " order by " . $order_by . " " . $order . " " ; }
2014-07-11 03:34:47 +02:00
if ( $rows_per_page == 0 ) {
$sql .= " limit " . $_SESSION [ 'cdr' ][ 'limit' ][ 'numeric' ] . " offset 0 " ;
}
else {
2014-06-17 00:08:30 +02:00
$sql .= " limit " . $rows_per_page . " offset " . $offset . " " ;
2012-07-11 04:23:05 +02:00
}
2012-06-04 16:58:40 +02:00
$prep_statement = $db -> prepare ( check_sql ( $sql ));
$prep_statement -> execute ();
$result = $prep_statement -> fetchAll ( PDO :: FETCH_ASSOC );
$result_count = count ( $result );
unset ( $prep_statement , $sql );
$c = 0 ;
$row_style [ " 0 " ] = " row_style0 " ;
$row_style [ " 1 " ] = " row_style1 " ;
2014-09-11 05:14:52 +02:00
$row_style [ " 2 " ] = " row_style2 " ;
2012-06-04 16:58:40 +02:00
?>