You are here

public function MarkdownTableExporter::compile in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/aklump/loft_data_grids/src/AKlump/LoftDataGrids/MarkdownTableExporter.php \AKlump\LoftDataGrids\MarkdownTableExporter::compile()

Build the string content of $this->output and return $this for chaining.

Parameters

mixed $page_id: (Optional) Defaults to NULL. Set this to only compile a single page.

Return value

$this

Overrides FlatTextExporter::compile

File

vendor/aklump/loft_data_grids/src/AKlump/LoftDataGrids/MarkdownTableExporter.php, line 44

Class

MarkdownTableExporter
Class FlatTextExporter

Namespace

AKlump\LoftDataGrids

Code

public function compile($page_id = null) {
  $this->output = '';
  $pages = $this
    ->getData()
    ->get();
  if ($page_id && array_key_exists($page_id, $pages)) {
    $pages = array(
      $pages[$page_id],
    );
  }
  foreach ($pages as $page_id => $data) {
    if ($this
      ->getShowPageIds()) {
      $this->output .= '## ' . $page_id . $this->format->cr;
    }
    $header = $this
      ->getHeader($page_id);
    $header = array_combine(array_keys(reset($data)), $header);
    array_unshift($data, $header);

    // Scan the data to determine the total width of each column
    $columns = array();
    foreach ($data as $row) {
      foreach ($row as $key => $value) {
        if (empty($columns[$key])) {
          $columns[$key] = 0;
        }
        $columns[$key] = max($columns[$key], strlen($value));
      }
    }

    // Pad all the cells based on our determination from above
    $hrule = array();
    foreach ($data as $row_key => $row) {
      foreach ($row as $key => $value) {
        $data[$row_key][$key] = str_pad($value, $columns[$key], ' ');
        if (empty($hrule[$key])) {
          $hrule[$key] = $this->format->vline . str_pad('', 2 + $columns[$key], $this->format->hline);
        }
      }
    }
    $hrule = implode($hrule) . $this->format->vline;

    // Build the output
    $header = false;
    foreach ($data as $row) {
      $this->output .= $this
        ->collapseRow($row);
      if (!$header) {
        $this->output .= $hrule . $this->format->cr;
        $header = true;
      }
    }

    // $this->output .= $this->format->cr;
    return $this;
  }
}