You are here

public function RendererBase::columns in Forena Reports 8

Extract a list of columns from the data context.

Parameters

$xml \SimpleXMLElement The xml data:

string $path:

Return value

array columns or fields contained in the XML.

1 call to RendererBase::columns()
RendererBase::generate in src/FrxPlugin/Renderer/RendererBase.php
Generate the template from the configuration.

File

src/FrxPlugin/Renderer/RendererBase.php, line 679
FrxRenderer.php Base class for FrxAPI custom Renderer @author davidmetzler

Class

RendererBase
Crosstab Renderer

Namespace

Drupal\forena\FrxPlugin\Renderer

Code

public function columns($xml, $path = '/*/*') {

  //create an array of columns
  if (!is_object($xml)) {
    return array();
  }

  // Use xpath if possible otherwise iterate.
  if (method_exists($xml, 'xpath')) {
    $rows = $xml
      ->xpath($path);
  }
  else {
    $rows = $xml;
  }
  $column_array = array();
  $numeric_columns = array();
  foreach ($rows as $columns) {
    foreach ($columns as $name => $value) {
      $label = str_replace('_', ' ', $name);
      $column_array[$name] = $label;
      if (is_numeric((string) $value)) {
        $numeric_columns[$name] = $label;
      }
      else {
        if (isset($numeric_columns[$name])) {
          unset($numeric_columns[$name]);
        }
      }
    }
    if (is_object($xml) && method_exists($xml, 'attributes')) {
      foreach ($xml
        ->attributes() as $name => $value) {
        $column_array['@' . $name] = '@' . $name;
      }
    }
  }
  $this->columns = $column_array;
  $this->numeric_columns = $numeric_columns;
  return $column_array;
}