You are here

public function FrxChart::render in Forena Reports 7.2

Same name and namespace in other branches
  1. 6.2 plugins/FrxChart.inc \FrxChart::render()
  2. 7.3 renderers/FrxChart.inc \FrxChart::render()

Overrides FrxRenderer::render

File

plugins/FrxChart.inc, line 3

Class

FrxChart

Code

public function render() {

  // Get data from source
  $output = '';
  $options = array();
  $series = array();
  $seriesx = array();
  $output;
  $data = array();
  $attributes = $this
    ->mergedAttributes();
  $path = isset($attributes['xpath']) ? $attributes['xpath'] : '*';
  $label = '';
  $links = '';
  $type = $attributes['type'];
  $link = @$attributes['link'];
  if (isset($attributes['options'])) {
    parse_str($attributes['options'], $options);
    $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);
    }
  }
  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) {
        $data[] = $this
          ->xmlToValues($path, $d, $seriesx[$i]);
      }
      else {
        $data[] = $this
          ->xmlToValues($path, $d, $label);
      }
    }
  }
  if ($link) {
    $links = $this
      ->xmlToValues($path, $link, $label);
  }
  if ($data) {
    if (method_exists($this, 'renderChart')) {
      $output = $this
        ->renderChart($type, $data, $options, $links);
    }
  }
  return $output;
}