* @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 7540 $ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_CAN_LOAD_FILES_')) exit; class GraphGoogleChart extends ModuleGraphEngine { private $_width; private $_height; private $_values; private $_legend; private $_titles; function __construct($type = null) { if ($type != null) { parent::__construct($type); } else { $this->name = 'graphgooglechart'; $this->tab = 'administration'; $this->version = 1.0; $this->author = 'PrestaShop'; $this->need_instance = 0; Module::__construct(); $this->displayName = $this->l('Google Chart'); $this->description = $this->l('The Google Chart API lets you dynamically generate charts.'); } } function install() { return (parent::install() AND $this->registerHook('GraphEngine')); } public static function hookGraphEngine($params, $drawer) { return ''; } public function createValues($values) { $this->_values = $values; } public function setSize($width, $height) { $this->_width = $width; $this->_height = $height; } public function setLegend($legend) { $this->_legend = $legend; } public function setTitles($titles) { $this->_titles = $titles; } private function getChbh($sizeof_values) { $chbh = 12; if ($sizeof_values < 25) $chbh += 4; if ($sizeof_values < 20) $chbh += 4; if ($sizeof_values < 15) $chbh += 8; if ($sizeof_values < 10) $chbh += 14; return ($chbh); } private function drawColumn($max_y) { if (!isset($this->_values[0]) || !is_array($this->_values[0])) $sizeof_values = sizeof($this->_values); else $sizeof_values = sizeof($this->_values[0]); $url = 'bvs&chxt=x,y&chxr=1,0,'.$max_y.'&chbh='.$this->getChbh($sizeof_values).'&chg=0,12.5&chxl=0:|'; for ($i = 0; $i < $sizeof_values; $i++) if (!isset($this->_values[0]) || !is_array($this->_values[0])) { if (isset($this->_values[$i])) $this->_values[$i] = ($this->_values[$i] * 100) / $max_y; else $this->_values[$i] = 0; } else foreach ($this->_values as $k => $value) { if (!isset($this->_values[$k][$i])) $this->_values[$k][$i] = 0; $this->_values[$k][$i] = ($this->_values[$k][$i] * 100) / $max_y; } return ($url); } private function drawLine($max_y) { return ('lc'./*&chxt=x,y*/'&chbh='.$this->getChbh(sizeof($this->_values)).'&chg=0,12.5&chxl=0:|'); } private function drawPie() { return ('p3&chl='); } public function draw() { $url = 'http://chart.apis.google.com/chart?cht='; $legend = ''; $values = ''; $scale = ''; switch ($this->_type) { case 'pie': $url .= $this->drawPie(); break; case 'line': $url .= $this->drawLine($this->getYMax($this->_values)); case 'column': default: $url .= $this->drawColumn($this->getYMax($this->_values)); break; } foreach ($this->_legend as $label) $legend .= $label.'|'; $url .= htmlentities(urlencode(html_entity_decode(rtrim($legend, '|')))); if (!isset($this->_values[0]) || !is_array($this->_values[0])) { foreach ($this->_values as $label) $values .= ($label ? $label : '0').','; $url .= '&chd=t:'.urlencode(rtrim($values, ',')); } else { $i = 0; $url .= '&chd=t:'; foreach ($this->_values as $val) { $values = ''; if ($i++ > 0) $url .= '|'; foreach ($val as $label) $values .= ($label ? $label : '0').','; $url .= urlencode(rtrim($values, ',')); } } $url .= '&chs='.(int)($this->_width).'x'.(int)($this->_height); if (!isset($this->_values[0]) || !is_array($this->_values[0])) $url .= (isset($this->_titles['main'])) ? '&chtt='.urlencode($this->_titles['main']) : ''; else { $url .= $this->getStringColor(sizeof($this->_values)); $i = 0; foreach ($this->_titles['main'] as $val) { if ($i == 0 && !empty($this->_titles['main'])) $url .= '&chtt='.urlencode($this->_titles['main'][$i]); elseif ($i == 1) $url .= '&chdl='; elseif ($i > 1) $url .= '|'; if ($i != 0) $url .= urlencode($this->_titles['main'][$i]); $i++; } } header("Content-type: image/png"); readfile($url); } private function getYMax($values) { $max = 0; if (!isset($this->_values[0]) || !is_array($this->_values[0])) { foreach ($values as $k => $val) if ($val > $max) $max = $val; } else { foreach ($values as $value) foreach ($value as $val) if ($val > $max) $max = $val; } return ($max < 4) ? 4 : (round($max, 0)); } private function getStringColor($nb_colors) { $tabColors = array('ffb649', '427fc3', 'ff0000', '55a339', 'ff2398'); $color = ''; if ($nb_colors > 1) { $color = '&chco='; for ($i = 0; $i < $nb_colors; $i++) { if ($i > 0) $color .= ','; $color .= $tabColors[$i % 5]; } } return $color; } }