danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Webform module grid component.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 // Grid depends on functions provided by select.
|
danielebarchiesi@0
|
9 webform_component_include('select');
|
danielebarchiesi@0
|
10
|
danielebarchiesi@0
|
11 /**
|
danielebarchiesi@0
|
12 * Implements _webform_defaults_component().
|
danielebarchiesi@0
|
13 */
|
danielebarchiesi@0
|
14 function _webform_defaults_grid() {
|
danielebarchiesi@0
|
15 return array(
|
danielebarchiesi@0
|
16 'name' => '',
|
danielebarchiesi@0
|
17 'form_key' => NULL,
|
danielebarchiesi@0
|
18 'mandatory' => 0,
|
danielebarchiesi@0
|
19 'pid' => 0,
|
danielebarchiesi@0
|
20 'weight' => 0,
|
danielebarchiesi@0
|
21 'extra' => array(
|
danielebarchiesi@0
|
22 'options' => '',
|
danielebarchiesi@0
|
23 'questions' => '',
|
danielebarchiesi@0
|
24 'optrand' => 0,
|
danielebarchiesi@0
|
25 'qrand' => 0,
|
danielebarchiesi@0
|
26 'title_display' => 0,
|
danielebarchiesi@0
|
27 'custom_option_keys' => 0,
|
danielebarchiesi@0
|
28 'custom_question_keys' => 0,
|
danielebarchiesi@0
|
29 'description' => '',
|
danielebarchiesi@0
|
30 'private' => FALSE,
|
danielebarchiesi@0
|
31 ),
|
danielebarchiesi@0
|
32 );
|
danielebarchiesi@0
|
33 }
|
danielebarchiesi@0
|
34
|
danielebarchiesi@0
|
35
|
danielebarchiesi@0
|
36 /**
|
danielebarchiesi@0
|
37 * Implements _webform_theme_component().
|
danielebarchiesi@0
|
38 */
|
danielebarchiesi@0
|
39 function _webform_theme_grid() {
|
danielebarchiesi@0
|
40 return array(
|
danielebarchiesi@0
|
41 'webform_grid' => array(
|
danielebarchiesi@0
|
42 'render element' => 'element',
|
danielebarchiesi@0
|
43 'file' => 'components/grid.inc',
|
danielebarchiesi@0
|
44 ),
|
danielebarchiesi@0
|
45 'webform_display_grid' => array(
|
danielebarchiesi@0
|
46 'render element' => 'element',
|
danielebarchiesi@0
|
47 'file' => 'components/grid.inc',
|
danielebarchiesi@0
|
48 ),
|
danielebarchiesi@0
|
49 );
|
danielebarchiesi@0
|
50 }
|
danielebarchiesi@0
|
51
|
danielebarchiesi@0
|
52 /**
|
danielebarchiesi@0
|
53 * Implements _webform_edit_component().
|
danielebarchiesi@0
|
54 */
|
danielebarchiesi@0
|
55 function _webform_edit_grid($component) {
|
danielebarchiesi@0
|
56 $form = array();
|
danielebarchiesi@0
|
57
|
danielebarchiesi@0
|
58 if (module_exists('options_element')) {
|
danielebarchiesi@0
|
59 $form['options'] = array(
|
danielebarchiesi@0
|
60 '#type' => 'fieldset',
|
danielebarchiesi@0
|
61 '#title' => t('Options'),
|
danielebarchiesi@0
|
62 '#collapsible' => TRUE,
|
danielebarchiesi@0
|
63 '#description' => t('Options to select across the top. Usually these are ratings such as "poor" through "excellent" or "strongly disagree" through "strongly agree".'),
|
danielebarchiesi@0
|
64 '#attributes' => array('class' => array('webform-options-element')),
|
danielebarchiesi@0
|
65 '#element_validate' => array('_webform_edit_validate_options'),
|
danielebarchiesi@0
|
66 );
|
danielebarchiesi@0
|
67 $form['options']['options'] = array(
|
danielebarchiesi@0
|
68 '#type' => 'options',
|
danielebarchiesi@0
|
69 '#options' => _webform_select_options_from_text($component['extra']['options'], TRUE),
|
danielebarchiesi@0
|
70 '#optgroups' => FALSE,
|
danielebarchiesi@0
|
71 '#default_value' => FALSE,
|
danielebarchiesi@0
|
72 '#default_value_allowed' => FALSE,
|
danielebarchiesi@0
|
73 '#optgroups' => FALSE,
|
danielebarchiesi@0
|
74 '#key_type' => 'mixed',
|
danielebarchiesi@0
|
75 '#key_type_toggle' => t('Customize option keys (Advanced)'),
|
danielebarchiesi@0
|
76 '#key_type_toggled' => $component['extra']['custom_option_keys'],
|
danielebarchiesi@0
|
77 );
|
danielebarchiesi@0
|
78
|
danielebarchiesi@0
|
79 $form['questions'] = array(
|
danielebarchiesi@0
|
80 '#type' => 'fieldset',
|
danielebarchiesi@0
|
81 '#title' => t('Questions'),
|
danielebarchiesi@0
|
82 '#collapsible' => TRUE,
|
danielebarchiesi@0
|
83 '#description' => t('Questions list down the side of the grid.'),
|
danielebarchiesi@0
|
84 '#attributes' => array('class' => array('webform-options-element')),
|
danielebarchiesi@0
|
85 '#element_validate' => array('_webform_edit_validate_options'),
|
danielebarchiesi@0
|
86 );
|
danielebarchiesi@0
|
87 $form['questions']['options'] = array(
|
danielebarchiesi@0
|
88 '#type' => 'options',
|
danielebarchiesi@0
|
89 '#options' => _webform_select_options_from_text($component['extra']['questions'], TRUE),
|
danielebarchiesi@0
|
90 '#optgroups' => FALSE,
|
danielebarchiesi@0
|
91 '#default_value' => FALSE,
|
danielebarchiesi@0
|
92 '#default_value_allowed' => FALSE,
|
danielebarchiesi@0
|
93 '#optgroups' => FALSE,
|
danielebarchiesi@0
|
94 '#key_type' => 'mixed',
|
danielebarchiesi@0
|
95 '#key_type_toggle' => t('Customize question keys (Advanced)'),
|
danielebarchiesi@0
|
96 '#key_type_toggled' => $component['extra']['custom_question_keys'],
|
danielebarchiesi@0
|
97 );
|
danielebarchiesi@0
|
98 }
|
danielebarchiesi@0
|
99 else {
|
danielebarchiesi@0
|
100 $form['extra']['options'] = array(
|
danielebarchiesi@0
|
101 '#type' => 'textarea',
|
danielebarchiesi@0
|
102 '#title' => t('Options'),
|
danielebarchiesi@0
|
103 '#default_value' => $component['extra']['options'],
|
danielebarchiesi@0
|
104 '#description' => t('Options to select across the top. One option per line. <strong>Key-value pairs MUST be specified as "safe_key|Some readable option"</strong>. Use of only alphanumeric characters and underscores is recommended in keys.') . theme('webform_token_help'),
|
danielebarchiesi@0
|
105 '#cols' => 60,
|
danielebarchiesi@0
|
106 '#rows' => 5,
|
danielebarchiesi@0
|
107 '#weight' => -3,
|
danielebarchiesi@0
|
108 '#required' => TRUE,
|
danielebarchiesi@0
|
109 '#wysiwyg' => FALSE,
|
danielebarchiesi@0
|
110 '#element_validate' => array('_webform_edit_validate_select'),
|
danielebarchiesi@0
|
111 );
|
danielebarchiesi@0
|
112 $form['extra']['questions'] = array(
|
danielebarchiesi@0
|
113 '#type' => 'textarea',
|
danielebarchiesi@0
|
114 '#title' => t('Questions'),
|
danielebarchiesi@0
|
115 '#default_value' => $component['extra']['questions'],
|
danielebarchiesi@0
|
116 '#description' => t('Questions list down the side of the grid. One question per line. <strong>Key-value pairs MUST be specified as "safe_key|Some readable option"</strong>. Use of only alphanumeric characters and underscores is recommended in keys.') . theme('webform_token_help'),
|
danielebarchiesi@0
|
117 '#cols' => 60,
|
danielebarchiesi@0
|
118 '#rows' => 5,
|
danielebarchiesi@0
|
119 '#weight' => -2,
|
danielebarchiesi@0
|
120 '#required' => TRUE,
|
danielebarchiesi@0
|
121 '#wysiwyg' => FALSE,
|
danielebarchiesi@0
|
122 '#element_validate' => array('_webform_edit_validate_select'),
|
danielebarchiesi@0
|
123 );
|
danielebarchiesi@0
|
124 }
|
danielebarchiesi@0
|
125
|
danielebarchiesi@0
|
126 $form['display']['optrand'] = array(
|
danielebarchiesi@0
|
127 '#type' => 'checkbox',
|
danielebarchiesi@0
|
128 '#title' => t('Randomize Options'),
|
danielebarchiesi@0
|
129 '#default_value' => $component['extra']['optrand'],
|
danielebarchiesi@0
|
130 '#description' => t('Randomizes the order of options on the top when they are displayed in the form.'),
|
danielebarchiesi@0
|
131 '#parents' => array('extra', 'optrand')
|
danielebarchiesi@0
|
132 );
|
danielebarchiesi@0
|
133 $form['display']['qrand'] = array(
|
danielebarchiesi@0
|
134 '#type' => 'checkbox',
|
danielebarchiesi@0
|
135 '#title' => t('Randomize Questions'),
|
danielebarchiesi@0
|
136 '#default_value' => $component['extra']['qrand'],
|
danielebarchiesi@0
|
137 '#description' => t('Randomize the order of the questions on the side when they are displayed in the form.'),
|
danielebarchiesi@0
|
138 '#parents' => array('extra', 'qrand')
|
danielebarchiesi@0
|
139 );
|
danielebarchiesi@0
|
140 return $form;
|
danielebarchiesi@0
|
141 }
|
danielebarchiesi@0
|
142
|
danielebarchiesi@0
|
143 /**
|
danielebarchiesi@0
|
144 * Implements _webform_render_component().
|
danielebarchiesi@0
|
145 */
|
danielebarchiesi@0
|
146 function _webform_render_grid($component, $value = NULL, $filter = TRUE) {
|
danielebarchiesi@0
|
147 $node = isset($component['nid']) ? node_load($component['nid']) : NULL;
|
danielebarchiesi@0
|
148
|
danielebarchiesi@0
|
149 $element = array(
|
danielebarchiesi@0
|
150 '#type' => 'webform_grid',
|
danielebarchiesi@0
|
151 '#title' => $filter ? _webform_filter_xss($component['name']) : $component['name'],
|
danielebarchiesi@0
|
152 '#title_display' => $component['extra']['title_display'] ? $component['extra']['title_display'] : 'before',
|
danielebarchiesi@0
|
153 '#required' => $component['mandatory'],
|
danielebarchiesi@0
|
154 '#weight' => $component['weight'],
|
danielebarchiesi@0
|
155 '#description' => $filter ? _webform_filter_descriptions($component['extra']['description'], $node) : $component['extra']['description'],
|
danielebarchiesi@0
|
156 '#grid_questions' => _webform_select_options_from_text($component['extra']['questions'], TRUE),
|
danielebarchiesi@0
|
157 '#grid_options' => _webform_select_options_from_text($component['extra']['options'], TRUE),
|
danielebarchiesi@0
|
158 '#optrand' => $component['extra']['optrand'],
|
danielebarchiesi@0
|
159 '#qrand' => $component['extra']['qrand'],
|
danielebarchiesi@0
|
160 '#theme' => 'webform_grid',
|
danielebarchiesi@0
|
161 '#theme_wrappers' => array('webform_element'),
|
danielebarchiesi@0
|
162 '#process' => array('webform_expand_grid'),
|
danielebarchiesi@0
|
163 '#translatable' => array('title', 'description', 'grid_options', 'grid_questions'),
|
danielebarchiesi@0
|
164 );
|
danielebarchiesi@0
|
165
|
danielebarchiesi@0
|
166 if ($value) {
|
danielebarchiesi@0
|
167 $element['#default_value'] = $value;
|
danielebarchiesi@0
|
168 }
|
danielebarchiesi@0
|
169
|
danielebarchiesi@0
|
170 return $element;
|
danielebarchiesi@0
|
171 }
|
danielebarchiesi@0
|
172
|
danielebarchiesi@0
|
173 /**
|
danielebarchiesi@0
|
174 * A Form API #process function for Webform grid fields.
|
danielebarchiesi@0
|
175 */
|
danielebarchiesi@0
|
176 function webform_expand_grid($element) {
|
danielebarchiesi@0
|
177 $options = $element['#grid_options'];
|
danielebarchiesi@0
|
178 $questions = $element['#grid_questions'];
|
danielebarchiesi@0
|
179
|
danielebarchiesi@0
|
180 if (!empty($element['#optrand'])) {
|
danielebarchiesi@0
|
181 _webform_shuffle_options($options);
|
danielebarchiesi@0
|
182 }
|
danielebarchiesi@0
|
183
|
danielebarchiesi@0
|
184 if (!empty($element['#qrand'])) {
|
danielebarchiesi@0
|
185 _webform_shuffle_options($questions);
|
danielebarchiesi@0
|
186 }
|
danielebarchiesi@0
|
187
|
danielebarchiesi@0
|
188 foreach ($questions as $key => $question) {
|
danielebarchiesi@0
|
189 if ($question != '') {
|
danielebarchiesi@0
|
190 $element[$key] = array(
|
danielebarchiesi@0
|
191 '#title' => $question,
|
danielebarchiesi@0
|
192 '#required' => $element['#required'],
|
danielebarchiesi@0
|
193 '#options' => $options,
|
danielebarchiesi@0
|
194 '#type' => 'radios',
|
danielebarchiesi@0
|
195 '#process' => array('form_process_radios', 'webform_expand_select_ids'),
|
danielebarchiesi@0
|
196
|
danielebarchiesi@0
|
197 // Webform handles validation manually.
|
danielebarchiesi@0
|
198 '#validated' => TRUE,
|
danielebarchiesi@0
|
199 '#webform_validated' => FALSE,
|
danielebarchiesi@0
|
200 '#translatable' => array('title'),
|
danielebarchiesi@0
|
201 );
|
danielebarchiesi@0
|
202 }
|
danielebarchiesi@0
|
203 }
|
danielebarchiesi@0
|
204
|
danielebarchiesi@0
|
205 $value = isset($element['#default_value']) ? $element['#default_value'] : array();
|
danielebarchiesi@0
|
206 foreach (element_children($element) as $key) {
|
danielebarchiesi@0
|
207 if (isset($value[$key])) {
|
danielebarchiesi@0
|
208 $element[$key]['#default_value'] = ($value[$key] !== '') ? $value[$key] : NULL;
|
danielebarchiesi@0
|
209 }
|
danielebarchiesi@0
|
210 else {
|
danielebarchiesi@0
|
211 $element[$key]['#default_value'] = NULL;
|
danielebarchiesi@0
|
212 }
|
danielebarchiesi@0
|
213 }
|
danielebarchiesi@0
|
214
|
danielebarchiesi@0
|
215 return $element;
|
danielebarchiesi@0
|
216 }
|
danielebarchiesi@0
|
217
|
danielebarchiesi@0
|
218 /**
|
danielebarchiesi@0
|
219 * Implements _webform_display_component().
|
danielebarchiesi@0
|
220 */
|
danielebarchiesi@0
|
221 function _webform_display_grid($component, $value, $format = 'html') {
|
danielebarchiesi@0
|
222 $questions = _webform_select_options_from_text($component['extra']['questions'], TRUE);
|
danielebarchiesi@0
|
223 $options = _webform_select_options_from_text($component['extra']['options'], TRUE);
|
danielebarchiesi@0
|
224
|
danielebarchiesi@0
|
225 $element = array(
|
danielebarchiesi@0
|
226 '#title' => $component['name'],
|
danielebarchiesi@0
|
227 '#weight' => $component['weight'],
|
danielebarchiesi@0
|
228 '#format' => $format,
|
danielebarchiesi@0
|
229 '#grid_questions' => $questions,
|
danielebarchiesi@0
|
230 '#grid_options' => $options,
|
danielebarchiesi@0
|
231 '#theme' => 'webform_display_grid',
|
danielebarchiesi@0
|
232 '#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
|
danielebarchiesi@0
|
233 '#sorted' => TRUE,
|
danielebarchiesi@0
|
234 '#translatable' => array('#title', '#grid_questions', '#grid_options'),
|
danielebarchiesi@0
|
235 );
|
danielebarchiesi@0
|
236
|
danielebarchiesi@0
|
237 foreach ($questions as $key => $question) {
|
danielebarchiesi@0
|
238 if ($question !== '') {
|
danielebarchiesi@0
|
239 $element[$key] = array(
|
danielebarchiesi@0
|
240 '#title' => $question,
|
danielebarchiesi@0
|
241 '#value' => isset($value[$key]) ? $value[$key] : NULL,
|
danielebarchiesi@0
|
242 '#translatable' => array('#title', '#value'),
|
danielebarchiesi@0
|
243 );
|
danielebarchiesi@0
|
244 }
|
danielebarchiesi@0
|
245 }
|
danielebarchiesi@0
|
246
|
danielebarchiesi@0
|
247 return $element;
|
danielebarchiesi@0
|
248 }
|
danielebarchiesi@0
|
249
|
danielebarchiesi@0
|
250 /**
|
danielebarchiesi@0
|
251 * Format the text output for this component.
|
danielebarchiesi@0
|
252 */
|
danielebarchiesi@0
|
253 function theme_webform_display_grid($variables) {
|
danielebarchiesi@0
|
254 $element = $variables['element'];
|
danielebarchiesi@0
|
255
|
danielebarchiesi@0
|
256 $component = $element['#webform_component'];
|
danielebarchiesi@0
|
257 $format = $element['#format'];
|
danielebarchiesi@0
|
258
|
danielebarchiesi@0
|
259 if ($format == 'html') {
|
danielebarchiesi@0
|
260 $rows = array();
|
danielebarchiesi@0
|
261 $header = array(array('data' => '', 'class' => array('webform-grid-question')));
|
danielebarchiesi@0
|
262 foreach ($element['#grid_options'] as $option) {
|
danielebarchiesi@0
|
263 $header[] = array('data' => _webform_filter_xss($option), 'class' => array('checkbox', 'webform-grid-option'));
|
danielebarchiesi@0
|
264 }
|
danielebarchiesi@0
|
265 foreach ($element['#grid_questions'] as $question_key => $question) {
|
danielebarchiesi@0
|
266 $row = array();
|
danielebarchiesi@0
|
267 $row[] = array('data' => _webform_filter_xss($question), 'class' => array('webform-grid-question'));
|
danielebarchiesi@0
|
268 foreach ($element['#grid_options'] as $option_value => $option_label) {
|
danielebarchiesi@0
|
269 if (strcmp($element[$question_key]['#value'], $option_value) == 0) {
|
danielebarchiesi@0
|
270 $row[] = array('data' => '<strong>X</strong>', 'class' => array('checkbox', 'webform-grid-option'));
|
danielebarchiesi@0
|
271 }
|
danielebarchiesi@0
|
272 else {
|
danielebarchiesi@0
|
273 $row[] = array('data' => ' ', 'class' => array('checkbox', 'webform-grid-option'));
|
danielebarchiesi@0
|
274 }
|
danielebarchiesi@0
|
275 }
|
danielebarchiesi@0
|
276 $rows[] = $row;
|
danielebarchiesi@0
|
277 }
|
danielebarchiesi@0
|
278
|
danielebarchiesi@0
|
279 $option_count = count($header) - 1;
|
danielebarchiesi@0
|
280 $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('webform-grid', 'webform-grid-' . $option_count))));
|
danielebarchiesi@0
|
281 }
|
danielebarchiesi@0
|
282 else {
|
danielebarchiesi@0
|
283 $items = array();
|
danielebarchiesi@0
|
284 foreach (element_children($element) as $key) {
|
danielebarchiesi@0
|
285 $items[] = ' - ' . $element[$key]['#title'] . ': ' . (isset($element['#grid_options'][$element[$key]['#value']]) ? $element['#grid_options'][$element[$key]['#value']] : '');
|
danielebarchiesi@0
|
286 }
|
danielebarchiesi@0
|
287 $output = implode("\n", $items);
|
danielebarchiesi@0
|
288 }
|
danielebarchiesi@0
|
289
|
danielebarchiesi@0
|
290 return $output;
|
danielebarchiesi@0
|
291 }
|
danielebarchiesi@0
|
292
|
danielebarchiesi@0
|
293 /**
|
danielebarchiesi@0
|
294 * Implements _webform_analysis_component().
|
danielebarchiesi@0
|
295 */
|
danielebarchiesi@0
|
296 function _webform_analysis_grid($component, $sids = array()) {
|
danielebarchiesi@0
|
297 // Generate the list of options and questions.
|
danielebarchiesi@0
|
298 $options = _webform_select_options_from_text($component['extra']['options'], TRUE);
|
danielebarchiesi@0
|
299 $questions = _webform_select_options_from_text($component['extra']['questions'], TRUE);
|
danielebarchiesi@0
|
300
|
danielebarchiesi@0
|
301 // Generate a lookup table of results.
|
danielebarchiesi@0
|
302 $query = db_select('webform_submitted_data', 'wsd')
|
danielebarchiesi@0
|
303 ->fields('wsd', array('no', 'data'))
|
danielebarchiesi@0
|
304 ->condition('nid', $component['nid'])
|
danielebarchiesi@0
|
305 ->condition('cid', $component['cid'])
|
danielebarchiesi@0
|
306 ->condition('data', '', '<>')
|
danielebarchiesi@0
|
307 ->groupBy('no')
|
danielebarchiesi@0
|
308 ->groupBy('data');
|
danielebarchiesi@0
|
309 $query->addExpression('COUNT(sid)', 'datacount');
|
danielebarchiesi@0
|
310
|
danielebarchiesi@0
|
311 if (count($sids)) {
|
danielebarchiesi@0
|
312 $query->condition('sid', $sids, 'IN');
|
danielebarchiesi@0
|
313 }
|
danielebarchiesi@0
|
314
|
danielebarchiesi@0
|
315 $result = $query->execute();
|
danielebarchiesi@0
|
316 $counts = array();
|
danielebarchiesi@0
|
317 foreach ($result as $data) {
|
danielebarchiesi@0
|
318 $counts[$data->no][$data->data] = $data->datacount;
|
danielebarchiesi@0
|
319 }
|
danielebarchiesi@0
|
320
|
danielebarchiesi@0
|
321 // Create an entire table to be put into the returned row.
|
danielebarchiesi@0
|
322 $rows = array();
|
danielebarchiesi@0
|
323 $header = array('');
|
danielebarchiesi@0
|
324
|
danielebarchiesi@0
|
325 // Add options as a header row.
|
danielebarchiesi@0
|
326 foreach ($options as $option) {
|
danielebarchiesi@0
|
327 $header[] = _webform_filter_xss($option);
|
danielebarchiesi@0
|
328 }
|
danielebarchiesi@0
|
329
|
danielebarchiesi@0
|
330 // Add questions as each row.
|
danielebarchiesi@0
|
331 foreach ($questions as $qkey => $question) {
|
danielebarchiesi@0
|
332 $row = array(_webform_filter_xss($question));
|
danielebarchiesi@0
|
333 foreach ($options as $okey => $option) {
|
danielebarchiesi@0
|
334 $row[] = !empty($counts[$qkey][$okey]) ? $counts[$qkey][$okey] : 0;
|
danielebarchiesi@0
|
335 }
|
danielebarchiesi@0
|
336 $rows[] = $row;
|
danielebarchiesi@0
|
337 }
|
danielebarchiesi@0
|
338 $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('webform-grid'))));
|
danielebarchiesi@0
|
339
|
danielebarchiesi@0
|
340
|
danielebarchiesi@0
|
341 return array(array(array('data' => $output, 'colspan' => 2)));
|
danielebarchiesi@0
|
342 }
|
danielebarchiesi@0
|
343
|
danielebarchiesi@0
|
344 /**
|
danielebarchiesi@0
|
345 * Implements _webform_table_component().
|
danielebarchiesi@0
|
346 */
|
danielebarchiesi@0
|
347 function _webform_table_grid($component, $value) {
|
danielebarchiesi@0
|
348 $questions = _webform_select_options_from_text($component['extra']['questions'], TRUE);
|
danielebarchiesi@0
|
349 $options = _webform_select_options_from_text($component['extra']['options'], TRUE);
|
danielebarchiesi@0
|
350
|
danielebarchiesi@0
|
351 $output = '';
|
danielebarchiesi@0
|
352 // Set the value as a single string.
|
danielebarchiesi@0
|
353 foreach ($questions as $key => $label) {
|
danielebarchiesi@0
|
354 if (isset($value[$key]) && isset($options[$value[$key]])) {
|
danielebarchiesi@0
|
355 $output .= _webform_filter_xss($label) . ': ' . _webform_filter_xss($options[$value[$key]]) . '<br />';
|
danielebarchiesi@0
|
356 }
|
danielebarchiesi@0
|
357 }
|
danielebarchiesi@0
|
358
|
danielebarchiesi@0
|
359 return $output;
|
danielebarchiesi@0
|
360 }
|
danielebarchiesi@0
|
361
|
danielebarchiesi@0
|
362 /**
|
danielebarchiesi@0
|
363 * Implements _webform_csv_headers_component().
|
danielebarchiesi@0
|
364 */
|
danielebarchiesi@0
|
365 function _webform_csv_headers_grid($component, $export_options) {
|
danielebarchiesi@0
|
366 $header = array();
|
danielebarchiesi@0
|
367 $header[0] = array('');
|
danielebarchiesi@0
|
368 $header[1] = array($component['name']);
|
danielebarchiesi@0
|
369 $items = _webform_select_options_from_text($component['extra']['questions'], TRUE);
|
danielebarchiesi@0
|
370 $count = 0;
|
danielebarchiesi@0
|
371 foreach ($items as $key => $item) {
|
danielebarchiesi@0
|
372 // Empty column per sub-field in main header.
|
danielebarchiesi@0
|
373 if ($count != 0) {
|
danielebarchiesi@0
|
374 $header[0][] = '';
|
danielebarchiesi@0
|
375 $header[1][] = '';
|
danielebarchiesi@0
|
376 }
|
danielebarchiesi@0
|
377 // The value for this option.
|
danielebarchiesi@0
|
378 $header[2][] = $item;
|
danielebarchiesi@0
|
379 $count++;
|
danielebarchiesi@0
|
380 }
|
danielebarchiesi@0
|
381
|
danielebarchiesi@0
|
382 return $header;
|
danielebarchiesi@0
|
383 }
|
danielebarchiesi@0
|
384
|
danielebarchiesi@0
|
385 /**
|
danielebarchiesi@0
|
386 * Implements _webform_csv_data_component().
|
danielebarchiesi@0
|
387 */
|
danielebarchiesi@0
|
388 function _webform_csv_data_grid($component, $export_options, $value) {
|
danielebarchiesi@0
|
389 $questions = _webform_select_options_from_text($component['extra']['questions'], TRUE);
|
danielebarchiesi@0
|
390 $options = _webform_select_options_from_text($component['extra']['options'], TRUE);
|
danielebarchiesi@0
|
391 $return = array();
|
danielebarchiesi@0
|
392 foreach ($questions as $key => $question) {
|
danielebarchiesi@0
|
393 if (isset($value[$key]) && isset($options[$value[$key]])) {
|
danielebarchiesi@0
|
394 $return[] = $export_options['select_keys'] ? $value[$key] : $options[$value[$key]];
|
danielebarchiesi@0
|
395 }
|
danielebarchiesi@0
|
396 else {
|
danielebarchiesi@0
|
397 $return[] = '';
|
danielebarchiesi@0
|
398 }
|
danielebarchiesi@0
|
399 }
|
danielebarchiesi@0
|
400 return $return;
|
danielebarchiesi@0
|
401 }
|
danielebarchiesi@0
|
402
|
danielebarchiesi@0
|
403 function theme_webform_grid($variables) {
|
danielebarchiesi@0
|
404 $element = $variables['element'];
|
danielebarchiesi@0
|
405
|
danielebarchiesi@0
|
406 $rows = array();
|
danielebarchiesi@0
|
407 $header = array(array('data' => '', 'class' => array('webform-grid-question')));
|
danielebarchiesi@0
|
408 // Set the header for the table.
|
danielebarchiesi@0
|
409 foreach ($element['#grid_options'] as $option) {
|
danielebarchiesi@0
|
410 $header[] = array('data' => _webform_filter_xss($option), 'class' => array('checkbox', 'webform-grid-option'));
|
danielebarchiesi@0
|
411 }
|
danielebarchiesi@0
|
412
|
danielebarchiesi@0
|
413 foreach (element_children($element) as $key) {
|
danielebarchiesi@0
|
414 $question_element = $element[$key];
|
danielebarchiesi@0
|
415
|
danielebarchiesi@0
|
416 // Create a row with the question title.
|
danielebarchiesi@0
|
417 $row = array(array('data' => _webform_filter_xss($question_element['#title']), 'class' => array('webform-grid-question')));
|
danielebarchiesi@0
|
418
|
danielebarchiesi@0
|
419 // Render each radio button in the row.
|
danielebarchiesi@0
|
420 $radios = form_process_radios($question_element);
|
danielebarchiesi@0
|
421 foreach (element_children($radios) as $key) {
|
danielebarchiesi@0
|
422 $radios[$key]['#title_display'] = 'invisible';
|
danielebarchiesi@0
|
423 $row[] = array('data' => drupal_render($radios[$key]), 'class' => array('checkbox', 'webform-grid-option'));
|
danielebarchiesi@0
|
424 }
|
danielebarchiesi@0
|
425 $rows[] = $row;
|
danielebarchiesi@0
|
426 }
|
danielebarchiesi@0
|
427
|
danielebarchiesi@0
|
428 $option_count = count($header) - 1;
|
danielebarchiesi@0
|
429 return theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('webform-grid', 'webform-grid-' . $option_count))));
|
danielebarchiesi@0
|
430 }
|