You are here

public function FrxTable::generate in Forena Reports 8

Overrides TemplateInterface::generate

File

src/FrxPlugin/Template/FrxTable.php, line 35
FrxTable Template that lays out a report in a particular table format.

Class

FrxTable

Namespace

Drupal\forena\Template

Code

public function generate() {
  $config = $this->configuration;
  $block = @$config['block'];
  $id = @$config['id'];
  if ($block) {
    $id = $this
      ->idFromBlock($block);
    $config['id'] = $id . '_block';
  }
  $config['class'] = @$config['class'] ? $config['class'] . ' FrxTable' : 'FrxTable';
  $div = $this
    ->blockDiv($config);

  // PUt on the header
  $this
    ->removeChildren($div);
  if (isset($config['header']['value'])) {
    $this
      ->addFragment($div, $config['header']['value']);
  }

  // Decide to inlcude columns
  $found_columns = $this
    ->columns($xml);
  if (!$found_columns) {
    $found_columns = $this
      ->columns($xml, '/*');
    $attrs = array();
  }
  $include_column = 0;
  $weight = 0;
  if (!@$config['columns']) {
    $include_column = 1;
  }
  else {
    $weight = count($config['columns']);
  }
  foreach ($found_columns as $column => $label) {
    $token = '{' . $column . '}';
    if (!isset($config['columns'][$column])) {
      $weight++;
      $config['columns'][$column] = array(
        'contents' => $token,
        'include' => $include_column,
        'label' => $label,
        'weight' => $weight,
      );
    }
  }
  $attrs = array(
    'foreach' => '*',
  );
  $table = $this
    ->setFirstNode($div, 4, 'table');
  if (@$config['caption']) {
    $this
      ->setFirstNode($table, 6, 'caption', $config['caption']);
  }
  $thead = $this
    ->setFirstNode($table, 6, 'thead');
  $throw = $this
    ->setFirstNode($thead, 8, 'tr');
  $tbody = $this
    ->setFirstNode($table, 6, 'tbody');
  $tdrow = $this
    ->setFirstNode($tbody, 8, 'tr', NULL, array(
    'id' => $id,
  ), $attrs);
  if (isset($config['columns'])) {
    foreach ($config['columns'] as $key => $col) {
      if ($col['include']) {
        $this
          ->addNode($throw, 10, 'th', $col['label']);
        $this
          ->addNode($tdrow, 10, 'td', $col['contents']);
      }
    }
  }
  if (isset($config['footer']['value'])) {
    $this
      ->addFragment($div, $config['footer']['value']);
  }
}