groups/modules/custom/chartjs/chartjs_elements.inc
Marton Kiss dd91ea8974 Add charts to membership reports
Add a custom chartjs module to integrate chart.js with Drupal. Extend
the membership report by a bar chart, and the membership history
report by a line chart.

Change-Id: Ifb134b632e593c88d81b44e97cb1a2c73626f0a8
2015-02-18 15:51:12 +01:00

70 lines
1.8 KiB
PHP

<?php
/**
* @file
* Define custom chartjs form elements.
*/
/**
* Implement hook_element_info()
*/
function _chartjs_element_info() {
$types['chart'] = array(
'#input' => TRUE,
'#theme' => 'chartjs_chart',
'#theme_wrappers' => array('form_element'),
'#pre_render' => array('_chartjs_chart_pre_render'),
);
return $types;
}
/**
* Define chartjs theme callbacks.
*/
function _chartjs_theme($existing, $type, $theme, $path) {
return array(
'chartjs_chart' => array(
'render element' => 'element',
'file' => 'chartjs_elements.inc',
),
);
}
/**
* Implement chart pre render callback.
*/
function _chartjs_chart_pre_render($element) {
libraries_load('chartjs');
$name = isset($element['#name']) ? $element['#name'] : "chart";
$chart_type = isset($element['#chart_type']) ? $element['#chart_type'] : "bar";
$element['#attached']['js'] = array(
drupal_get_path('module', 'chartjs').'/js/chart_elements.js',
array(
'data' => array(
'chart_'.$name => array(
'labels' => $element['#labels'],
'datasets' => $element['#datasets'],
),
'chart_'.$name.'_options' => $element['#options'],
'chart_'.$name.'_type' => $chart_type,
),
'type' => 'setting',
)
);
return $element;
}
/**
* Implements chart theme callback.
*/
function theme_chartjs_chart($variables) {
$name = isset($variables['element']['#name']) ? $variables['element']['#name'] : 'chart';
$output = '<div class="chart-container">';
$output .= sprintf('<canvas id="%s" ', $name);
if (isset($variables['element']['#height'])) {
$output .= sprintf('height="%s"', $variables['element']['#height']);
}
$output .= '></canvas></div>';
// $output = sprintf('<div class="chart-container"><canvas id="%s" height="400px"></canvas></div>', $name);
return $output;
}