You are here

public function DrupalTableExporter::compile in Loft Data Grids 6.2

Same name and namespace in other branches
  1. 7.2 src/AKlump/LoftDataGrids/DrupalTableExporter.php \AKlump\LoftDataGrids\DrupalTableExporter::compile()

Build $this->output in prep for export/save

This is the main method to be extended for the different exporters

Overrides Exporter::compile

File

includes/DrupalTableExporter.php, line 22

Class

DrupalTableExporter
Class DrupalTableExporter

Namespace

AKlump\LoftDataGrids

Code

public function compile($page_id = NULL) {
  $pages = $this
    ->getData()
    ->get();
  if ($page_id && array_key_exists($page_id, $pages)) {
    $pages = array(
      $pages[$page_id],
    );
  }
  $build = '';
  $page_ct = 0;
  foreach ($pages as $page_id => $data) {
    $vars['#ExportData'] = $this;
    $vars['#page_id'] = $page_id;
    $vars['attributes'] = array();
    $vars['caption'] = !empty($page_id) ? $page_id : NULL;
    $vars['header'] = array();
    $column_no = 1;
    foreach ($this
      ->getHeader($page_id) as $header_key => $value) {
      $header_classes = array();
      $header_classes[] = 'column-' . $column_no;
      if ($column_no === count(reset($data)) - 1) {
        $header_classes[] = 'last';
      }
      elseif ($column_no === 0) {
        $header_classes[] = 'first';
      }
      $string = preg_replace('/[^a-z0-9\\-\\.]/', '-', strtolower($header_key));
      $string = preg_replace('/^\\d/', 'c-\\0', $string);
      $header_classes[] = preg_replace('/-{2,}/', '-', $string);
      $vars['header'][] = array(
        'data' => t($value),
        'class' => $this
          ->tableClassesHandler($header_classes),
      );
      $column_no++;
    }
    $vars['rows'] = array();
    foreach (array_values($data) as $row_no => $row) {
      $row_classes = array();
      $row_classes[] = 'row-' . $row_no;
      if ($row_no === count($data) - 1) {
        $row_classes[] = 'last';
      }
      elseif ($row_no === 0) {
        $row_classes[] = 'first';
      }
      $columns = array();
      $array_keys = array_keys($row);
      foreach (array_values($row) as $column_no => $column) {
        $column_classes = array();
        $column_classes[] = 'column-' . $column_no;
        if ($column_no === count($row) - 1) {
          $column_classes[] = 'last';
        }
        elseif ($column_no === 0) {
          $column_classes[] = 'first';
        }
        $string = preg_replace('/[^a-z0-9\\-\\.]/', '-', strtolower($array_keys[$column_no]));
        $string = preg_replace('/^\\d/', 'c-\\0', $string);
        $column_classes[] = preg_replace('/-{2,}/', '-', $string);
        $columns[] = array(
          'data' => $column,
          'class' => $this
            ->tableClassesHandler($column_classes),
        );
      }
      $vars['rows'][] = array(
        'data' => $columns,
        'class' => $this
          ->tableClassesHandler($row_classes),
      );
    }
    drupal_alter('loft_data_grids_table', $vars, $this, $page_id);
    $build .= theme('table', $vars['header'], $vars['rows'], $vars['attributes'], $vars['caption']);
  }
  $this->output = $build;
}