diff --git a/pandora_console/include/functions_custom_graphs.php b/pandora_console/include/functions_custom_graphs.php
index a4ac261cb0..55dfee8146 100644
--- a/pandora_console/include/functions_custom_graphs.php
+++ b/pandora_console/include/functions_custom_graphs.php
@@ -198,11 +198,11 @@ function custom_graphs_print($id_graph, $height, $width, $period,
foreach ($sources as $source) {
array_push ($modules, $source['id_agent_module']);
array_push ($weights, $source['weight']);
- if ($source['label'] != '')
- $labels[$source['id_agent_module']] = $source['label'];
+ $labels[$source['id_agent_module']] = $source['label'];
}
}
-
+
+
if ($sources === false) {
if ($return){
diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php
index 45b1be29c2..15088eb3ea 100644
--- a/pandora_console/include/functions_graph.php
+++ b/pandora_console/include/functions_graph.php
@@ -874,7 +874,7 @@ function grafico_modulo_sparse ($agent_module_id, $period, $show_events,
area_graph($flash_chart, $chart, $width, $height/2, $color,
$legend, $long_index,
ui_get_full_url("images/image_problem.opaque.png", false, false, false),
- $title, $unit, $homeurl, $water_mark, $config['fontpath'],
+ "", $unit, $homeurl, $water_mark, $config['fontpath'],
$config['font_size'], $unit, $ttl, $series_type,
$chart_extra_data, $warning_min, $critical_min,
$adapt_key, false, $series_suffix_str, $menu,
@@ -883,7 +883,7 @@ function grafico_modulo_sparse ($agent_module_id, $period, $show_events,
area_graph($flash_chart, $chart_prev, $width, $height/2,
$color_prev, $legend_prev, $long_index_prev,
ui_get_full_url("images/image_problem.opaque.png", false, false, false),
- $title, $unit, $homeurl, $water_mark, $config['fontpath'],
+ "", $unit, $homeurl, $water_mark, $config['fontpath'],
$config['font_size'], $unit, $ttl, $series_type_prev,
$chart_extra_data, $warning_min, $critical_min,
$adapt_key, false, $series_suffix_str, $menu,
@@ -895,7 +895,7 @@ function grafico_modulo_sparse ($agent_module_id, $period, $show_events,
area_graph($flash_chart, $chart, $width, $height, $color,
$legend, $long_index,
ui_get_full_url("images/image_problem.opaque.png", false, false, false),
- $title, $unit, $homeurl, $water_mark, $config['fontpath'],
+ "", $unit, $homeurl, $water_mark, $config['fontpath'],
$config['font_size'], $unit, $ttl, $series_type,
$chart_extra_data, $warning_min, $critical_min,
$adapt_key, false, $series_suffix_str, $menu,
@@ -1016,7 +1016,7 @@ function graphic_combined_module ($module_list, $weight_list, $period,
if ($date == 0)
$date = get_system_time();
$datelimit = $date - $period;
- $search_in_history_db = db_search_in_history_db($datelimit);
+
$resolution = $config['graph_res'] * 50; //Number of points of the graph
$interval = (int) ($period / $resolution);
@@ -1086,16 +1086,36 @@ function graphic_combined_module ($module_list, $weight_list, $period,
// Calculate data for each module
for ($i = 0; $i < $module_number; $i++) {
- // If its a projection graph, first module will be data and second will be the projection
+ $automatic_custom_graph_meta = false;
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[$i])) {
+ $server = metaconsole_get_connection_by_id ($module_list[$i]['server']);
+ metaconsole_connect($server);
+ $automatic_custom_graph_meta = true;
+ }
+ }
+
+ $search_in_history_db = db_search_in_history_db($datelimit);
+
+ // If its a projection graph,
+ // first module will be data and second will be the projection
if ($projection != false && $i != 0) {
- $agent_module_id = $module_list[0];
+ if ($automatic_custom_graph_meta)
+ $agent_module_id = $module_list[0]['module'];
+ else
+ $agent_module_id = $module_list[0];
$id_module_type = modules_get_agentmodule_type ($agent_module_id);
$module_type = modules_get_moduletype_name ($id_module_type);
$uncompressed_module = is_module_uncompressed ($module_type);
}
else {
- $agent_module_id = $module_list[$i];
+ if ($automatic_custom_graph_meta)
+ $agent_module_id = $module_list[$i]['module'];
+ else
+ $agent_module_id = $module_list[$i];
+
$id_module_type = modules_get_agentmodule_type ($agent_module_id);
$module_type = modules_get_moduletype_name ($id_module_type);
@@ -1384,30 +1404,38 @@ function graphic_combined_module ($module_list, $weight_list, $period,
//unset($graph_values[$i]);
//$graph_values[$i] = $graph_values[$i];
+
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[0])) {
+ metaconsole_restore_db();
+ }
+ }
}
$temp = array();
- $user = users_get_user_by_id($config['id_user']);
- $user_flash_charts = $user['flash_chart'];
-
- if ($user_flash_charts == 1)
- $flash_charts = true;
- elseif($user_flash_charts == -1)
- $flash_charts = $config['flash_charts'];
- elseif($user_flash_charts == 0)
- $flash_charts = false;
-
- if ($only_image) {
- $flash_charts = false;
- }
-
- if ($flash_charts === false && $stacked == CUSTOM_GRAPH_GAUGE)
- $stacked = CUSTOM_GRAPH_BULLET_CHART;
switch ($stacked) {
case CUSTOM_GRAPH_BULLET_CHART:
$datelimit = $date - $period;
- foreach ($module_list as $module) {
+ foreach ($module_list as $module_item) {
+ $automatic_custom_graph_meta = false;
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[$i])) {
+ $server = metaconsole_get_connection_by_id ($module_item['server']);
+ metaconsole_connect($server);
+ $automatic_custom_graph_meta = true;
+ }
+ }
+
+ if ($automatic_custom_graph_meta)
+ $module = $module_item['module'];
+ else
+ $module = $module_item;
+
+ $search_in_history_db = db_search_in_history_db($datelimit);
+
$temp[$module] = modules_get_agentmodule($module);
$query_last_value = sprintf('
SELECT datos
@@ -1428,24 +1456,44 @@ function graphic_combined_module ($module_list, $weight_list, $period,
$value = false;
}
-
- if ( !empty($labels) && isset($labels[$module]) )
- $label = io_safe_input($labels[$module]);
- else
- $label = agents_get_name($temp[$module]['id_agente']) . ': ' . $temp[$module]['nombre'];
-
- $temp[$module]['label'] = $label;
+ if ($labels[$module] != '')
+ $temp[$module]['label'] = $labels[$module];
$temp[$module]['value'] = $value;
$temp[$module]['max'] = reporting_get_agentmodule_data_max($module,$period,$date);
$temp[$module]['min'] = reporting_get_agentmodule_data_min($module,$period,$date);
+
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[0])) {
+ metaconsole_restore_db();
+ }
+ }
+
}
+
break;
case CUSTOM_GRAPH_HBARS:
case CUSTOM_GRAPH_VBARS:
$datelimit = $date - $period;
$label = '';
- foreach ($module_list as $module) {
+ foreach ($module_list as $module_item) {
+ $automatic_custom_graph_meta = false;
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[$i])) {
+ $server = metaconsole_get_connection_by_id ($module_item['server']);
+ metaconsole_connect($server);
+ $automatic_custom_graph_meta = true;
+ }
+ }
+
+ if ($automatic_custom_graph_meta)
+ $module = $module_item['module'];
+ else
+ $module = $module_item;
+
+
$module_data = modules_get_agentmodule($module);
$query_last_value = sprintf('
SELECT datos
@@ -1459,26 +1507,49 @@ function graphic_combined_module ($module_list, $weight_list, $period,
$agent_name = io_safe_output(
modules_get_agentmodule_agent_name ($module));
- if (!empty($labels) && isset($labels[$module]) )
+ if ($labels[$module] != '')
$label = $labels[$module];
else
$label = $agent_name . " - " .$module_data['nombre'];
$temp[$label]['g'] = round($temp_data,4);
+
+
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[0])) {
+ metaconsole_restore_db();
+ }
+ }
+
}
break;
case CUSTOM_GRAPH_PIE:
$datelimit = $date - $period;
$total_modules = 0;
- foreach ($module_list as $module) {
+ foreach ($module_list as $module_item) {
+ $automatic_custom_graph_meta = false;
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[$i])) {
+ $server = metaconsole_get_connection_by_id ($module_item['server']);
+ metaconsole_connect($server);
+ $automatic_custom_graph_meta = true;
+ }
+ }
+
+ if ($automatic_custom_graph_meta)
+ $module = $module_item['module'];
+ else
+ $module = $module_item;
+
$data_module = modules_get_agentmodule($module);
$query_last_value = sprintf('
SELECT datos
FROM tagente_datos
WHERE id_agente_modulo = %d
- AND utimestamp > %d
AND utimestamp < %d
ORDER BY utimestamp DESC',
- $module, $datelimit, $date);
+ $module, $date);
$temp_data = db_get_value_sql($query_last_value);
if ( $temp_data ){
if (is_numeric($temp_data))
@@ -1491,21 +1562,45 @@ function graphic_combined_module ($module_list, $weight_list, $period,
}
$total_modules += $value;
- if ( !empty($labels) && isset($labels[$module]) )
- $label = io_safe_input($labels[$module]);
- else {
- $agent_name = agents_get_name($data_module['id_agente']);
- $label = $agent_name . ": " . $data_module['nombre'];
- }
+ if ( !isset($labels[$module]) )
+ $label = $labels[$module];
+ else
+ $label = $data_module['nombre'];
- $temp[$label] = array('value'=>$value,
- 'unit'=>$data_module['unit']);
+ $label = io_safe_output($label);
+ $temp[$label] = array(
+ 'value'=>$value,
+ 'unit'=>$data_module['unit']);
+
+
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[0])) {
+ metaconsole_restore_db();
+ }
+ }
}
$temp['total_modules'] = $total_modules;
break;
case CUSTOM_GRAPH_GAUGE:
$datelimit = $date - $period;
- foreach ($module_list as $module) {
+ $i = 0;
+ foreach ($module_list as $module_item) {
+ $automatic_custom_graph_meta = false;
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[$i])) {
+ $server = metaconsole_get_connection_by_id ($module_item['server']);
+ metaconsole_connect($server);
+ $automatic_custom_graph_meta = true;
+ }
+ }
+
+ if ($automatic_custom_graph_meta)
+ $module = $module_item['module'];
+ else
+ $module = $module_item;
+
$temp[$module] = modules_get_agentmodule($module);
$query_last_value = sprintf('
SELECT datos
@@ -1543,6 +1638,14 @@ function graphic_combined_module ($module_list, $weight_list, $period,
$temp[$module]['max'] = ($max == 0 ) ? 100 : $max;
}
$temp[$module]['gauge'] = uniqid('gauge_');
+
+ if ($config['metaconsole']) {
+ // Automatic custom graph from the report template in metaconsole
+ if (is_array($module_list[0])) {
+ metaconsole_restore_db();
+ }
+ }
+ $i++;
}
break;
default:
@@ -1689,9 +1792,11 @@ function graphic_combined_module ($module_list, $weight_list, $period,
"", $ttl, $homeurl, $background_color);
break;
case CUSTOM_GRAPH_PIE:
- return ring_graph($flash_charts, $graph_values, $width, $height,
- $others_str, $homeurl, $water_mark, $config['fontpath'],
- ($config['font_size']+1), 1, false, $color, false);
+ return flot_custom_pie_chart($flash_charts, $graph_values,
+ $width, $height, $color, $module_name_list, $long_index,
+ ui_get_full_url("images/image_problem.opaque.png", false, false, false),
+ "", "", $water_mark, $config['fontpath'], ($config['font_size']+1),
+ "", $ttl, $homeurl, $background_color,'other');
break;
}
}
diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php
index d6c0498311..0090135b7d 100644
--- a/pandora_console/include/functions_reporting.php
+++ b/pandora_console/include/functions_reporting.php
@@ -4351,7 +4351,7 @@ function reporting_custom_graph($report, $content, $type = 'dinamic',
$weights,
$content['period'],
$width, $height,
- __('Combined%20Sample%20Graph'),
+ 'Combined%20Sample%20Graph',
'',
0,
0,
diff --git a/pandora_console/include/graphs/fgraph.php b/pandora_console/include/graphs/fgraph.php
index ae6800aca9..e8f4b3d1cf 100644
--- a/pandora_console/include/graphs/fgraph.php
+++ b/pandora_console/include/graphs/fgraph.php
@@ -427,49 +427,18 @@ function stacked_bullet_chart($flash_chart, $chart_data, $width, $height,
if (empty($chart_data)) {
return '';
}
- if ($flash_chart) {
- return d3_bullet_chart(
- $chart_data,
- $width,
- $height,
- $color,
- $legend,
- $homeurl,
- $unit,
- $font,
- $font_size
- );
- }
- else {
- $legend = array();
- $new_data = array();
- foreach($chart_data as $key => $data) {
- $temp[] = ($data['min'] != false) ? $data['min'] : 0;
- $temp[] = ($data['value'] != false) ? $data['value'] : 0;
- $temp[] = ($data['max'] != false) ? $data['max'] : 0;
-
- $legend[] = $data['label'];
- array_push($new_data, $temp);
- $temp = array();
- }
- $graph = array();
- $graph['data'] = $new_data;
- $graph['width'] = $width;
- $graph['height'] = $height;
- $graph['color'] = $color;
- $graph['legend'] = $legend;
- $graph['xaxisname'] = $xaxisname;
- $graph['yaxisname'] = $yaxisname;
- $graph['water_mark'] = $water_mark_file;
- $graph['font'] = $font;
- $graph['font_size'] = $font_size;
- $graph['backgroundColor'] = $backgroundColor;
-
- $id_graph = serialize_in_temp($graph, null, $ttl);
-
- return "";
- }
+ return d3_bullet_chart(
+ $chart_data,
+ $width,
+ $height,
+ $color,
+ $legend,
+ $homeurl,
+ $unit,
+ $font,
+ $font_size
+ );
}
function stacked_gauge($flash_chart, $chart_data, $width, $height,
@@ -716,79 +685,4 @@ function pie_graph($graph_type, $flash_chart, $chart_data, $width,
}
}
-function ring_graph($flash_chart, $chart_data, $width,
- $height, $others_str = "other", $homedir="", $water_mark = "",
- $font = '', $font_size = '', $ttl = 1, $legend_position = false,
- $colors = '', $hide_labels = false) {
-
- if (empty($chart_data)) {
- return graph_nodata_image($width, $height, 'pie');
- }
-
- setup_watermark($water_mark, $water_mark_file, $water_mark_url);
-
- // This library allows only 8 colors
- $max_values = 18;
-
-
- if ($flash_chart) {
- return flot_custom_pie_chart ($flash_chart, $chart_data,
- $width, $height, $colors, $module_name_list, $long_index,
- $no_data, false, '', $water_mark, $font, $font_size,
- $unit, $ttl, $homeurl, $background_color, $legend_position);
- }
- else {
- $total_modules = $chart_data['total_modules'];
- unset($chart_data['total_modules']);
-
-
- //Remove the html_entities
- $n = 0;
- $temp = array();
- $coloretes = array();
- foreach ($chart_data as $key => $value) {
- $temp[io_safe_output($key)] = $value['value'];
- $legend[] = io_safe_output($key) .": " . $value['value'] . " " .$value['unit'];
- //~ $coloretes[$n] = $colors[$n]['color'];
- //~ $n++;
- }
- $chart_data = $temp;
-
- $chart_data_trunc = array();
- $coloretes = array();
- $n = 1;
- foreach ($chart_data as $key => $value) {
- if ($n < $max_values) {
-
- $chart_data_trunc[$key] = $value;
- }
- //~ else {
- //~ if (!isset($chart_data_trunc[$others_str])) {
- //~ $chart_data_trunc[$others_str] = 0;
- //~ }
- //~ $chart_data_trunc[$others_str] += $value;
- //~ }
- $n++;
- }
- $chart_data = $chart_data_trunc;
-
- //TODO SET THE LEGEND POSITION
-
- $graph = array();
- $graph['data'] = $chart_data;
- $graph['width'] = $width;
- $graph['height'] = $height;
- $graph['water_mark'] = $water_mark_file;
- $graph['font'] = $font;
- $graph['font_size'] = $font_size;
- $graph['legend_position'] = $legend_position;
- $graph['legend'] = $legend;
-
- $id_graph = serialize_in_temp($graph, null, $ttl);
-
- return "";
-
- }
-}
-
?>
diff --git a/pandora_console/include/graphs/functions_pchart.php b/pandora_console/include/graphs/functions_pchart.php
index 13e933bb0a..f8568f30c5 100644
--- a/pandora_console/include/graphs/functions_pchart.php
+++ b/pandora_console/include/graphs/functions_pchart.php
@@ -79,7 +79,7 @@ if (isset($graph['color'])) {
if (isset($graph['legend'])) {
$legend = $graph['legend'];
}
-if (isset($graph['xaxisname'])) {
+if (isset($graph['xaxisname'])) {
$xaxisname = $graph['xaxisname'];
}
if (isset($graph['yaxisname'])) {
@@ -188,29 +188,6 @@ switch ($graph_type) {
}
$colors = $fine_colors;
- break;
- case 'bullet_chart':
- $anterior = 0;
- foreach ($data as $i => $values) {
- foreach ($values as $key => $val) {
- switch ($key) {
- case 0:
- $name = __("Max");
- break;
- case 1:
- $name = __("Actual");
- break;
- case 2:
- $name = __("Min");
- break;
- }
- $data_values[$name][] = ($val - $anterior);
- $anterior += (($val - $anterior)<0) ? 0 : ($val - $anterior);
- }
- $anterior = 0;
- $data_keys[] = $i;
-
- }
break;
case 'progress':
case 'area':
@@ -239,8 +216,6 @@ switch ($graph_type) {
case 'radar':
case 'pie3d':
case 'pie2d':
- case 'ring3d':
-
break;
}
@@ -250,8 +225,6 @@ switch($graph_type) {
case 'radar':
case 'pie3d':
case 'pie2d':
- case 'ring3d':
- case 'bullet_chart':
break;
default:
if (!is_array(reset($data_values))) {
@@ -309,14 +282,6 @@ foreach ($colors as $i => $color) {
ob_get_clean(); //HACK TO EAT ANYTHING THAT CORRUPS THE IMAGE FILE
switch ($graph_type) {
- case 'ring3d':
- pch_ring_graph($graph_type, array_values($data), $legend,
- $width, $height, $font, $water_mark, $font_size, $legend_position, $colors);
- break;
- case 'bullet_chart':
- pch_bullet_chart($graph_type, $data_values, $legend,
- $width, $height, $font, $water_mark, $font_size, $legend_position, $colors);
- break;
case 'pie3d':
case 'pie2d':
pch_pie_graph($graph_type, array_values($data), array_keys($data),
@@ -489,74 +454,6 @@ function pch_pie_graph ($graph_type, $data_values, $legend_values, $width,
$myPicture->stroke();
}
-function pch_ring_graph ($graph_type, $data_values, $legend_values, $width,
- $height, $font, $water_mark, $font_size, $legend_position, $colors) {
- /* CAT:Ring charts */
-
- /* Create and populate the pData object */
- $MyData = new pData();
- $MyData->addPoints($data_values,"ScoreA");
- $MyData->setSerieDescription("ScoreA","Application A");
-
- /* Define the absissa serie */
- $MyData->addPoints($legend_values,"Labels");
- $MyData->setAbscissa("Labels");
-
- /* Create the pChart object */
- $myPicture = new pImage($width,$height,$MyData,TRUE);
-
- /* Set the default font properties */
- $myPicture->setFontProperties(array("FontName"=>$font,"FontSize"=>$font_size,"R"=>80,"G"=>80,"B"=>80));
-
- $water_mark_height = 0;
- $water_mark_width = 0;
- if (!empty($water_mark)) {
- if (is_array($water_mark)) {
- if (!empty($water_mark['file'])) {
- $water_mark = $water_mark['file'];
- }
- }
-
- $size_water_mark = getimagesize($water_mark);
- $water_mark_height = $size_water_mark[1];
- $water_mark_width = $size_water_mark[0];
-
- $myPicture->drawFromPNG(($width - $water_mark_width),
- ($height - $water_mark_height) - 50, $water_mark);
- }
-
-
- /* Create the pPie object */
- $PieChart = new pPie($myPicture,$MyData);
- foreach ($legend_values as $key => $value) {
- if (isset($colors[$value])) {
- $PieChart->setSliceColor($key, hex_2_rgb($colors[$value]));
- }
- }
-
- /* Draw an AA pie chart */
- $PieChart->draw3DRing($width/3, $height/2,array("InnerRadius"=>100, "InnerRadius"=>10,"DrawLabels"=>TRUE,"LabelStacked"=>FALSE,"Precision"=>2,"Border"=>FALSE,"WriteValues"=>TRUE,"ValueR"=>0,"ValueG"=>0,"ValueB"=>0,"ValuePadding" => 15));
-
-
- /* Write down the legend next to the 2nd chart*/
- //Calculate the bottom margin from the size of string in each index
- $max_chars = graph_get_max_index($legend_values);
-
- if ($legend_position != 'hidden') {
- // This is a hardcore adjustment to match most of the graphs, please don't alter
- $legend_with_aprox = 150 + (4.5 * $max_chars);
-
- $PieChart->drawPieLegend($width - $legend_with_aprox, 10, array("R"=>255,"G"=>255,"B"=>255, "BoxSize"=>10));
- }
-
- /* Enable shadow computing */
- $myPicture->setShadow(TRUE,
- array("X" => 3, "Y" => 3, "R" => 0, "G" => 0, "B" => 0, "Alpha" => 10));
-
- /* Render the picture */
- $myPicture->stroke();
-}
-
function pch_kiviat_graph ($graph_type, $data_values, $legend_values, $width,
$height, $font, $font_size) {
/* CAT:Radar/Polar charts */
@@ -787,7 +684,7 @@ function pch_vertical_graph ($graph_type, $index, $data, $width, $height,
"BorderG" => $rgb_color[$i]['border']["G"],
"BorderB" => $rgb_color[$i]['border']["B"],
"Alpha" => $rgb_color[$i]['alpha']));
-
+
/*$palette_color = array();
if (isset($rgb_color[$i]['color'])) {
$palette_color["R"] = $rgb_color[$i]['color']["R"];
@@ -1100,60 +997,7 @@ function pch_threshold_graph ($graph_type, $index, $data, $width, $height, $font
$myPicture->drawLegend(643,210,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));
}
- /* Render the picture */
- $myPicture->stroke();
-}
-
-function pch_bullet_chart($graph_type, $data, $legend,
- $width, $height, $font, $water_mark, $font_size, $legend_position, $colors) {
-
-
- /* Create and populate the pData object */
- $MyData = new pData();
-
- html_debug($data,true);
- foreach ($data as $key => $dat) {
- $MyData->addPoints($dat, $key);
- }
- $MyData->setPalette(__("Min"),array("R"=>55,"G"=>91,"B"=>127));
- $MyData->setPalette(__("Actual"),array("R"=>70,"G"=>130,"B"=>180));
- $MyData->setPalette(__("Max"),array("R"=>221,"G"=>221,"B"=>221));
-
- $MyData->addPoints($legend,"Labels");
-
-
- $MyData->setAbscissa("Labels");
- $MyData->setSerieDescription("Labels", __("Agents/Modules"));
-
- $height_t = ($height * count($data) ) + 40;
- $width_t = ($width + ( 200 + $max_chars));
- $max_chars = graph_get_max_index($legend_values);
-
- /* Create the pChart object */
- $myPicture = new pImage($width_t, $height_t,$MyData);
-
- /* Write the picture title */
- $myPicture->setFontProperties(array("FontName"=>$font,"FontSize"=>$font_size));
-
- /* Write the chart title */
- $myPicture->setFontProperties(array("FontName"=>$font,"FontSize"=>$font_size));
-
- $height_t - 10;
- /* Draw the scale and chart */
- $myPicture->setGraphArea(220,20,($width + 80), $height_t);
- $myPicture->drawScale(array("Pos"=>SCALE_POS_TOPBOTTOM, "Mode"=>SCALE_MODE_ADDALL_START0,
- "LabelingMethod"=>LABELING_DIFFERENT, "GridR"=>255, "GridG"=>255,
- "GridB"=>255, "GridAlpha"=>50, "TickR"=>0,"TickG"=>0, "TickB"=>0,
- "TickAlpha"=>50, "LabelRotation"=>0, "CycleBackground"=>1,
- "DrawXLines"=>1, "DrawSubTicks"=>1, "SubTickR"=>255,
- "SubTickG"=>0, "SubTickB"=>0, "SubTickAlpha"=>50,
- "DrawYLines"=>ALL));
- $myPicture->drawStackedBarChart(array("MODE"=>SCALE_MODE_START0));
-
- /* Write the chart legend */
- //$myPicture->drawLegend(0,205,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));
-
/* Render the picture */
$myPicture->stroke();
}
-?>
\ No newline at end of file
+?>
diff --git a/pandora_console/include/graphs/pChart/pData.class.php b/pandora_console/include/graphs/pChart/pData.class.php
index 6fcf4557b1..25064267f5 100755
--- a/pandora_console/include/graphs/pChart/pData.class.php
+++ b/pandora_console/include/graphs/pChart/pData.class.php
@@ -151,21 +151,10 @@
function setAbscissa($Serie)
{ if (isset($this->Data["Series"][$Serie])) { $this->Data["Abscissa"] = $Serie; } }
- function setAbsicssaPosition($Position = AXIS_POSITION_BOTTOM)
- { $this->Data["AbsicssaPosition"] = $Position; }
-
- /* Set the name of the abscissa axis */
- function setAbscissaName($Name)
- { $this->Data["AbscissaName"] = $Name; }
-
/* Create a scatter group specifyin X and Y data series */
function setScatterSerie($SerieX,$SerieY,$ID=0)
{ if (isset($this->Data["Series"][$SerieX]) && isset($this->Data["Series"][$SerieY]) ) { $this->initScatterSerie($ID); $this->Data["ScatterSeries"][$ID]["X"] = $SerieX; $this->Data["ScatterSeries"][$ID]["Y"] = $SerieY; } }
- /* Set the shape of a given sctatter serie */
- function setScatterSerieShape($ID,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
- { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Shape"] = $Shape; } }
-
/* Set the description of a given scatter serie */
function setScatterSerieDescription($ID,$Description="My serie")
{ if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Description"] = $Description; } }
@@ -562,63 +551,10 @@
}
}
- /* Create a dataset based on a formula */
- function createFunctionSerie($SerieName,$Formula="",$Options="")
- {
- $MinX = isset($Options["MinX"]) ? $Options["MinX"] : -10;
- $MaxX = isset($Options["MaxX"]) ? $Options["MaxX"] : 10;
- $XStep = isset($Options["XStep"]) ? $Options["XStep"] : 1;
- $AutoDescription = isset($Options["AutoDescription"]) ? $Options["AutoDescription"] : FALSE;
- $RecordAbscissa = isset($Options["RecordAbscissa"]) ? $Options["RecordAbscissa"] : FALSE;
- $AbscissaSerie = isset($Options["AbscissaSerie"]) ? $Options["AbscissaSerie"] : "Abscissa";
-
- if ( $Formula == "" ) { return(0); }
-
- $Result = ""; $Abscissa = "";
- for($i=$MinX; $i<=$MaxX; $i=$i+$XStep)
- {
- $Expression = "\$return = '!'.(".str_replace("z",$i,$Formula).");";
- if ( @eval($Expression) === FALSE ) { $return = VOID; }
- if ( $return == "!" ) { $return = VOID; } else { $return = $this->right($return,strlen($return)-1); }
- if ( $return == "NAN" ) { $return = VOID; }
- if ( $return == "INF" ) { $return = VOID; }
- if ( $return == "-INF" ) { $return = VOID; }
-
- $Abscissa[] = $i;
- $Result[] = $return;
- }
-
- $this->addPoints($Result,$SerieName);
- if ( $AutoDescription ) { $this->setSerieDescription($SerieName,$Formula); }
- if ( $RecordAbscissa ) { $this->addPoints($Abscissa,$AbscissaSerie); }
- }
-
- function negateValues($Series)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $SerieName)
- {
- if (isset($this->Data["Series"][$SerieName]))
- {
- $Data = "";
- foreach($this->Data["Series"][$SerieName]["Data"] as $Key => $Value)
- { if ( $Value == VOID ) { $Data[] = VOID; } else { $Data[] = -$Value; } }
- $this->Data["Series"][$SerieName]["Data"] = $Data;
-
- $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
- $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
- }
- }
- }
-
/* Return the data & configuration of the series */
function getData()
{ return($this->Data); }
- /* Save a palette element */
- function savePalette($ID,$Color)
- { $this->Palette[$ID] = $Color; }
-
/* Return the palette of the series */
function getPalette()
{ return($this->Palette); }
diff --git a/pandora_console/include/graphs/pChart/pPie.class.php b/pandora_console/include/graphs/pChart/pPie.class.php
index b84ab82328..661993ad5d 100755
--- a/pandora_console/include/graphs/pChart/pPie.class.php
+++ b/pandora_console/include/graphs/pChart/pPie.class.php
@@ -25,15 +25,11 @@
define("PIE_VALUE_NATURAL" , 140020);
define("PIE_VALUE_PERCENTAGE" , 140021);
- define("PIE_VALUE_INSIDE" , 140030);
- define("PIE_VALUE_OUTSIDE" , 140031);
-
/* pPie class definition */
class pPie
{
var $pChartObject;
var $pDataObject;
- var $LabelPos = "" ;
/* Class creator */
function pPie($Object,$pDataObject)
@@ -50,7 +46,6 @@
{
/* Rendering layout */
$Radius = isset($Format["Radius"]) ? $Format["Radius"] : 60;
- $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0;
$DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 0;
$DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 0;
$SecondPass = isset($Format["SecondPass"]) ? $Format["SecondPass"] : TRUE;
@@ -60,21 +55,11 @@
$BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
$Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
$DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
- $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
$LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
$LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
$LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
$LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
$LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL;
- $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 15;
- $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
- $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
- $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
- $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
- $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
/* Data Processing */
$Data = $this->pDataObject->getData();
@@ -91,9 +76,6 @@
/* Do we have data to compute? */
if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
- /* Remove unused data */
- list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
-
/* Compute the pie sum */
$SerieSum = $this->pDataObject->getSum($DataSerie);
@@ -169,7 +151,6 @@
}
$this->pChartObject->drawPolygon($Plots,$Settings);
- if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); }
if ( $DrawLabels && !$Shadow && !$SecondPass )
{
@@ -751,707 +732,5 @@
$this->pDataObject->Palette[$SliceID]["B"] = $B;
$this->pDataObject->Palette[$SliceID]["Alpha"] = $Alpha;
}
-
- /* Internally used compute the label positions */
- function writePieLabel($X,$Y,$Label,$Angle,$Settings,$Stacked,$Xc=0,$Yc=0,$Radius=0,$Reversed=FALSE)
- {
- $LabelOffset = 30;
- $FontName = $this->pChartObject->FontName;
- $FontSize = $this->pChartObject->FontSize;
-
- if ( !$Stacked )
- {
- $Settings["Angle"] = 360-$Angle;
- $Settings["Length"] = 25;
- $Settings["Size"] = 8;
-
- $this->pChartObject->drawArrowLabel($X,$Y," ".$Label." ",$Settings);
- }
- else
- {
- $X2 = cos(deg2rad($Angle-90))*20+$X;
- $Y2 = sin(deg2rad($Angle-90))*20+$Y;
-
- $TxtPos = $this->pChartObject->getTextBox($X,$Y,$FontName,$FontSize,0,$Label);
- $Height = $TxtPos[0]["Y"] - $TxtPos[2]["Y"];
- $YTop = $Y2 - $Height/2 - 2;
- $YBottom = $Y2 + $Height/2 + 2;
-
- if ( $this->LabelPos != "" )
- {
- $Done = FALSE;
- foreach($this->LabelPos as $Key => $Settings)
- {
- if ( !$Done )
- {
- if ( $Angle <= 90 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; }
- if ( $Angle > 90 && $Angle <= 180 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; }
- if ( $Angle > 180 && $Angle <= 270 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; }
- if ( $Angle > 270 && $Angle <= 360 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; }
- }
- }
- }
-
- $LabelSettings = array("YTop"=>$YTop,"YBottom"=>$YBottom,"Label"=>$Label,"Angle"=>$Angle,"X1"=>$X,"Y1"=>$Y,"X2"=>$X2,"Y2"=>$Y2);
- if ( $Angle <= 180 ) { $LabelSettings["X3"] = $Xc+$Radius+$LabelOffset; }
- if ( $Angle > 180 ) { $LabelSettings["X3"] = $Xc-$Radius-$LabelOffset; }
- $this->LabelPos[] = $LabelSettings;
- }
- }
-
- /* Internally used to shift label positions */
- function shift($StartAngle,$EndAngle,$Offset,$Reversed)
- {
- if ( $Reversed ) { $Offset = -$Offset; }
- foreach($this->LabelPos as $Key => $Settings)
- {
- if ( $Settings["Angle"] > $StartAngle && $Settings["Angle"] <= $EndAngle ) { $this->LabelPos[$Key]["YTop"] = $Settings["YTop"] + $Offset; $this->LabelPos[$Key]["YBottom"] = $Settings["YBottom"] + $Offset; $this->LabelPos[$Key]["Y2"] = $Settings["Y2"] + $Offset; }
- }
- }
-
- /* Internally used to write the re-computed labels */
- function writeShiftedLabels()
- {
- if ( $this->LabelPos == "" ) { return(0); }
- foreach($this->LabelPos as $Key => $Settings)
- {
- $X1 = $Settings["X1"]; $Y1 = $Settings["Y1"];
- $X2 = $Settings["X2"]; $Y2 = $Settings["Y2"];
- $X3 = $Settings["X3"];
- $Angle = $Settings["Angle"];
- $Label = $Settings["Label"];
-
- $this->pChartObject->drawArrow($X2,$Y2,$X1,$Y1,array("Size"=>8));
- if ( $Angle <= 180 )
- {
- $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2);
- $this->pChartObject->drawText($X3+2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
- }
- else
- {
- $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2);
- $this->pChartObject->drawText($X3-2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
- }
- }
- }
-
- /* Draw a ring chart */
- function draw2DRing($X,$Y,$Format="")
- {
- $OuterRadius = isset($Format["Radius"]) ? $Format["Radius"] : 60;
- $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0;
- $InnerRadius = isset($Format["Radius"]) ? $Format["Radius"] : 30;
- $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100;
- $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
- $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
- $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
- $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
- $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
- $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
- $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
- $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; //PIE_VALUE_PERCENTAGE
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 5;
- $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
- $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
- $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
- $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
- $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
- $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- /* Do we have an abscissa serie defined? */
- if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
-
- /* Try to find the data serie */
- $DataSerie = "";
- foreach ($Data["Series"] as $SerieName => $SerieData)
- { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
-
- /* Do we have data to compute? */
- if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
-
- /* Remove unused data */
- list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
-
- /* Compute the pie sum */
- $SerieSum = $this->pDataObject->getSum($DataSerie);
-
- /* Do we have data to draw? */
- if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
-
- /* Dump the real number of data to draw */
- $Values = "";
- foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- { if ($Value != 0) { $Values[] = $Value; } }
-
- /* Compute the wasted angular space between series */
- if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = 0; } // count($Values)
-
- /* Compute the scale */
- $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
-
- $RestoreShadow = $this->pChartObject->Shadow;
- if ( $this->pChartObject->Shadow )
- {
- $this->pChartObject->Shadow = FALSE;
-
- $ShadowFormat = $Format; $ShadowFormat["Shadow"] = TRUE;
- $this->draw2DRing($X+$this->pChartObject->ShadowX,$Y+$this->pChartObject->ShadowY,$ShadowFormat);
- }
-
- /* Draw the polygon pie elements */
- $Step = 360 / (2 * PI * $OuterRadius);
- $Offset = 0; $ID = 0;
- foreach($Values as $Key => $Value)
- {
- if ( $Shadow )
- {
- $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
- $BorderColor = $Settings;
- }
- else
- {
- if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
-
- if ( $Border )
- $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
- else
- $BorderColor = $Settings;
- }
-
- $Plots = ""; $Boundaries = ""; $AAPixels = "";
- $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; }
- for($i=$Offset;$i<=$EndAngle;$i=$i+$Step)
- {
- $Xc = cos(($i-90)*PI/180) * $OuterRadius + $X;
- $Yc = sin(($i-90)*PI/180) * $OuterRadius + $Y;
-
- if ( !isset($Boundaries[0]["X1"]) ) { $Boundaries[0]["X1"] = $Xc; $Boundaries[0]["Y1"] = $Yc; }
- $AAPixels[] = array($Xc,$Yc);
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Plots[] = $Xc; $Plots[] = $Yc;
- }
- $Boundaries[1]["X1"] = $Xc; $Boundaries[1]["Y1"] = $Yc;
- $Lasti = $EndAngle;
-
- for($i=$EndAngle;$i>=$Offset;$i=$i-$Step)
- {
- $Xc = cos(($i-90)*PI/180) * ($InnerRadius-1) + $X;
- $Yc = sin(($i-90)*PI/180) * ($InnerRadius-1) + $Y;
-
- if ( !isset($Boundaries[1]["X2"]) ) { $Boundaries[1]["X2"] = $Xc; $Boundaries[1]["Y2"] = $Yc; }
- $AAPixels[] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * $InnerRadius + $X;
- $Yc = sin(($i-90)*PI/180) * $InnerRadius + $Y;
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Plots[] = $Xc; $Plots[] = $Yc;
- }
- $Boundaries[0]["X2"] = $Xc; $Boundaries[0]["Y2"] = $Yc;
-
- /* Draw the polygon */
- $this->pChartObject->drawPolygon($Plots,$Settings);
- if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); }
-
- /* Smooth the edges using AA */
- foreach($AAPixels as $iKey => $Pos ) { $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$BorderColor); }
- $this->pChartObject->drawLine($Boundaries[0]["X1"],$Boundaries[0]["Y1"],$Boundaries[0]["X2"],$Boundaries[0]["Y2"],$BorderColor);
- $this->pChartObject->drawLine($Boundaries[1]["X1"],$Boundaries[1]["Y1"],$Boundaries[1]["X2"],$Boundaries[1]["Y2"],$BorderColor);
-
- if ( $DrawLabels && !$Shadow )
- {
- if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
- { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
- else
- { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $Xc = cos(($Angle-90)*PI/180) * $OuterRadius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $OuterRadius + $Y;
-
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
-
- if ( $LabelStacked )
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius);
- else
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
- }
-
- $Offset = $Lasti; $ID++;
- }
-
- if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
-
- if ( $WriteValues && !$Shadow )
- {
- $Step = 360 / (2 * PI * $OuterRadius);
- $Offset = 0;
- foreach($Values as $Key => $Value)
- {
- $EndAngle = $Offset+($Value*$ScaleFactor);
- if ( $EndAngle > 360 ) { $EndAngle = 360; }
-
- $Angle = $Offset+($Value*$ScaleFactor)/2;
- if ( $ValuePosition == PIE_VALUE_OUTSIDE )
- {
- $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $X;
- $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $Y;
- if ( $Angle >=0 && $Angle <= 90 ) { $Align = TEXT_ALIGN_BOTTOMLEFT; }
- if ( $Angle > 90 && $Angle <= 180 ) { $Align = TEXT_ALIGN_TOPLEFT; }
- if ( $Angle > 180 && $Angle <= 270 ) { $Align = TEXT_ALIGN_TOPRIGHT; }
- if ( $Angle > 270 ) { $Align = TEXT_ALIGN_BOTTOMRIGHT; }
- }
- else
- {
- $Xc = cos(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $X;
- $Yc = sin(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $Y;
- $Align = TEXT_ALIGN_MIDDLEMIDDLE;
- }
-
- if ( $WriteValues == PIE_VALUE_PERCENTAGE )
- $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%";
- elseif ( $WriteValues == PIE_VALUE_NATURAL )
- $Display = $Value.$ValueSuffix;
- else
- $Label = "";
-
- $this->pChartObject->drawText($Xc,$Yc,$Display,array("Align"=>$Align,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB));
- $Offset = $EndAngle;
- }
- }
-
- $this->pChartObject->Shadow = $RestoreShadow;
-
- return(PIE_RENDERED);
- }
-
- /* Draw a 3D ring chart */
- function draw3DRing($X,$Y,$Format="")
- {
- $OuterRadius = isset($Format["OuterRadius"]) ? $Format["OuterRadius"] : 100;
- $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0;
- $InnerRadius = isset($Format["InnerRadius"]) ? $Format["InnerRadius"] : 30;
- $SkewFactor = isset($Format["SkewFactor"]) ? $Format["SkewFactor"] : .6;
- $SliceHeight = isset($Format["SliceHeight"]) ? $Format["SliceHeight"] : 10;
- $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 10;
- $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 10;
- $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
- $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
- $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
- $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
- $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
- $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
- $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
- $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
- $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
- $Cf = isset($Format["Cf"]) ? $Format["Cf"] : 20;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : PIE_VALUE_NATURAL;
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : $SliceHeight + 15;
- $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
- $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
- $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
- $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
- $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
- $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- /* Error correction for overlaying rounded corners */
- if ( $SkewFactor < .5 ) { $SkewFactor = .5; }
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- /* Do we have an abscissa serie defined? */
- if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
-
- /* Try to find the data serie */
- $DataSerie = "";
- foreach ($Data["Series"] as $SerieName => $SerieData)
- { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
-
- /* Do we have data to compute? */
- if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
-
- /* Remove unused data */
- list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
-
- /* Compute the pie sum */
- $SerieSum = $this->pDataObject->getSum($DataSerie);
-
- /* Do we have data to draw? */
- if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
-
- /* Dump the real number of data to draw */
- $Values = "";
- foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- { if ($Value != 0) { $Values[] = $Value; } }
-
- /* Compute the wasted angular space between series */
- if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; }
-
- /* Compute the scale */
- $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
-
- $RestoreShadow = $this->pChartObject->Shadow;
- if ( $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; }
-
- /* Draw the polygon ring elements */
- $Offset = 360; $ID = count($Values)-1;
- $Values = array_reverse($Values);
- $Slice = 0; $Slices = ""; $SliceColors = ""; $Visible = ""; $SliceAngle = "";
- foreach($Values as $Key => $Value)
- {
- if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
-
- $SliceColors[$Slice] = $Settings;
-
- $StartAngle = $Offset;
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- if ( $StartAngle > 180 ) { $Visible[$Slice]["Start"] = TRUE; } else { $Visible[$Slice]["Start"] = TRUE; }
- if ( $EndAngle < 180 ) { $Visible[$Slice]["End"] = FALSE; } else { $Visible[$Slice]["End"] = TRUE; }
-
- $Step = (360 / (2 * PI * $OuterRadius))/2;
- $OutX1 = VOID; $OutY1 = VOID;
- for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
- {
- $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2) + $X;
- $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1) + $X;
- $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X;
- $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y;
- $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
-
- if ( $OutX1 == VOID ) { $OutX1 = $Xc; $OutY1 = $Yc; }
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>90 && $i<180 ) { $Xc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc);
- $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight;
- $Slices[$Slice]["Angle"][] = $i;
- }
- $OutX2 = $Xc; $OutY2 = $Yc;
-
- $Slices[$Slice]["Angle"][] = VOID;
- $Lasti = $i;
-
- $Step = (360 / (2 * PI * $InnerRadius))/2;
- $InX1 = VOID; $InY1 = VOID;
- for($i=$EndAngle;$i<=$Offset;$i=$i+$Step)
- {
- $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1) + $X;
- $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius) + $X;
- $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- if ( $InX1 == VOID ) { $InX1 = $Xc; $InY1 = $Yc; }
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>90 && $i<180 ) { $Xc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc);
- $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight;
- $Slices[$Slice]["Angle"][] = $i;
- }
- $InX2 = $Xc; $InY2 = $Yc;
-
- $Slices[$Slice]["InX1"] = $InX1; $Slices[$Slice]["InY1"] = $InY1;
- $Slices[$Slice]["InX2"] = $InX2; $Slices[$Slice]["InY2"] = $InY2;
- $Slices[$Slice]["OutX1"] = $OutX1; $Slices[$Slice]["OutY1"] = $OutY1;
- $Slices[$Slice]["OutX2"] = $OutX2; $Slices[$Slice]["OutY2"] = $OutY2;
-
- $Offset = $Lasti - $DataGapAngle; $ID--; $Slice++;
- }
-
- /* Draw the bottom pie splice */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $this->pChartObject->drawPolygon($Plots["BottomPoly"],$Settings);
-
- foreach($Plots["AA"] as $Key => $Pos)
- $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$Settings);
-
- $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["OutX2"],$Plots["OutY2"],$Settings);
- $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["OutX1"],$Plots["OutY1"],$Settings);
- }
-
- $Slices = array_reverse($Slices);
- $SliceColors = array_reverse($SliceColors);
-
- /* Draw the vertical edges (semi-visible) */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $StartAngle = $Plots["Angle"][0];
- foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
-
- if ( $StartAngle >= 270 || $StartAngle <= 90 )
- $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
- if ( $StartAngle >= 270 || $StartAngle <= 90 )
- $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
-
- $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Settings);
- $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Settings);
- }
-
- /* Draw the inner vertical slices */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $Outer = TRUE; $Inner = FALSE;
- $InnerPlotsA = ""; $InnerPlotsB = "";
- foreach($Plots["Angle"] as $ID => $Angle)
- {
- if ( $Angle == VOID )
- { $Outer = FALSE; $Inner = TRUE; }
- elseif( $Inner )
- {
- if (( $Angle < 90 || $Angle > 270 ) && isset($Plots["BottomPoly"][$ID*2]) )
- {
- $Xo = $Plots["BottomPoly"][$ID*2];
- $Yo = $Plots["BottomPoly"][$ID*2+1];
-
- $InnerPlotsA[] = $Xo; $InnerPlotsA[] = $Yo;
- $InnerPlotsB[] = $Xo; $InnerPlotsB[] = $Yo-$SliceHeight;
- }
- }
- }
-
- if ( $InnerPlotsA != "" )
- { $InnerPlots = array_merge($InnerPlotsA,$this->arrayReverse($InnerPlotsB)); $this->pChartObject->drawPolygon($InnerPlots,$Settings); }
- }
-
- /* Draw the splice top and left poly */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf*1.5; $Settings["G"] = $Settings["G"]+$Cf*1.5; $Settings["B"] = $Settings["B"]+$Cf*1.5;
-
- $StartAngle = $Plots["Angle"][0];
- foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
-
- if ( $StartAngle < 180 )
- {
- $Points = "";
- $Points[] = $Plots["InX2"];
- $Points[] = $Plots["InY2"];
- $Points[] = $Plots["InX2"];
- $Points[] = $Plots["InY2"]-$SliceHeight;
- $Points[] = $Plots["OutX1"];
- $Points[] = $Plots["OutY1"]-$SliceHeight;
- $Points[] = $Plots["OutX1"];
- $Points[] = $Plots["OutY1"];
-
- $this->pChartObject->drawPolygon($Points,$Settings);
- }
-
- if ( $EndAngle > 180 )
- {
- $Points = "";
- $Points[] = $Plots["InX1"];
- $Points[] = $Plots["InY1"];
- $Points[] = $Plots["InX1"];
- $Points[] = $Plots["InY1"]-$SliceHeight;
- $Points[] = $Plots["OutX2"];
- $Points[] = $Plots["OutY2"]-$SliceHeight;
- $Points[] = $Plots["OutX2"];
- $Points[] = $Plots["OutY2"];
-
- $this->pChartObject->drawPolygon($Points,$Settings);
- }
- }
-
-
- /* Draw the vertical edges (visible) */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $StartAngle = $Plots["Angle"][0];
- foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
-
- if ( $StartAngle <= 270 && $StartAngle >= 90 )
- $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
- if ( $EndAngle <= 270 && $EndAngle >= 90 )
- $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
- }
-
-
- /* Draw the outer vertical slices */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $Outer = TRUE; $Inner = FALSE;
- $OuterPlotsA = ""; $OuterPlotsB = ""; $InnerPlotsA = ""; $InnerPlotsB = "";
- foreach($Plots["Angle"] as $ID => $Angle)
- {
- if ( $Angle == VOID )
- { $Outer = FALSE; $Inner = TRUE; }
- elseif( $Outer )
- {
- if ( ( $Angle > 90 && $Angle < 270 ) && isset($Plots["BottomPoly"][$ID*2]) )
- {
- $Xo = $Plots["BottomPoly"][$ID*2];
- $Yo = $Plots["BottomPoly"][$ID*2+1];
-
- $OuterPlotsA[] = $Xo; $OuterPlotsA[] = $Yo;
- $OuterPlotsB[] = $Xo; $OuterPlotsB[] = $Yo-$SliceHeight;
- }
- }
- }
- if ( $OuterPlotsA != "" )
- { $OuterPlots = array_merge($OuterPlotsA,$this->arrayReverse($OuterPlotsB)); $this->pChartObject->drawPolygon($OuterPlots,$Settings); }
- }
-
- $Slices = array_reverse($Slices);
- $SliceColors = array_reverse($SliceColors);
-
-
- /* Draw the top pie splice */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf*2; $Settings["G"] = $Settings["G"]+$Cf*2; $Settings["B"] = $Settings["B"]+$Cf*2;
-
- $this->pChartObject->drawPolygon($Plots["TopPoly"],$Settings);
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots["TopPoly"]),$this->pChartObject->toHTMLColor($Settings["R"],$Settings["G"],$Settings["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$SliceID],$Data["Series"][$DataSerie]["Data"][count($Slices)-$SliceID-1]); }
-
- foreach($Plots["AA"] as $Key => $Pos)
- $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1]-$SliceHeight,$Settings);
-
- $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
- $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
- }
-
- if ( $DrawLabels )
- {
- $Offset = 360;
- foreach($Values as $Key => $Value)
- {
- $StartAngle = $Offset;
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
- { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
- else
- { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X;
- $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y;
-
- if ( $WriteValues == PIE_VALUE_PERCENTAGE )
- $Label = $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%";
- elseif ( $WriteValues == PIE_VALUE_NATURAL )
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
- else
- $Label = "";
-
- if ( $LabelStacked )
- $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius);
- else
- $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,FALSE);
-
- $Offset = $EndAngle - $DataGapAngle; $ID--; $Slice++;
- }
- }
- if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
-
- $this->pChartObject->Shadow = $RestoreShadow;
-
- return(PIE_RENDERED);
- }
-
- /* Serialize an array */
- function arraySerialize($Data)
- {
- $Result = "";
- foreach($Data as $Key => $Value)
- { if ($Result == "") { $Result = floor($Value); } else { $Result = $Result.",".floor($Value); } }
-
- return($Result);
- }
-
- /* Reverse an array */
- function arrayReverse($Plots)
- {
- $Result = "";
-
- for($i=count($Plots)-1;$i>=0;$i=$i-2)
- { $Result[] = $Plots[$i-1]; $Result[] = $Plots[$i]; }
-
- return($Result);
- }
-
- /* Remove unused series & values */
- function clean0Values($Data,$Palette,$DataSerie,$AbscissaSerie)
- {
- $NewPalette = ""; $NewData = ""; $NewAbscissa = "";
-
- /* Remove unused series */
- foreach($Data["Series"] as $SerieName => $SerieSettings)
- { if ( $SerieName != $DataSerie && $SerieName != $AbscissaSerie ) { unset($Data["Series"][$SerieName]); } }
-
- /* Remove NULL values */
- foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- {
- if ($Value != 0 )
- {
- $NewData[] = $Value;
- $NewAbscissa[] = $Data["Series"][$AbscissaSerie]["Data"][$Key];
- if ( isset($Palette[$Key]) ) { $NewPalette[] = $Palette[$Key]; }
- }
- }
- $Data["Series"][$DataSerie]["Data"] = $NewData;
- $Data["Series"][$AbscissaSerie]["Data"] = $NewAbscissa;
-
- return(array($Data,$NewPalette));
- }
}
?>