Newer
Older
Benaka Moorthi
a validé
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
* @category Piwik_Plugins
* @package CoreVisualizations
Benaka Moorthi
a validé
*/
Benaka Moorthi
a validé
namespace Piwik\Plugins\CoreVisualizations\Visualizations;
Benaka Moorthi
a validé
use Piwik\Common;
Benaka Moorthi
a validé
use Piwik\Visualization\Graph;
Benaka Moorthi
a validé
use Piwik\Plugins\CoreVisualizations\JqplotDataGenerator;
Benaka Moorthi
a validé
/**
* DataTable visualization that displays DataTable data in a JQPlot graph.
Benaka Moorthi
a validé
* TODO: should merge all this logic w/ jqplotdatagenerator & 'Chart' visualizations.
Benaka Moorthi
a validé
*/
Benaka Moorthi
a validé
class JqplotGraph extends Graph
Benaka Moorthi
a validé
{
const ID = 'jqplot_graph';
Benaka Moorthi
a validé
/**
* The name of the JavaScript class to use as this graph's external series toggle. The class
* must be a subclass of JQPlotExternalSeriesToggle.
*
* @see self::EXTERNAL_SERIES_TOGGLE_SHOW_ALL
*
* Default value: false
*/
const EXTERNAL_SERIES_TOGGLE = 'external_series_toggle';
/**
* Whether the graph should show all loaded series upon initial display.
*
* @see self::EXTERNAL_SERIES_TOGGLE
*
* Default value: false
*/
const EXTERNAL_SERIES_TOGGLE_SHOW_ALL = 'external_series_toggle_show_all';
Benaka Moorthi
a validé
/**
* The number of x-axis ticks for each x-axis label.
*
* Default: 2
Benaka Moorthi
a validé
*/
const X_AXIS_STEP_SIZE = 'x_axis_step_size';
Benaka Moorthi
a validé
public static $clientSideProperties = array(
'external_series_toggle',
'external_series_toggle_show_all'
);
Benaka Moorthi
a validé
public static $overridableProperties = array('x_axis_step_size');
/**
* Constructor.
*
Benaka Moorthi
a validé
*/
public function __construct($view)
{
parent::__construct($view);
Benaka Moorthi
a validé
// do not sort if sorted column was initially "label" or eg. it would make "Visits by Server time" not pretty
if ($view->filter_sort_column != 'label') {
$columns = $view->columns_to_display;
$firstColumn = reset($columns);
if ($firstColumn == 'label') {
$firstColumn = next($columns);
}
$result['filter_sort_column'] = $firstColumn;
$result['filter_sort_order'] = 'desc';
}
}
Benaka Moorthi
a validé
/**
* Returns an array mapping property names with default values for this visualization.
*
* @return array
*/
public static function getDefaultPropertyValues()
{
Benaka Moorthi
a validé
$result = parent::getDefaultPropertyValues();
return array_merge_recursive($result, array(
'show_offset_information' => false,
'show_pagination_control' => false,
'show_exclude_low_population' => false,
'show_search' => false,
'show_export_as_image_icon' => true,
'y_axis_unit' => '',
'visualization_properties' => array(
'jqplot_graph' => array(
'external_series_toggle' => false,
'external_series_toggle_show_all' => false,
Benaka Moorthi
a validé
'x_axis_step_size' => 2
)
)
Benaka Moorthi
a validé
));
Benaka Moorthi
a validé
}
Benaka Moorthi
a validé
/**
* Renders this visualization.
Benaka Moorthi
a validé
* @param array $properties View Properties.
Benaka Moorthi
a validé
*/
public function render($dataTable, $properties)
{
Benaka Moorthi
a validé
$view = new View("@CoreVisualizations/_dataTableViz_jqplotGraph.twig");
Benaka Moorthi
a validé
$view->properties = $properties;
$view->dataTable = $dataTable;
$view->data = $this->getGraphData($dataTable, $properties);
return $view->render();
}
/**
* Generats JQPlot graph data for a DataTable.
*/
private function getGraphData($dataTable, $properties)
{
$properties = array_merge($properties, $properties['request_parameters_to_modify']);
Benaka Moorthi
a validé
$dataGenerator = $this->makeDataGenerator($properties);
Benaka Moorthi
a validé
$jsonData = $dataGenerator->generate($dataTable);
return str_replace(array("\r", "\n"), '', $jsonData);
}
Benaka Moorthi
a validé
/**
* Returns a JqplotDataGenerator for the given graph_type in $properties
* @param array $properties
* @return JqplotDataGenerator
*/
Benaka Moorthi
a validé
protected function makeDataGenerator($properties)
{
return JqplotDataGenerator::factory($properties['graph_type'], $properties);
}
Benaka Moorthi
a validé
}
require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/Visualizations/JqplotGraph/Bar.php';
require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/Visualizations/JqplotGraph/Pie.php';
require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/Visualizations/JqplotGraph/Evolution.php';