<?php
namespace JLaso\SimpleStats\Graph;
use JLaso\SimpleStats\Model\DB;
use JLaso\SimpleStats\StatsBase;
abstract class BaseGraph implements GraphInterface
{
protected static $instance;
/** @var StatsBase */
protected $statsBase;
/** @var DB */
protected $db;
/** @var array */
protected $sourceEvents;
/**
* Stats constructor.
*/
public function __construct()
{
$this->statsBase = new StatsBase();
$this->db = new DB($this->statsBase->getConn());
}
/**
* @return BaseGraph
*/
public static function getInstance()
{
$className = get_called_class();
if (!self::$instance) {
self::$instance = new $className;
}
return self::$instance;
}
public function draw($title, $sourceEvent, $range, $width, $heigth, $destFile = null)
{
$this->sourceEvents = explode(',', $sourceEvent);
$data = array();
foreach($this->sourceEvents as $event) {
if (!$model = $this->statsBase->getModel($event)) {
throw new \Exception("Event {$event} does not have a model associated !");
}
$data[$event] = $this->db->fetchDataInRange($model, $range);
}
$values = $this->genValues($data);
$settings = $this->getSettings(array(
'graph_title' => $title,
));
$this->renderGraph($this->getGraphType(), $width, $heigth, $settings, array_values($values), $destFile);
}
protected function renderGraph($graphType, $width, $height, $settings, $values, $destFile = null)
{
$graph = new \SVGGraph($width, $height, $settings);
$graph->Values($values);
if($destFile) {
ob_start();
}
$graph->Render($graphType, false, false);
if ($destFile){
file_put_contents($destFile, ob_get_clean());
}
}
abstract protected function genValues($data);
}
|