From 7b9c8fa705de3d2ced54ac52806b3eddda107f41 Mon Sep 17 00:00:00 2001
From: zarzuelo <zarzuelo@gmail.com>
Date: Tue, 12 Apr 2011 10:04:41 +0000
Subject: [PATCH] 2011-04-12  Sergio Martin <sergio.martin@artica.es>

	* include/graphs/functions_fsgraph.php
	include/graphs/functions_gd.php
	include/graphs/images_graphs
	include/graphs/images_graphs/outlimits.png
	include/graphs/fgraph.php: Added new file with sd functions
	of two graphs, histogram and progress bar. Added folder with
	graph abstraction default images. Clean code



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4190 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_console/ChangeLog                     |  10 ++
 pandora_console/include/graphs/fgraph.php     |  52 +++++-
 .../include/graphs/functions_fsgraph.php      |  10 +-
 .../include/graphs/functions_gd.php           | 163 ++++++++++++++++++
 .../graphs/images_graphs/outlimits.png        | Bin 0 -> 321 bytes
 5 files changed, 222 insertions(+), 13 deletions(-)
 create mode 100755 pandora_console/include/graphs/functions_gd.php
 create mode 100755 pandora_console/include/graphs/images_graphs/outlimits.png

diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog
index d50cd7bb22..c7c4bac5fa 100644
--- a/pandora_console/ChangeLog
+++ b/pandora_console/ChangeLog
@@ -1,3 +1,13 @@
+2011-04-12  Sergio Martin <sergio.martin@artica.es>
+
+	* include/graphs/functions_fsgraph.php
+	include/graphs/functions_gd.php
+	include/graphs/images_graphs
+	include/graphs/images_graphs/outlimits.png
+	include/graphs/fgraph.php: Added new file with sd functions
+	of two graphs, histogram and progress bar. Added folder with
+	graph abstraction default images. Clean code
+
 2011-04-12  Junichi Satoh  <junichi@rworks.jp>
 
 	* godmode/uses/configure_profile.php: Fixed $name twice encoding.
diff --git a/pandora_console/include/graphs/fgraph.php b/pandora_console/include/graphs/fgraph.php
index bf340f568e..076c184a61 100755
--- a/pandora_console/include/graphs/fgraph.php
+++ b/pandora_console/include/graphs/fgraph.php
@@ -10,8 +10,48 @@
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU General Public License for more details.
 
