public function FrxChart::render in Forena Reports 7.3
Same name and namespace in other branches
- 6.2 plugins/FrxChart.inc \FrxChart::render()
- 7.2 plugins/FrxChart.inc \FrxChart::render()
Overrides FrxRenderer::render
File
- renderers/
FrxChart.inc, line 10 - FrxChart Base class for chart generation implementations. @author davidmetzler
Class
- FrxChart
- @file FrxChart Base class for chart generation implementations. @author davidmetzler
Code
public function render() {
// Get data from source
$output = '';
$options = array();
$series = array();
$seriesx = array();
$data = array();
$attributes = $this
->mergedAttributes();
$path = isset($attributes['xpath']) ? $attributes['xpath'] : '*';
$label = '';
$links = '';
$type = $attributes['type'];
$link = @$attributes['link'];
// Legacy options. New charts should be generated using Frx:attribute syntax
if (isset($attributes['options'])) {
parse_str($attributes['options'], $options);
unset($attributes['options']);
$options = array_merge($attributes, $options);
}
else {
$options = $attributes;
}
$series = @$options['series'];
if (isset($options['seriesx'])) {
$seriesx = $options['seriesx'];
unset($options['seriesx']);
}
if (isset($options['label'])) {
$label = $options['label'];
unset($options['label']);
}
foreach ($options as $key => $value) {
$options[$key] = $this->teng
->replace($value, TRUE);
}
if (isset($attributes['height'])) {
$options['height'] = $this->teng
->replace($attributes['height']);
}
if (isset($attributes['width'])) {
$options['width'] = $this->teng
->replace($attributes['width']);
}
// Extract chart series data from xml.
if ($series) {
foreach ((array) $series as $i => $d) {
if ($seriesx) {
$this->xy_data = TRUE;
$data[] = $this
->xmlToValues($path, $d, $seriesx[$i], TRUE);
}
else {
$data[] = $this
->xmlToValues($path, $d, $label, FALSE);
}
}
}
if ($link) {
$links = $this
->xmlToValues($path, $link, $label);
}
// Deal with rare case where attributes are supposed to come from data
if (@$attributes['color'] && !is_array($attributes['color']) && strpos($attributes['color'], '{') !== FALSE) {
$options['colors'] = $this
->xmlToValues($path, $attributes['color']);
}
// Deal with rare case where legend are supposed to come from data
if (@$attributes['legend_entry'] && !is_array($attributes['legend_entry']) && strpos($attributes['legend_entry'], '{') !== FALSE) {
$options['legend_entries'] = $this
->xmlToValues($path, $attributes['legend_entry']);
}
if ($data) {
if (method_exists($this, 'renderChart')) {
$output = $this
->renderChart($type, $data, $options, $links);
}
}
return $output;
}