commiting uncommited changes on live site
[weblabels.fsf.org.git] / crm.fsf.org / 20131203 / files / sites / all / modules-old / tableform / tableform.module
1 <?php
2
3 /*************************************************************
4 MODULE HOOKS
5 *************************************************************/
6
7 /**
8 * Implementation of hook_theme();
9 */
10 function tableform_theme() {
11 return array(
12 'tableform' => array(
13 'render element' => 'element',
14 ),
15 );
16 }
17
18 /**
19 * Implementation of hook_element_info();
20 */
21 function tableform_element_info() {
22 $types['tableform'] = array(
23 '#input' => TRUE,
24 '#process' => array('form_process_tableform'),
25 '#options' => array(),
26 '#empty' => '',
27 '#theme' => 'tableform',
28 '#theme_wrappers' => array('form_element'),
29 );
30
31 return $types;
32 }
33
34 /*************************************************************
35 FORMS
36 *************************************************************/
37
38 /**
39 * Process the elements to populate the table.
40 *
41 * @param $element
42 * An associative array containing the properties and children of the
43 * tableform element.
44 * @return
45 * The processed element.
46 */
47 function form_process_tableform($element) {
48 // process header cells
49 $header_field = isset($element['#tf_header']) ? '#tf_header' : '#header';
50
51 foreach ($element[$header_field] as $key => $cell) {
52 if (is_array($cell)) {
53 $element[$key] = $cell;
54 }
55 }
56
57 // process rows
58 $rows_field = isset($element['#tf_rows']) ? '#tf_rows' : '#options';
59
60 foreach ($element[$rows_field] as $row_key => $row) {
61 foreach ($row as $key => $cell) {
62 if (is_array($cell)) {
63 $element[$key] = $cell;
64 }
65 }
66 }
67
68 return $element;
69 }
70
71 /*************************************************************
72 THEMING
73 *************************************************************/
74
75 /**
76 * Returns HTML for a tableform form element.
77 *
78 * @param $variables
79 * An associative array containing:
80 * - element: An associative array containing the properties of the element.
81 * Properties used: #title, #header, #options, #attributes
82 *
83 * @ingroup themeable
84 */
85 function theme_tableform($variables) {
86 $element = $variables['element'];
87 $rows = array();
88 $header = array();
89
90 // process header cells
91 $header_field = isset($element['#tf_header']) ? '#tf_header' : '#header';
92
93 if (!empty($element[$header_field])) {
94 foreach ($element[$header_field] as $key => $cell) {
95 $header[] = tableform_render_cell($element, $cell, $key);
96 }
97 }
98
99 // process rows
100 $rows_field = isset($element['#tf_rows']) ? '#tf_rows' : '#options';
101
102 if (!empty($element[$rows_field])) {
103 foreach ($element[$rows_field] as $row) {
104 $rendered = array(
105 'data' => array(),
106 );
107
108 foreach ($row as $key => $cell) {
109 $rendered['data'][] = tableform_render_cell($element, $cell, $key);
110 }
111
112 $rows[] = $rendered;
113 }
114 }
115
116 return theme('table', array('header' => $header, 'rows' => $rows, 'empty' => $element['#empty'], 'attributes' => $element['#attributes']));
117 }
118
119 /*************************************************************
120 INTERNAL
121 *************************************************************/
122
123 /**
124 * Helper to render a header/row cell.
125 */
126 function tableform_render_cell($element, $cell, $key) {
127 return is_array($cell) ? drupal_render($element[$key]) : $cell;
128 }