-include_once('functions_fsgraph.php');
-include_once('functions_utils.php');
+
+// If is called from index
+if(file_exists('include/functions.php')) {
+	include_once('include/functions.php');
+	include_once('include/graphs/functions_fsgraph.php');
+	include_once('include/graphs/functions_utils.php');
+} // If is called through url
+else if(file_exists('../functions.php')) {
+	include_once('../functions.php');
+	include_once('../functions_html.php');
+	include_once('functions_fsgraph.php');
+	include_once('functions_gd.php');
+	include_once('functions_utils.php');
+}
+
+$graph_type = get_parameter('graph_type', '');
+
+switch($graph_type) {
+	case 'histogram': 
+				$width = get_parameter('width');
+				$height = get_parameter('height');
+				$font = get_parameter('font');
+				$data = json_decode(safe_output(get_parameter('data')), true);
+
+				$max = get_parameter('max');
+				$title = get_parameter('title');
+				$mode = get_parameter ('mode', 1);
+				gd_histogram ($width, $height, $mode, $data, $max, $font, $title);
+				break;
+	case 'progressbar':
+				$width = get_parameter('width');
+				$height = get_parameter('height');
+				$progress = get_parameter('progress');
+				
+				$out_of_lim_str = get_parameter('out_of_lim_str', false);
+				$out_of_lim_image = get_parameter('out_of_lim_image', false);
+
+				$font = get_parameter('font');
+				$title = get_parameter('title');
+				gd_progress_bar ($width, $height, $progress, $title, $font, $out_of_lim_str, $out_of_lim_image);
+				break;
+}
 
 function vbar_graph($flash_chart, $chart_data, $width, $height, $color = array(), $legend = array(), $xaxisname = "", $yaxisname = "") {
 	if($flash_chart) {
@@ -42,7 +82,7 @@ function threshold_graph($flash_chart, $chart_data, $width, $height) {
 	}
 }
 
-function area_graph($flash_chart, $chart_data, $width, $height, $color, $legend, $long_index, $no_data_image) {
+function area_graph($flash_chart, $chart_data, $width, $height, $color, $legend, $long_index, $no_data_image, $xaxisname = "", $yaxisname = "") {
 	if (empty($chart_data)) {
 		return '<img src="' . $no_data_image . '" />';
 	}
@@ -59,7 +99,9 @@ function area_graph($flash_chart, $chart_data, $width, $height, $color, $legend,
 		$graph['height'] = $height;
 		$graph['color'] = $color;
 		$graph['legend'] = $legend;
-		
+		$graph['xaxisname'] = $xaxisname;
+		$graph['yaxisname'] = $yaxisname;
+				
 		serialize_in_temp($graph, $id_graph);
 
 		return "<img src='include/graphs/functions_pchart.php?graph_type=area&id_graph=" . $id_graph . "'>";
@@ -91,7 +133,7 @@ function stacked_area_graph($flash_chart, $chart_data, $width, $height, $color,
 		serialize_in_temp($graph, $id_graph);
 		
 		return "<img src='http://127.0.0.1/pandora_console/include/graphs/functions_pchart.php?graph_type=stacked_area&id_graph=" . $id_graph . "' />";
-	}
+	}	
 }
 
 function stacked_line_graph($flash_chart, $chart_data, $width, $height, $color, $legend, $long_index, $no_data_image) {
diff --git a/pandora_console/include/graphs/functions_fsgraph.php b/pandora_console/include/graphs/functions_fsgraph.php
index 1117605c1c..69b9401fb2 100755
--- a/pandora_console/include/graphs/functions_fsgraph.php
+++ b/pandora_console/include/graphs/functions_fsgraph.php
@@ -1,9 +1,5 @@
 <?PHP
 
-
-// INTEGRIA IMS v2.0
-// http://www.integriaims.com
-// ===========================================================
 // Copyright (c) 2007-2008 Sancho Lerena, slerena@gmail.com
 // Copyright (c) 2008 Esteban Sanchez, estebans@artica.es
 // Copyright (c) 2007-2011 Artica, info@artica.es
@@ -333,7 +329,7 @@ function fs_line_graph($chart_data, $width, $height, $color, $legend, $long_inde
 
 function fs_area_graph($chart_data, $width, $height, $color, $legend, $long_index) {
 	global $config;
-	
+
 	$graph_type = "MSArea2D"; //MSLine is possible also
 	
 	$chart = new FusionCharts($graph_type, $width, $height);
@@ -350,7 +346,6 @@ function fs_area_graph($chart_data, $width, $height, $color, $legend, $long_inde
 	
 	$step = round($ndata/$xdata_display);
 	
-	
 	if(is_array(reset($chart_data))) {
 	 	$data2 = array();
 	 	$count = 0;
@@ -392,10 +387,9 @@ function fs_area_graph($chart_data, $width, $height, $color, $legend, $long_inde
 	 }
 	
 	 $a = 0;
-	 
+	 	
 	$empty = 1;
 	foreach ($data as $i => $value) {	
-		
 		$legend_text = '';
 		if (isset($legend[$i])) {
 			$legend_text = $legend[$i];
diff --git a/pandora_console/include/graphs/functions_gd.php b/pandora_console/include/graphs/functions_gd.php
new file mode 100755
index 0000000000..3de1904e9d
--- /dev/null
+++ b/pandora_console/include/graphs/functions_gd.php
@@ -0,0 +1,163 @@
+<?PHP
+
+// ===========================================================
+// Copyright (c) 2011-2011 Artica, info@artica.es
+
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// (LGPL) as published by the Free Software Foundation; version 2
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Lesser General Public License for more details.
+
+function gd_histogram ($width, $height, $mode, $data, $max_value, $font, $title) {	
+	// $title is for future use
+	$nvalues = count($data);
+	
+   	Header("Content-type: image/png");
+	$image = imagecreate($width,$height);
+	$white = ImageColorAllocate($image,255,255,255);
+	imagecolortransparent ($image, $white);
+
+	$black = ImageColorAllocate($image,0,0,0);
+	
+	$red = ImageColorAllocate($image,255,60,75);
+	$blue = ImageColorAllocate($image,75,60,255);
+	$green = ImageColorAllocate($image,0,120,0);
+	$magent = ImageColorAllocate($image,179,0,255);
+	$yellow = ImageColorAllocate($image,204,255,0);
+
+	$colors = array($blue, $red, $green, $magent, $yellow);
+	
+	$margin_up = 2;
+
+	if ($mode != 2) {
+		$size_per = ($max_value / ($width-40));
+	} else {
+		$size_per = ($max_value / ($width));
+	}
+	
+	if ($mode == 0) // with strips 
+		$rectangle_height = ($height - 10 - 2 - $margin_up ) / $nvalues;
+	else
+		$rectangle_height = ($height - 2 - $margin_up ) / $nvalues;
+
+	if ($size_per == 0)
+		$size_per = 1;
+		
+	if ($mode != 2) {
+		$leftmargin = 40;
+	}
+	else {
+		$leftmargin = 1;
+	}
+	
+	$c = 0;
+	foreach($data as $label => $value) {	
+		ImageFilledRectangle($image, $leftmargin, $margin_up, ($value/$size_per)+$leftmargin, $margin_up+$rectangle_height -1 , $colors[$c]);
+		if ($mode != 2) {
+			ImageTTFText($image, 7, 0, 0, $margin_up+8, $black, $font, $label);
+		}
+		
+		$margin_up += $rectangle_height + 1;
+
+		$c++;
+		if(!isset($colors[$c])) {
+			$c = 0;
+		}
+	}
+	
+	if ($mode == 0) { // With strips
+		// Draw limits
+		$risk_low =  ($config_risk_low / $size_per) + 40;
+		$risk_med =  ($config_risk_med / $size_per) + 40;
+		$risk_high =  ($config_risk_high / $size_per) + 40;
+		imageline($image, $risk_low, 0, $risk_low , $height, $grey);
+		imageline($image, $risk_med , 0, $risk_med  , $height, $grey);
+		imageline($image, $risk_high, 0, $risk_high , $height, $grey);
+		ImageTTFText($image, 7, 0, $risk_low-20, $height, $grey, $font, "Low");
+		ImageTTFText($image, 7, 0, $risk_med-20, $height, $grey, $font, "Med.");
+		ImageTTFText($image, 7, 0, $risk_high-25, $height, $grey, $font, "High");
+	}
+	imagePNG($image);
+	imagedestroy($image);
+}
+
+// ***************************************************************************
+// Draw a dynamic progress bar using GDlib directly
+// ***************************************************************************
+
+function gd_progress_bar ($width, $height, $progress, $title, $font, $out_of_lim_str, $out_of_lim_image) {
+	if($out_of_lim_str === false) {
+		$out_of_lim_str = "Out of limits";
+	}
+
+	if($out_of_lim_image === false) {
+		$out_of_lim_image = "images_graphs/outlimits.png";
+	}
+	
+	// Copied from the PHP manual:
+	// http://us3.php.net/manual/en/function.imagefilledrectangle.php
+	// With some adds from sdonie at lgc dot com
+	// Get from official documentation PHP.net website. Thanks guys :-)
+	function drawRating($rating, $width, $height, $font, $out_of_lim_str) {
+		global $config;
+		global $REMOTE_ADDR;
+		
+		if ($width == 0) {
+			$width = 150;
+		}
+		if ($height == 0) {
+			$height = 20;
+		}
+
+		//$rating = $_GET['rating'];
+		$ratingbar = (($rating/100)*$width)-2;
+
+		$image = imagecreate($width,$height);
+		
+
+		//colors
+		$back = ImageColorAllocate($image,255,255,255);
+		imagecolortransparent ($image, $back);
+		$border = ImageColorAllocate($image,174,174,174);
+		$text = ImageColorAllocate($image,74,74,74);
+		$red = ImageColorAllocate($image,255,60,75);
+		$green = ImageColorAllocate($image,50,205,50);
+		$fill = ImageColorAllocate($image,44,81,120);
+
+		ImageFilledRectangle($image,0,0,$width-1,$height-1,$back);
+		if ($rating > 100)
+			ImageFilledRectangle($image,1,1,$ratingbar,$height-1,$red);
+		elseif ($rating == 100)
+			ImageFilledRectangle($image,1,1,$ratingbar,$height-1,$green);
+		else
+			ImageFilledRectangle($image,1,1,$ratingbar,$height-1,$fill);
+			
+		ImageRectangle($image,0,0,$width-1,$height-1,$border);
+		if ($rating > 50)
+			if ($rating > 100)
+				ImageTTFText($image, 8, 0, ($width/4), ($height/2)+($height/5), $back, $font, $out_of_lim_str);
+			else
+				ImageTTFText($image, 8, 0, ($width/2)-($width/10), ($height/2)+($height/5), $back, $font, $rating."%");
+		else
+			ImageTTFText($image, 8, 0, ($width/2)-($width/10), ($height/2)+($height/5), $text, $font, $rating."%");
+		imagePNG($image);
+		imagedestroy($image);
+   	}
+
+   	Header("Content-type: image/png");
+	if ($progress > 100 || $progress < 0) {
+		// HACK: This report a static image... will increase render in about 200% :-) useful for
+		// high number of realtime statusbar images creation (in main all agents view, for example
+		$imgPng = imageCreateFromPng($out_of_lim_image);
+		imageAlphaBlending($imgPng, true);
+		imageSaveAlpha($imgPng, true);
+		imagePng($imgPng); 
+   	} else 
+   		drawRating($progress, $width, $height, $font, $out_of_lim_str);
+}
+
+?>
diff --git a/pandora_console/include/graphs/images_graphs/outlimits.png b/pandora_console/include/graphs/images_graphs/outlimits.png
new file mode 100755
index 0000000000000000000000000000000000000000..5083a4af36283eeaff273e5174b5fdbf6707f0d5
GIT binary patch
literal 321
zcmV-H0lxl;P)<h;3K|Lk000e1NJLTq003G5000sM0{{R3DUH-H0000aP)t-s|Ns90
z0093yODs{A|5RcB&eH$p=>MIi|AmhKwY&dpc>jKgrZc~M0002kNkl<ZD3N0jBn2=C
zDG?78DNwEAM1pFSu&^Q^r3L0hDrwD{1Y)ez!me7aNhKUexq&%JN?Mb^R;jpQSKSI!
zxm>Ag!X%}(bWKj6*(H_fr6J2FOqv#jMRhsQ_?=3#+?2FZR2Kowo;54Qp($deo5rM-
z_*APmX%vA~2dODltaQ`LaKhn|l_1rcO&XJsR4Xmd#Oh0>@RdqgZb}-HG@FoAYcwff
z3&GTBMQ&506pEBWLzNJ!6{<2Lv8Yy3S)!!01QbUo(WK(!h0War!C+ENQf>eM96F6<
T-58sF00000NkvXXu0mjfVSI+5

literal 0
HcmV?d00001