-
Notifications
You must be signed in to change notification settings - Fork 0
/
webform_html_textarea.module
325 lines (301 loc) · 11 KB
/
webform_html_textarea.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
<?php
/**
* @file
* Webform module textarea component.
*/
/**
* Implements hook_webform_component_info().
*/
function webform_html_textarea_webform_component_info() {
return array(
'html_textarea' => array(
'label' => t('HTML Textarea'),
'description' => t('A large text area that allows for multiple lines of input in HMTL. Supports text formats.'),
'features' => array(
'spam_analysis' => TRUE,
),
),
);
}
/**
* Implements _webform_defaults_component().
*/
function _webform_defaults_html_textarea() {
return array(
'name' => '',
'form_key' => NULL,
'pid' => 0,
'weight' => 0,
'value' => '',
'mandatory' => 0,
'required' => 0,
'extra' => array(
'cols' => '',
'rows' => '',
'title_display' => 0,
'resizable' => 1,
'disabled' => 0,
'description' => '',
'attributes' => array(),
'format' => filter_default_format(),
'show_format_fieldset' => 1,
'show_tips' => 1,
'show_link' => 1,
'private' => FALSE,
),
);
}
/**
* Implements _webform_theme_component().
*/
function _webform_theme_html_textarea() {
return array(
'webform_display_html_textarea' => array(
'render element' => 'element',
),
);
}
/**
* Implements _webform_edit_component().
*/
function _webform_edit_html_textarea($component) {
$form = array();
$form['#tree'] = TRUE;
$form['value'] = array(
'#type' => 'text_format',
'#base_type' => 'textarea',
'#title' => t('Default value'),
'#default_value' => check_markup($component['value'], $component['extra']['format']),
'#description' => t('The default value of the field. The text format selected here will be used when displaying this field. ') . theme('webform_token_help'),
'#cols' => 60,
'#rows' => 5,
'#weight' => 0,
'#format' => $component['extra']['format'],
);
$form['display']['cols'] = array(
'#type' => 'textfield',
'#title' => t('Width'),
'#default_value' => $component['extra']['cols'],
'#description' => t('Width of the textarea.') . ' ' . t('Leaving blank will use the default size.'),
'#size' => 5,
'#maxlength' => 10,
'#parents' => array('extra', 'cols'),
);
$form['display']['rows'] = array(
'#type' => 'textfield',
'#title' => t('Height'),
'#default_value' => $component['extra']['rows'],
'#description' => t('Height of the textarea.') . ' ' . t('Leaving blank will use the default size.'),
'#size' => 5,
'#maxlength' => 10,
'#parents' => array('extra', 'rows'),
);
$form['display']['resizable'] = array(
'#type' => 'checkbox',
'#title' => t('Resizable'),
'#description' => t('Make this field resizable by the user.'),
'#weight' => 2,
'#default_value' => $component['extra']['resizable'],
'#parents' => array('extra', 'resizable'),
);
$form['display']['disabled'] = array(
'#type' => 'checkbox',
'#title' => t('Disabled'),
'#return_value' => 1,
'#description' => t('Make this field non-editable. Useful for setting an unchangeable default value.'),
'#weight' => 11,
'#default_value' => $component['extra']['disabled'],
'#parents' => array('extra', 'disabled'),
);
$form['display']['show_format_fieldset'] = array(
'#type' => 'checkbox',
'#title' => t('Show format selection'),
'#description' => t('Show format selection to the user. @notice', array('@notice' => t('Note: The user won\'t be able to change the selected format, he\'ll just be able to see it.'))),
'#weight' => 10,
'#default_value' => $component['extra']['show_format_fieldset'],
'#parents' => array('extra', 'show_format_fieldset'),
);
$form['display']['show_tips'] = array(
'#type' => 'checkbox',
'#title' => t('Show filter tips'),
'#description' => t('Show the filter tips to the user.'),
'#weight' => 11,
'#default_value' => $component['extra']['show_tips'],
'#parents' => array('extra', 'show_tips'),
'#states' => array(
'visible' => array(
':input[name="extra[show_format_fieldset]"]' => array('checked' => TRUE),
),
),
);
$form['display']['show_link'] = array(
'#type' => 'checkbox',
'#title' => t('Show "More information about text formats" link'),
'#description' => t('Show the "More information about text formats" link to the user.'),
'#weight' => 11,
'#default_value' => $component['extra']['show_link'],
'#parents' => array('extra', 'show_link'),
'#states' => array(
'visible' => array(
':input[name="extra[show_format_fieldset]"]' => array('checked' => TRUE),
),
),
);
return $form;
}
/**
* Implements hook_webform_component_presave().
*/
function webform_html_textarea_webform_component_presave(&$component) {
if ($component['type'] == 'html_textarea') {
// Components saved via UI will have value in an array keyed by value and format.
if (isset($component['value']) && is_array($component['value'])) {
$component['extra']['format'] = $component['value']['format'];
$value = $component['value']['value'];
}
// Components saved via other methods may have value as a string.
else {
$value = isset($component['value']) ? $component['value'] : '';
}
$format = isset($component['extra']['format']) ? $component['extra']['format'] : filter_default_format();
$component['value'] = check_markup($value, $format);
}
}
/**
* Implements _webform_render_component().
*/
function _webform_render_html_textarea($component, $value = NULL, $filter = TRUE) {
$element = array(
'#weight' => $component['weight'],
'#webform_component' => $component,
'#type' => 'text_format',
'#base_type' => 'textarea',
'#title' => $filter ? _webform_filter_xss($component['name']) : $component['name'],
'#title_display' => $component['extra']['title_display'] ? $component['extra']['title_display'] : 'before',
'#default_value' => $filter ? _webform_filter_values($component['value']) : $component['value'],
'#required' => !empty($component['required']) || !empty($component['mandatory']),
'#weight' => $component['weight'],
'#description' => $filter ? _webform_filter_descriptions($component['extra']['description']) : $component['extra']['description'],
'#rows' => !empty($component['extra']['rows']) ? $component['extra']['rows'] : 5,
'#cols' => !empty($component['extra']['cols']) ? $component['extra']['cols'] : 60,
'#attributes' => $component['extra']['attributes'],
'#resizable' => (bool) $component['extra']['resizable'], // MUST be FALSE to disable.
'#format' => $component['extra']['format'],
'#after_build' => array('_webform_html_textarea_after_build'),
);
if ($component['extra']['disabled']) {
$element['#attributes']['readonly'] = 'readonly';
}
if (isset($value)) {
$element['#default_value'] = check_markup($value[0], $component['extra']['format']);
}
return $element;
}
/**
*
*/
function _webform_html_textarea_after_build($element) {
// Wysiwyg needs the select box to function. We will hide the select box and
// remove all filter formats except the one selected for this component.
if ($element['#type'] == 'text_format') {
$format = $element['#webform_component']['extra']['format'];
if (!isset($element['format']['format']['#options'][$format])) {
$format = filter_default_format();
}
$element['format']['format']['#options'] = array($format => $element['format']['format']['#options'][$format]);
$element['format']['format']['#attributes']['disabled'] = 'disabled';
if (!$element['#webform_component']['extra']['show_format_fieldset']) {
$element['format']['#attributes']['style'] = 'display:none;';
}
$element['format']['format']['#description'] = t('This text format will be used to filter your html. You can not change this.');
if (!$element['#webform_component']['extra']['show_tips']) {
unset($element['format']['guidelines']);
}
if (!$element['#webform_component']['extra']['show_link']) {
unset($element['format']['help']);
}
}
return $element;
}
/**
* Implements _webform_display_component().
*/
function _webform_display_html_textarea($component, $value, $format = 'html') {
return array(
'#title' => $component['name'],
'#weight' => $component['weight'],
'#theme' => 'webform_display_html_textarea',
'#theme_wrappers' => $format == 'html' ? array('webform_element') : array('webform_element_text'),
'#format' => $format,
'#value' => isset($value[0]) ? check_markup($value[0], $component['extra']['format']) : '',
'#webform_component' => $component,
);
}
/**
* Implements _webform_submit_component().
*/
function _webform_submit_html_textarea($component, $value) {
$val = isset($value['value']) ? check_markup($value['value'], $component['extra']['format']) : '';
return array($val);
}
/**
* Format the output of data for this component.
*/
function theme_webform_display_html_textarea($variables) {
$element = $variables['element'];
$output = check_markup($element['#value'], $element['#webform_component']['extra']['format']);
$output = ($element['#format'] == 'html') ? '<div class="webform-html-textarea">' . $output . '</div>' : $output;
return $output !== '' ? $output : ' ';
}
/**
* Implements _webform_analysis_component().
*/
function _webform_analysis_html_textarea($component, $sids = array()) {
$query = db_select('webform_submitted_data', 'wsd', array('fetch' => PDO::FETCH_ASSOC))
->fields('wsd', array('no', 'data'))
->condition('nid', $component['nid'])
->condition('cid', $component['cid']);
if (count($sids)) {
$query->condition('sid', $sids, 'IN');
}
$nonblanks = 0;
$submissions = 0;
$wordcount = 0;
$stripped_wordcount = 0;
$result = $query->execute();
foreach ($result as $data) {
if (backdrop_strlen(trim($data['data'])) > 0) {
$nonblanks++;
$wordcount += str_word_count(trim($data['data']));
$stripped_wordcount += str_word_count(strip_tags($data['data']));
}
$submissions++;
}
$rows[0] = array(t('Left Blank'), ($submissions - $nonblanks));
$rows[1] = array(t('User entered value'), $nonblanks);
$rows[2] = array(t('Average submission length in words (ex blanks)'), ($nonblanks != 0 ? number_format($wordcount / $nonblanks, 2) : '0'));
$rows[3] = array(t('Average submission length in words (ex blanks, without HTML tags)'), ($nonblanks != 0 ? number_format($stripped_wordcount / $nonblanks, 2) : '0'));
return $rows;
}
/**
* Implements _webform_table_component().
*/
function _webform_table_html_textarea($component, $value) {
return empty($value[0]) ? '' : check_markup($value[0], $component['extra']['format']);
}
/**
* Implements _webform_csv_headers_component().
*/
function _webform_csv_headers_html_textarea($component, $export_options) {
$header = array();
$header[0] = '';
$header[1] = '';
$header[2] = $component['name'];
return $header;
}
/**
* Implements _webform_csv_data_component().
*/
function _webform_csv_data_html_textarea($component, $export_options, $value) {
return empty($value[0]) ? '' : check_markup($value[0], $component['extra']['format']);
}