You are here

function theme_tapir_table in Ubercart 6.2

Same name and namespace in other branches
  1. 7.3 uc_store/includes/tapir.inc \theme_tapir_table()

Themes form data into a table for display.

Parameters

$form: The array of form information needing to be rendered into the table.

Return value

The table output rendered in HTML.

File

uc_store/includes/tapir.inc, line 69
Contains the TAPIr code rolled into Ubercart core from Drupal contrib.

Code

function theme_tapir_table($element) {
  $header = array();
  $rows = array();

  // First sort the columns by weight.
  uasort($element['#columns'], 'uc_weight_sort');

  // Loop through the columns and create the header array.
  foreach ($element['#columns'] as $col_id => $col_data) {

    // Add the cell if available.
    if (!isset($col_data['access']) || $col_data['access'] !== FALSE) {
      $header[] = $col_data['cell'];
    }
  }

  // Loop through the row data and create rows with the data in the right order.
  foreach ($element['#rows'] as $data) {
    $attributes = array();
    $row = array();

    /* // If the row combines cell data with attributes...
        if (isset($data['data'])) {
          // Set the attributes array to be everything in the row array except the
          // data array.
          $attributes = $data;
          unset($attributes['data']);

          // Filter the data array down to just the cell data.
          $data = $data['data'];
        } */

    // Loop through each column in the header.
    foreach ($element['#columns'] as $col_id => $col_data) {

      // If this row defines cell data for the current column...
      if ((!isset($col_data['access']) || $col_data['access'] !== FALSE) && isset($data[$col_id])) {
        $cell = array();
        if (isset($data[$col_id]['#cell_attributes']) && is_array($data[$col_id]['#cell_attributes'])) {
          foreach ($data[$col_id]['#cell_attributes'] as $property => $value) {
            if ($property == 'colspan' && $value == 'full') {

              // Extend full-width cells to the number of columns actually
              // displayed.
              $value = count($header);
            }
            $cell[$property] = $value;
          }
          $cell['data'] = drupal_render($data[$col_id]);
        }
        else {
          $cell = drupal_render($data[$col_id]);
        }

        // Add it to the row array.
        $row[] = $cell;
      }
    }

    // Merge the row data into a single row array along with the attributes.
    if (isset($data['#attributes'])) {
      $row = array_merge(array(
        'data' => $row,
      ), (array) $data['#attributes']);
    }

    // Add the current row to the table rows array.
    $rows[] = $row;
  }

  // Return the rendered table.
  return theme('table', $header, $rows, (array) $element['#attributes'], $element['#title']) . (isset($element['#children']) ? $element['#children'] : '');
}