graph_hourdetail.php

来自「asterisk用 的voip记费软件」· PHP 代码 · 共 501 行

PHP
501
字号
<?phpinclude_once(dirname(__FILE__) . "/../lib/defines.php");include_once(dirname(__FILE__) . "/jpgraph_lib/jpgraph.php");include_once(dirname(__FILE__) . "/jpgraph_lib/jpgraph_line.php");include_once(dirname(__FILE__) . "/jpgraph_lib/jpgraph_bar.php");include_once(dirname(__FILE__) . "/../lib/module.access.php");if (! has_rights (ACX_CALL_REPORT)){ 	   Header ("HTTP/1.0 401 Unauthorized");	   Header ("Location: PP_error.php?c=accessdenied");	   	   die();	   }// this variable specifie the debug type (0 => nothing, 1 => sql result, 2 => boucle checking, 3 other value checking)$FG_DEBUG = 0;getpost_ifset(array('typegraph', 'min_call', 'fromstatsday_sday', 'days_compare', 'fromstatsmonth_sday', 'dsttype', 'srctype', 'clidtype', 'channel', 'resulttype', 'dst', 'src', 'clid', 'userfieldtype', 'userfield', 'accountcodetype', 'accountcode', 'hourinterval', 'customer', 'entercustomer', 'enterprovider', 'entertrunk'));//echo "posted=$posted 'accountcodetype=$accountcodetype', 'accountcode=$accountcode', 'fromstatsday_sday=$fromstatsday_sday', 'fromstatsmonth_sday=$fromstatsmonth_sday' hourinterval=$hourinterval ";//exit();//$hourinterval=12;// hourinterval -- 1 to 23if (!($hourinterval>=0) && ($hourinterval<=23)) exit();// http://localhost/Asterisk/asterisk-stat-v1_4/graph_stat.php?min_call=0&fromstatsday_sday=11&days_compare=2&fromstatsmonth_sday=2005-02&dsttype=1&srctype=1&clidtype=1&channel=&resulttype=&dst=1649&src=&clid=&userfieldtype=1&userfield=&accountcodetype=1&accountcode=// The variable FG_TABLE_NAME define the table name to use$FG_TABLE_NAME="cc_call t1 LEFT OUTER JOIN cc_trunk t3 ON t1.id_trunk = t3.id_trunk";//$link = DbConnect();$DBHandle  = DbConnect();// The variable Var_col would define the col that we want show in your table// First Name of the column in the html page, second name of the field$FG_TABLE_COL = array();$FG_TABLE_DEFAULT_ORDER = "starttime";$FG_TABLE_DEFAULT_SENS = "DESC";// This Variable store the argument for the SQL query$FG_COL_QUERY_GRAPH	= 'starttime, sessiontime';if ($FG_DEBUG == 3) echo "<br>Table : $FG_TABLE_NAME  	- 	Col_query : $FG_COL_QUERY_GRAPH";$instance_table_graph = new Table($FG_TABLE_NAME, $FG_COL_QUERY_GRAPH);if ( is_null ($order) || is_null($sens) ){	$order = $FG_TABLE_DEFAULT_ORDER;	$sens  = $FG_TABLE_DEFAULT_SENS;}		  function do_field($sql,$fld,$dbfld){  		$fldtype = $fld.'type';		global $$fld;		global $$fldtype;		        if ($$fld){                if (strpos($sql,'WHERE') > 0){                        $sql = "$sql AND ";                }else{                        $sql = "$sql WHERE ";                }				$sql = "$sql t1.$dbfld";				if (isset ($$fldtype)){                                        switch ($$fldtype) {							case 1:	$sql = "$sql='".$$fld."'";  break;							case 2: $sql = "$sql LIKE '".$$fld."%'";  break;							case 3: $sql = "$sql LIKE '%".$$fld."%'";  break;							case 4: $sql = "$sql LIKE '%".$$fld."'";						}                }else{ $sql = "$sql LIKE '%".$$fld."%'"; }		}        return $sql;  }      $SQLcmd = '';  if ($_POST['before']) {    if (strpos($SQLcmd, 'WHERE') > 0) { 	$SQLcmd = "$SQLcmd AND ";    }else{     								$SQLcmd = "$SQLcmd WHERE "; }    $SQLcmd = "$SQLcmd starttime <'".$_POST['before']."'";  }  if ($_POST['after']) {    if (strpos($SQLcmd, 'WHERE') > 0) {      $SQLcmd = "$SQLcmd AND ";  } else {      $SQLcmd = "$SQLcmd WHERE ";    }    $SQLcmd = "$SQLcmd starttime >'".$_POST['after']."'";  }      $SQLcmd = do_field($SQLcmd, 'dst', 'calledstation');    if (isset($customer)  &&  ($customer>0)){	if (strlen($SQLcmd)>0) $SQLcmd.=" AND ";	else $SQLcmd.=" WHERE ";	$SQLcmd.=" username='$customer' ";}else{	if (isset($entercustomer)  &&  ($entercustomer>0)){		if (strlen($SQLcmd)>0) $SQLcmd.=" AND ";		else $SQLcmd.=" WHERE ";		$SQLcmd.=" username='$entercustomer' ";	}}if ($_SESSION["is_admin"] == 1){	if (isset($enterprovider) && $enterprovider > 0) {		if (strlen($SQLcmd) > 0) $SQLcmd .= " AND "; else $SQLcmd .= " WHERE ";		$SQLcmd .= " t3.id_provider = '$enterprovider' ";	}	if (isset($entertrunk) && $entertrunk > 0) {		if (strlen($SQLcmd) > 0) $SQLcmd .= " AND "; else $SQLcmd .= " WHERE ";		$SQLcmd .= " t3.id_trunk = '$entertrunk' ";	}}$date_clause='';$min_call= intval($min_call);if (($min_call!=0) && ($min_call!=1)) $min_call=0;if (!isset($fromstatsday_sday)){		$fromstatsday_sday = date("d");	$fromstatsmonth_sday = date("Y-m");	}$hourintervalplus = $hourinterval+1;if (DB_TYPE == "postgres"){		if (isset($fromstatsday_sday) && isset($fromstatsmonth_sday)) 	$date_clause.=" AND t1.starttime < '$fromstatsmonth_sday-$fromstatsday_sday ".$hourintervalplus.":00:00' AND t1.starttime >= '$fromstatsmonth_sday-$fromstatsday_sday ".$hourinterval.":00:00' ";}else{	if (isset($fromstatsday_sday) && isset($fromstatsmonth_sday)) 	$date_clause.=" AND t1.starttime < '$fromstatsmonth_sday-$fromstatsday_sday ".$hourintervalplus.":00:00' AND t1.starttime >= '$fromstatsmonth_sday-$fromstatsday_sday ".$hourinterval.":00:00' ";	}//-- $date_clause=" AND calldate < date'$fromstatsmonth_sday-$fromstatsday_sday'+ INTERVAL '1 DAY' AND calldate >= '$fromstatsmonth_sday-$fromstatsday_sday 12:00:00'";  if (strpos($SQLcmd, 'WHERE') > 0) { 	$FG_TABLE_CLAUSE = substr($SQLcmd,6).$date_clause; }elseif (strpos($date_clause, 'AND') > 0){	$FG_TABLE_CLAUSE = substr($date_clause,5); }if ($FG_DEBUG == 3) echo $FG_TABLE_CLAUSE;//$list = $instance_table -> Get_list ($DBHandle, $FG_TABLE_CLAUSE, $order, $sens, null, null, null, null);$list_total = $instance_table_graph -> Get_list ($DBHandle, $FG_TABLE_CLAUSE, 't1.starttime', 'ASC', null, null, null, null);//print_r($list_total);/**************************************/$nbcall = count($list_total);$mycall_min[0]=0;$mycall_dur[0]=0;/* 	WE WILL BUILD DIFFERENT TABLES, mycall_min FOR THE STARTDATE (MIN) mycall_dur FOR THE DURATION OF EACH CALLS (IN SECS)mycall_minsec_start FOR THE EXACT START OF THE CALL AND ENDmycall_minsec_start[i][0] - START DATE (MINSEC)1843		18em Minutes 43 secmycall_minsec_start[i][1] - END DATE   (MINSEC)2210		22em Minutes 10 sec*/for ($i=1; $i <= $nbcall; $i++){		$mycall_min[$i] = substr($list_total[$i-1][0],14,2);	$mycall_minsec_start[$i][0] = substr($list_total[$i-1][0],14,2).substr($list_total[$i-1][0],17,2);	$mycall_dur[$i] = $list_total[$i-1][1];			$nx_sec_report = 0;	$nx_sec = substr($list_total[$i-1][0],17,2) + ($mycall_dur[$i]%60);	$nx_sec_report = intval($nx_sec/60);	$nx_sec = $nx_sec%60;		$nx_min = substr($list_total[$i-1][0],14,2) + intval($mycall_dur[$i]/60) + $nx_sec_report;	if ($nx_min>59) { $nx_min=59; $nx_sec = 59; }		$mycall_minsec_start[$i][1] = sprintf("%02d",$nx_min).sprintf("%02d",$nx_sec);			//if ($i==10) break;}/*print_r ($list_total);print_r ($mycall_minsec_start);print_r ($mycall_dur);echo count($mycall_minsec_start)."<br>";*/for ($k=0; $k<=count($mycall_minsec_start); $k++){	if (is_numeric($fluctuation[$mycall_minsec_start[$k][0]])){		$fluctuation[$mycall_minsec_start[$k][0]]++; 	}else{		$fluctuation[$mycall_minsec_start[$k][0]]=1;	} 	if (is_numeric($fluctuation[$mycall_minsec_start[$k][1]])){		$fluctuation[$mycall_minsec_start[$k][1]]--; 	}else{		$fluctuation[$mycall_minsec_start[$k][1]]=-1;	}}ksort($fluctuation);//print_r($fluctuation);$maxload=1;$load=0;while (list ($key, $val) = each ($fluctuation)) {  //echo "<br>$key => $val\n";    $load = $load + $val;  if (is_numeric($key)) $fluctuation_load[substr($key,0,2).':'.substr($key,2,2)] = $load;  //echo "<br>:: ".$load;  if ($load > $maxload){   		$maxload=$load;		  }}//echo $maxload;//print_r($fluctuation_load);//print_r(array_keys($fluctuation_load));function recursif_count_load ($ind, $table, $load){		$maxload=$load;		$current_start = $table[$ind][0];		$current_end = $table[$ind][1];				for ($k=$ind+1; $k<=count($table); $k++){			if ($table[$k][0]<= $current_end){								$load = recursif_count_load ($k, $table, $load+1);				if ($load > $maxload) $maxload=$load;						}else{				break;						}				}		if ($k<count($table)) $load = recursif_count_load ($k, $table, $load);		if ($load > $maxload) $maxload=$load;		return $maxload;		}// Some datafor ($j=0; $j <= 59; $j++){ 	if ($j==-1) 		$datax[] = '';	else 		$datax[] = sprintf("%02d",$j);	//$datax = array("","00","01","02","03","04","05","06","07","08","09","10","01","02","03","04","05","06","07","08","09","10","01","02","03","04","05","06","07","08","09","10","01","02","03","04","05","06","07","08","09","10","01","02","03","04","05","06","07","08","09","10");}	/*$nbcall=20;$mycall_min[0]=0;$mycall_dur[0]=0;for ($i=1; $i <= $nbcall; $i++){	$mycall_min[$i] = rand(0,59); // num min INPUT	$mycall_dur[$i] = rand(40,1500); // num sec sessiontime INPUT}*/sort ($mycall_min);//print_r($mycall_min);$lineSetWeight = 500 / $nbcall; for ($k=1; $k <= $nbcall; $k++){	$mycall_dur[$k] = intval($mycall_dur[$k] /60)+1;			for ($j=0; $j <= 59; $j++){		if ($j==-1){			$datay[$k][]='';		}else{			if ($j==$mycall_min[$k]){				$datay[$k][]=$k*1;			}elseif ($j>$mycall_min[$k]){ // CHECK SESSIONTIME								if ( ($mycall_min[$k]+$mycall_dur[$k]) >= $j ) $datay[$k][]=$k*1;				else $datay[$k][]='';						}else{ // FILL WITH BLANK				$datay[$k][]='';			}			}	}	}//print_r($datay);//exit();/*$table_colors[]="yellow@0.3";$table_colors[]="purple@0.3";$table_colors[]="green@0.3";$table_colors[]="blue@0.3";$table_colors[]="red@0.3";*/$myrgb = new RGB();foreach ($myrgb -> rgb_table as $minimecolor){	$table_colors[]= $minimecolor;}/*****************************************************//* 		  2 GRAPH - FLUCTUATION & WATCH TRAFFIC	 	 *//*****************************************************/if ($typegraph == 'fluctuation'){		// Setup the graph				$width_graph=750;						if (count($fluctuation_load)>200){			$multi_width = intval(count($fluctuation_load)/90);			$width_graph  =$width_graph * $multi_width;		}		$graph = new Graph($width_graph,450);		$graph->SetMargin(40,40,45,90); //droit,gauche,haut,bas		$graph->SetMarginColor('white');		//$graph->SetScale("linlin");		$graph->SetScale("textlin");		$graph->yaxis->scale->SetGrace(3);				// Hide the frame around the graph		$graph->SetFrame(false);				// Setup title		$graph->title->Set("Graphic");		//$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);				// Note: requires jpgraph 1.12p or higher		$graph->SetBackgroundGradient('#FFFFFF','#CDDEFF:0.8',GRAD_HOR,BGRAD_PLOT);		$graph->tabtitle->Set("$fromstatsmonth_sday-$fromstatsday_sday Hourly Graph - FROM $hourinterval to $hourintervalplus - NBCALLS $nbcall - "."MAX LOAD = $maxload");		$graph->tabtitle->SetWidth(TABTITLE_WIDTHFULL);				// Enable X and Y Grid		$graph->xgrid->Show();		$graph->xgrid->SetColor('gray@0.5');		$graph->ygrid->SetColor('gray@0.5');				$graph->yaxis->HideZeroLabel();		$graph->xaxis->HideZeroLabel();		$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#CDDEFF@0.5');						//$graph->xaxis->SetTickLabels($tableau_hours[0]);				// initialisaton fixe de AXE X				$graph->xaxis->SetTickLabels(array_keys($fluctuation_load)); 								// Setup X-scale		//$graph->xaxis->SetTickLabels($tableau_hours[0]);		$graph->xaxis->SetLabelAngle(90);						// Format the legend box		$graph->legend->SetColor('firebrick1');				$graph->legend->SetFillColor('gray@0.8');		$graph->legend->SetLineWeight(2);		$graph->legend->SetShadow('gray@0.4',3);		$graph->legend->SetPos(0.1,0.15,'left','left');		$graph->legend->SetMarkAbsSize(1);		$graph->legend->SetFont(FF_FONT1,FS_BOLD); 								$indgraph=0;									$bplot[$indgraph] = new BarPlot(array_values($fluctuation_load));						//$bplot[$indgraph]->SetColor($table_colors[$indgraph]);			$bplot[$indgraph]->SetWeight(1);			$bplot[$indgraph]->SetFillColor('orange');			$bplot[$indgraph]->SetShadow('black',1,1);						$bplot[$indgraph]->value->Show();				$bplot[$indgraph]->SetLegend("MAX LOAD = $maxload");						$graph->Add($bplot[$indgraph]);			$indgraph++;							// Output the graph		$graph->Stroke();}else{										$graph = new Graph(750,800);		$graph->SetMargin(60,40,45,90); //droit,gauche,haut,bas		$graph->SetMarginColor('white');		//$graph->SetScale("linlin");		$graph->SetScale("textlin");		$graph->yaxis->scale->SetGrace(1,1);										// Hide the frame around the graph		$graph->SetFrame(false);				// Setup title		$graph->title->Set("Graphic");		//$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);				// Note: requires jpgraph 1.12p or higher		$graph->SetBackgroundGradient('#FFFFFF','#CDDEFF:0.8',GRAD_HOR,BGRAD_PLOT);		$graph->tabtitle->Set("$fromstatsmonth_sday-$fromstatsday_sday Hourly Graph - FROM $hourinterval to $hourintervalplus - NBCALLS $nbcall - "."MAX LOAD = $maxload");		$graph->tabtitle->SetWidth(TABTITLE_WIDTHFULL);				//$graph->yaxis->Hide();		// Enable X and Y Grid		//$graph->xgrid->Show();		$graph->xgrid->SetColor('gray@0.5');		$graph->ygrid->SetColor('gray@0.5');				//$graph->yaxis->HideZeroLabel();		$graph->xaxis->HideZeroLabel();		$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#CDDEFF@0.5');				$graph->xaxis->SetTickLabels($datax);		$graph->xaxis->SetLabelAngle(90);						$graph->yaxis->HideFirstLastLabel();		//$graph->yaxis->HideLine();		$graph->yaxis->HideTicks(); 		$graph->yaxis->SetLabelFormatString('%1d call'); 		$graph->yaxis->SetTextLabelInterval(2); 						// Format the legend box		$graph->legend->SetColor('firebrick1');				$graph->legend->SetFillColor('gray@0.8');		$graph->legend->SetLineWeight(2);		$graph->legend->SetShadow('gray@0.4',3);		$graph->legend->SetPos(0.2,0.2,'left','center');		$graph->legend->SetMarkAbsSize(1);		$graph->legend->SetFont(FF_FONT1,FS_BOLD); 				for ($i=1;$i<=count($datay);$i++){					// Create the first line			$p1[$i] = new LinePlot($datay[$i]);				$p1[$i]->SetColor($table_colors[($i+20) % 436]  );			$p1[$i]->SetCenter();			$p1[$i]->SetWeight($lineSetWeight);			if ($i==1) $p1[$i]->SetLegend("MAX LOAD = $maxload");			$graph->Add($p1[$i]);					}				// Output line		$graph->Stroke();						}//END IF (typegraph)?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?