tapir.inc in Ubercart 6.2
Same filename and directory in other branches
Contains the TAPIr code rolled into Ubercart core from Drupal contrib.
File
uc_store/includes/tapir.incView source
<?php
/**
* @file
* Contains the TAPIr code rolled into Ubercart core from Drupal contrib.
*/
/**
* Load a table element for use in the Forms API or simply drupal_render().
*
* @param $table_id
* The string identifying the table you want to display, like a form ID.
* @param ...
* Any additional arguments will be passed on to the table builder function
* specified as the $table_id.
* @return
* The table form element.
*/
function tapir_get_table($table_id) {
// Get any additional arguments.
$args = func_get_args();
array_shift($args);
// Retrieve the table data and allow modules to alter it.
$table = call_user_func_array($table_id, $args);
array_unshift($args, $table_id);
$data =& $table;
// Pass the arguments in the table so that alter functions can use them.
$data['#parameters'] = $args;
drupal_alter('tapir_table', $data, $table_id);
return $table;
}
/**
* Pre-render callback for tapir_table elements.
*
* Gathers children of the tapir_table element into the #rows array. This
* allows the element to render the children within the table as rows. Non-row
* children are rendered after the table.
*/
function tapir_gather_rows($element) {
foreach (element_children($element) as $row) {
foreach (array_keys($element['#columns']) as $col_id) {
if (isset($element[$row][$col_id])) {
$element['#rows'][$row][$col_id] = $element[$row][$col_id];
unset($element[$row][$col_id]);
}
}
$element['#rows'][$row]['#attributes'] = isset($element[$row]['#attributes']) ? $element[$row]['#attributes'] : array();
}
return $element;
}
/**
* Themes form data into a table for display.
*
* @param $form
* The array of form information needing to be rendered into the table.
* @return
* The table output rendered in HTML.
* @ingroup themeable
*/
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'] : '');
}
/**
* Build an ORDER BY clause for a table's SELECT query based on the table's
* columns.
*
* @param $columns
* The column array from a TAPIr table array.
* @return
* The result of a tablesort_sql() call on the header info for this table.
*/
function tapirsort_sql($columns) {
$header = array();
// Loop through the columns array...
foreach ($columns as $column) {
// And build a header array based on column information.
$header[] = $column['cell'];
}
// Return the result of a tablesort on our header.
return tablesort_sql($header);
}
Functions
Name | Description |
---|---|
tapirsort_sql | Build an ORDER BY clause for a table's SELECT query based on the table's columns. |
tapir_gather_rows | Pre-render callback for tapir_table elements. |
tapir_get_table | Load a table element for use in the Forms API or simply drupal_render(). |
theme_tapir_table | Themes form data into a table for display. |