3 /*************************************************************
5 *************************************************************/
8 * Implementation of hook_theme();
10 function tableform_theme() {
13 'render element' => 'element',
19 * Implementation of hook_element_info();
21 function tableform_element_info() {
22 $types['tableform'] = array(
24 '#process' => array('form_process_tableform'),
25 '#options' => array(),
27 '#theme' => 'tableform',
28 '#theme_wrappers' => array('form_element'),
34 /*************************************************************
36 *************************************************************/
39 * Process the elements to populate the table.
42 * An associative array containing the properties and children of the
45 * The processed element.
47 function form_process_tableform($element) {
48 // process header cells
49 $header_field = isset($element['#tf_header']) ? '#tf_header' : '#header';
51 foreach ($element[$header_field] as $key => $cell) {
52 if (is_array($cell)) {
53 $element[$key] = $cell;
58 $rows_field = isset($element['#tf_rows']) ? '#tf_rows' : '#options';
60 foreach ($element[$rows_field] as $row_key => $row) {
61 foreach ($row as $key => $cell) {
62 if (is_array($cell)) {
63 $element[$key] = $cell;
71 /*************************************************************
73 *************************************************************/
76 * Returns HTML for a tableform form element.
79 * An associative array containing:
80 * - element: An associative array containing the properties of the element.
81 * Properties used: #title, #header, #options, #attributes
85 function theme_tableform($variables) {
86 $element = $variables['element'];
90 // process header cells
91 $header_field = isset($element['#tf_header']) ? '#tf_header' : '#header';
93 if (!empty($element[$header_field])) {
94 foreach ($element[$header_field] as $key => $cell) {
95 $header[] = tableform_render_cell($element, $cell, $key);
100 $rows_field = isset($element['#tf_rows']) ? '#tf_rows' : '#options';
102 if (!empty($element[$rows_field])) {
103 foreach ($element[$rows_field] as $row) {
108 foreach ($row as $key => $cell) {
109 $rendered['data'][] = tableform_render_cell($element, $cell, $key);
116 return theme('table', array('header' => $header, 'rows' => $rows, 'empty' => $element['#empty'], 'attributes' => $element['#attributes']));
119 /*************************************************************
121 *************************************************************/
124 * Helper to render a header/row cell.
126 function tableform_render_cell($element, $cell, $key) {
127 return is_array($cell) ? drupal_render($element[$key]) : $cell;