bebeboutik/modules/graphgooglechart/graphgooglechart.php
Srv Bebeboutik 6c0978166c add modules
2016-01-04 12:49:26 +01:00

249 lines
5.8 KiB
PHP
Executable File

<?php
/*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2011 PrestaShop SA
* @version Release: $Revision: 8005 $
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_'))
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 '<img src="'.$drawer.'&width='.$params['width'].'&height='.$params['height'].'" />';
}
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;
}
}