Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1277 → Rev 1278

/astrisk-stats/cdr.php
0,0 → 1,134
<?php
####################################################
# AstWeb - Asterisk PBX Dynamic config environment #
# #
# Written by: Jamie Carl #
# jazz@funkynerd.com #
# #
# Copyright (C) 2006 Achieve Corp #
# #
# Licence: This software is licenced under the #
# GNU/GPL. Please see licence.txt for #
# more information. #
####################################################
 
if(!defined('IN_ASTWEB')) {
die('Hacking attempt!');
}
 
if(array_key_exists('detail', $_GET)) {
$cdr_detail = array();
$db->query_params('SELECT * FROM cdr WHERE acctid=$1', array($_GET['detail']));
$detail = $db->fetch_row();
for ($i=0;$i<$db->num_fields();$i++) {
$col = $db->get_field_name($i);
$cdr_detail['CDR_'.strtoupper($col)] = $detail[$col];
}
$display->add_variables($cdr_detail);
$display->add_template('cdr_detail');
}
elseif(array_key_exists('s', $_GET) || array_key_exists('list', $_GET)) {
function do_field($sql, &$params, $fld) {
if ($fld && $_GET[$fld]) {
$sql .= " AND $fld";
if (array_key_exists($fld.'type', $_GET)) {
$dType = $_GET[$fld.'type'];
switch ($dType) {
case 1:
array_push($params, $_GET[$fld]);
$sql .= "=$" . count($params);
break;
case 2:
array_push($params, "$_GET[$fld]%");
$sql .= " LIKE $" . count($params);
break;
case 3:
array_push($params, "%$_GET[$fld]%");
$sql .= " LIKE $" . count($params);
break;
case 4;
array_push($params, "%$_GET[$fld]");
$sql .= " LIKE $" . count($params);
}
} else {
array_push($params, "%$_GET[$fld]%");
$sql .= " LIKE $" . count($params);
}
}
return $sql;
}
 
# Construct Query Here
$query = "";
$params = array();
 
if ($_GET['before']) {
array_push($params, $_GET['before']);
$query .= " AND calldate < $" . count($params);
}
 
if ($_GET['after']) {
array_push($params, $_GET['after']);
$query .= " AND calldate > $" . count($params);
}
 
$query = do_field($query, $params, 'clid');
$query = do_field($query, $params, 'src');
$query = do_field($query, $params, 'dst');
$query = do_field($query, $params, 'channel');
 
$query_limit = '';
if(array_key_exists('list',$_GET)) {
switch($_GET['list']) {
case 'year': $query .= " AND date_trunc('year', calldate) = date_trunc('year', current_date)"; break;
case 'month': $query .= " AND date_trunc('month', calldate) = date_trunc('month', current_date)"; break;
case 'week': $query .= " AND date_trunc('week', calldate) = date_trunc('week', current_date)"; break;
case 'today': $query .= " AND date_trunc('day', calldate) = date_trunc('day', current_date)"; break;
default: $query_limit .= " limit 200";
}
}
 
$list_query = "SELECT acctid,calldate,clid,src,dst,duration,disposition from cdr where 1=1"
. $query . " ORDER BY calldate desc" . $query_limit;
$result = $db->query_params($list_query, $params);
 
$calls_number = $db->num_rows();
$header = array();
for ($hdr=0;$hdr<$db->num_fields();$hdr++) {
array_push($header, $db->get_field_name($hdr));
}
$cdr = new Table($header);
$cdr->set_table_class('stat cdr list');
 
while ($line = $db->fetch_row()) {
$cdr->newrow();
foreach ($line as $col_value) {
$cdr->addcell(trim($col_value));
}
$cdr->addcell(array('class' => 'link', 'html' =>
display_link($PHP_SELF.'?m=cdr&detail='.$line['acctid'], 'Details')));
}
$display->add_text($cdr->build());
// summary
$sum_query = "SELECT sum(duration) as dur, sum(billsec) as bill from cdr where 1=1" . $query;
$result = $db->query_params($sum_query, $params);
$line = $db->fetch_row();
$cdr = new Table();
$cdr->set_table_class('stat cdr sum');
$cdr->addcell(array('tag' => 'th', 'text' => 'Calls'));
$cdr->addcell($calls_number);
$cdr->newrow();
$cdr->addcell(array('tag' => 'th', 'text' => 'Call Seconds'));
$cdr->addcell(Duration($line['dur']));
$cdr->newrow();
$cdr->addcell(array('tag' => 'th', 'text' => 'Bill Seconds'));
$cdr->addcell(Duration($line['bill']));
$display->add_text($cdr->build());
}
else {
$display->add_variables(array('CDR_METHOD' => 'GET', 'CDR_ACTION' => $PHP_SELF));
$display->add_template('cdr');
}
?>