Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/administrator/components/com_componentbuilder/custom/ |
| [Home] [System Details] [Kill Me] |
<?php
/**
*
* @version 1.0.5 October 6, 2015
* @author Llewellyn van der Merwe <https://www.vdm.io/> (forked -
<https://code.google.com/p/php-class-for-google-chart-tools/>)
* @license GNU General Public License
<http://www.gnu.org/copyleft/gpl.html>
*
**/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
class Chartbuilder
{
private static $_first = true;
public static $_count = 0;
private $_chartType;
private $_data;
private $_dataType;
private $_skipFirstRow;
/**
* sets the chart type and updates the chart counter
*/
public function __construct($chartType, $skipFirstRow = false){
$this->_chartType = $chartType;
$this->_skipFirstRow = $skipFirstRow;
self::$_count++;
}
/**
* loads the dataset and converts it to the correct format
*/
public function load($data, $dataType = 'json'){
$this->_data = ($dataType != 'json') ?
$this->dataToJson($data) : $data;
}
/**
* load jsapi
*/
private function initChart(){
self::$_first = false;
$output = '';
// start a code block
/*$output .= '<script
type="text/javascript"
src="https://www.google.com/jsapi"></script>'."\n";*/
$output .= '<script
type="text/javascript">google.load(\'visualization\',
\'1.0\',
{\'packages\':[\'corechart\']});</script>'."\n";
return $output;
}
/**
* draws the chart
*/
public function draw($div, Array $options = array()){
$output = '';
if(self::$_first)$output .= $this->initChart();
// start a code block
$output .= '<script
type="text/javascript">';
// set callback function
$output .= 'google.setOnLoadCallback(drawChart' .
self::$_count . ');';
// create callback function
$output .= 'function drawChart' . self::$_count .
'(){';
$output .= 'var data = new
google.visualization.DataTable(' . $this->_data . ');';
// make chart resize
$output .= "var width = 0;
var graphHeight". self::$_count ." = 0;
var graphWidth". self::$_count ." = 0;
jQuery(window).ready(function() {
width = jQuery(window).width();
if (width < 1000){
sizeGraph". self::$_count ."(true,width);
} else if (width > 1000) {
sizeGraph". self::$_count ."(false);
}
";
// draw on tab change
if (isset($options['tabclickdraw']))
{
$output .=
"jQuery('.".$options['tabclickdraw']."').on('click',
function(){
width = jQuery(window).width();
if (width < 1000){
sizeGraph". self::$_count ."(true,width);
} else if (width > 1000) {
sizeGraph". self::$_count ."(false);
}
});";
unset($options['tabclickdraw']);
}
$output .= "
jQuery('.icon').on('click', function(){
width = jQuery(window).width();
if (width < 1000){
sizeGraph". self::$_count ."(true,width);
} else if (width > 1000) {
sizeGraph". self::$_count ."(false);
}
});
});
jQuery(window).resize(function () {
width = jQuery(window).width();
if (width < 1000){
sizeGraph". self::$_count ."(true,width);
} else if (width > 1000) {
sizeGraph". self::$_count ."(false);
}
});
function sizeGraph". self::$_count ."(set, width) {
if(set){
var setTo = width/1200;
graphHeight". self::$_count ." =
setTo*".$options['height'].";
graphWidth". self::$_count ." =
setTo*".$options['width'].";
} else {
graphHeight". self::$_count ." =
".$options['height'].";
graphWidth". self::$_count ." =
".$options['width'].";
}
";
// set the options
$output .= 'var options = ' .
json_encode($options) . ';
options["height"]=graphHeight'. self::$_count .';
options["width"]=graphWidth'. self::$_count .';';
// create and draw the chart
$output .= 'var chart = new
google.visualization.' . $this->_chartType .
'(document.getElementById(\'' . $div .
'\'));';
$output .= 'chart.draw(data, options);';
$output .= '}} </script>' .
"\n";
return $output;
}
/**
* substracts the column names from the first and second row in the
dataset
*/
private function getColumns($data){
$cols = array();
foreach($data[0] as $key => $value){
if(is_numeric($key)){
if(is_string($data[1][$key])){
$cols[] = array('id'
=> '', 'label' => $value, 'type' =>
'string');
} else {
$cols[] = array('id'
=> '', 'label' => $value, 'type' =>
'number');
}
$this->_skipFirstRow = true;
} else {
if(is_string($value)){
$cols[] = array('id'
=> '', 'label' => $key, 'type' =>
'string');
} else {
$cols[] = array('id'
=> '', 'label' => $key, 'type' =>
'number');
}
}
}
return $cols;
}
/**
* convert array data to json
* info:
https://code.google.com/intl/nl-NL/apis/chart/interactive/docs/datatables_dataviews.html#javascriptliteral
*/
private function dataToJson($data){
$cols = $this->getColumns($data);
$rows = array();
foreach($data as $key => $row){
if($key != 0 || !$this->_skipFirstRow){
$c = array();
foreach($row as $v){
$c[] = array('v' =>
$v);
}
$rows[] = array('c' => $c);
}
}
return json_encode(array('cols' => $cols,
'rows' => $rows));
}
}