130 lines
2.5 KiB
PHP
130 lines
2.5 KiB
PHP
|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||
|
|
||
|
/**
|
||
|
* This class provides Combo HighCharts
|
||
|
*
|
||
|
* @package HighChart
|
||
|
* @category Helper
|
||
|
* @author Deon George
|
||
|
* @copyright (c) 2012-2013 Deon George
|
||
|
* @license http://dev.leenooks.net/license.html
|
||
|
*/
|
||
|
class HighChart_Combo extends HighChart {
|
||
|
private $_autopie_columns = array();
|
||
|
protected $_valid_axis = array(
|
||
|
'column',
|
||
|
'spline',
|
||
|
'pie',
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* Generate a PIE chart with the totals for each series
|
||
|
*/
|
||
|
public function autopie($column) {
|
||
|
array_push($this->_autopie_columns,$column);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get our series data, and return it as a JSON array
|
||
|
*/
|
||
|
public function json() {
|
||
|
$result = array();
|
||
|
|
||
|
// For our auto pie columns (on the left side), we need to build that.
|
||
|
if (count($this->_autopie_columns) > 1) {
|
||
|
$htpo = $this->series('pie','float');
|
||
|
|
||
|
foreach ($this->_series['yl'] as $data)
|
||
|
$htpo->series_add($data->name(),$data->total(),array('color'=>$this->series_colour($data->index())));
|
||
|
|
||
|
$htpo->size(50);
|
||
|
$htpo->center(50,5);
|
||
|
}
|
||
|
|
||
|
foreach ($this->_series as $axis => $values) {
|
||
|
Sort::MASort($this->_series[$axis],'order()',0,FALSE);
|
||
|
|
||
|
foreach ($this->_series[$axis] as $data) {
|
||
|
array_push($result,$data->as_array(array('color'=>$this->series_colour($data->index()))));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return json_encode($result);
|
||
|
}
|
||
|
|
||
|
public function render() {
|
||
|
Script::add(array(
|
||
|
'type'=>'file',
|
||
|
'data'=>'media/js/highcharts.js',
|
||
|
));
|
||
|
|
||
|
Script::add(array(
|
||
|
'type'=>'file',
|
||
|
'data'=>'media/js/modules/exporting.js',
|
||
|
));
|
||
|
|
||
|
Script::add(array(
|
||
|
'type'=>'stdin',
|
||
|
'data'=>"
|
||
|
$(document).ready(function() {
|
||
|
$('#".$this->_divname."').highcharts({
|
||
|
chart: {
|
||
|
height: ".$this->_height.",
|
||
|
width: ".$this->_width.",
|
||
|
},
|
||
|
title: {
|
||
|
text: '".$this->_title."',
|
||
|
y: 3
|
||
|
},
|
||
|
xAxis: {
|
||
|
title: {
|
||
|
text: 'Month'
|
||
|
},
|
||
|
labels: {
|
||
|
style: {
|
||
|
'font-size': '50%',
|
||
|
'font-weight': 'bold',
|
||
|
},
|
||
|
},
|
||
|
ticklength: 2,
|
||
|
categories: []
|
||
|
},
|
||
|
yAxis: {
|
||
|
title: {
|
||
|
text: 'MB'
|
||
|
},
|
||
|
labels: {
|
||
|
formatter: function() {
|
||
|
return this.value;
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
tooltip: {
|
||
|
formatter: function() {
|
||
|
var s;
|
||
|
s = '' + (this.point.name ? this.point.name+': ' : '') + this.y +' MB';
|
||
|
return s;
|
||
|
}
|
||
|
},
|
||
|
credits: {
|
||
|
enabled: false
|
||
|
},
|
||
|
plotOptions: {
|
||
|
series: {
|
||
|
stacking: 'normal'
|
||
|
},
|
||
|
column: {
|
||
|
pointPadding: 0,
|
||
|
groupPadding: 0.1
|
||
|
}
|
||
|
},
|
||
|
series: ".$this->json().",
|
||
|
});
|
||
|
});",
|
||
|
));
|
||
|
|
||
|
return sprintf('<div id="%s"></div>',$this->_divname);
|
||
|
}
|
||
|
}
|
||
|
?>
|