danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Provides interface and database handling for e-mail settings of a webform.
|
danielebarchiesi@0
|
6 *
|
danielebarchiesi@0
|
7 * @author Nathan Haug <nate@lullabot.com>
|
danielebarchiesi@0
|
8 */
|
danielebarchiesi@0
|
9
|
danielebarchiesi@0
|
10 /**
|
danielebarchiesi@0
|
11 * Overview form of all components for this webform.
|
danielebarchiesi@0
|
12 */
|
danielebarchiesi@0
|
13 function webform_emails_form($form, $form_state, $node) {
|
danielebarchiesi@0
|
14 module_load_include('inc', 'webform', 'includes/webform.components');
|
danielebarchiesi@0
|
15
|
danielebarchiesi@0
|
16 $form['#attached']['library'][] = array('webform', 'admin');
|
danielebarchiesi@0
|
17
|
danielebarchiesi@0
|
18 $form['#tree'] = TRUE;
|
danielebarchiesi@0
|
19 $form['#node'] = $node;
|
danielebarchiesi@0
|
20 $form['components'] = array();
|
danielebarchiesi@0
|
21
|
danielebarchiesi@0
|
22 $form['nid'] = array(
|
danielebarchiesi@0
|
23 '#type' => 'value',
|
danielebarchiesi@0
|
24 '#value' => $node->nid,
|
danielebarchiesi@0
|
25 );
|
danielebarchiesi@0
|
26
|
danielebarchiesi@0
|
27 foreach ($node->webform['emails'] as $eid => $email) {
|
danielebarchiesi@0
|
28 $email_addresses = array_filter(explode(',', check_plain($email['email'])));
|
danielebarchiesi@0
|
29 foreach ($email_addresses as $key => $email_address) {
|
danielebarchiesi@0
|
30 $email_addresses[$key] = webform_format_email_address($email_address, NULL, $node, NULL, FALSE);
|
danielebarchiesi@0
|
31 }
|
danielebarchiesi@0
|
32
|
danielebarchiesi@0
|
33 $form['emails'][$eid]['email'] = array(
|
danielebarchiesi@0
|
34 '#markup' => implode('<br />', $email_addresses),
|
danielebarchiesi@0
|
35 );
|
danielebarchiesi@0
|
36 $form['emails'][$eid]['subject'] = array(
|
danielebarchiesi@0
|
37 '#markup' => check_plain(webform_format_email_subject($email['subject'], $node)),
|
danielebarchiesi@0
|
38 );
|
danielebarchiesi@0
|
39 $form['emails'][$eid]['from'] = array(
|
danielebarchiesi@0
|
40 '#markup' => check_plain(webform_format_email_address($email['from_address'], $email['from_name'], $node, NULL, FALSE)),
|
danielebarchiesi@0
|
41 );
|
danielebarchiesi@0
|
42 }
|
danielebarchiesi@0
|
43
|
danielebarchiesi@0
|
44 $form['add'] = array(
|
danielebarchiesi@0
|
45 '#theme' => 'webform_email_add_form',
|
danielebarchiesi@0
|
46 '#tree' => FALSE,
|
danielebarchiesi@0
|
47 );
|
danielebarchiesi@0
|
48
|
danielebarchiesi@0
|
49 $form['add']['email_option'] = array(
|
danielebarchiesi@0
|
50 '#type' => 'radios',
|
danielebarchiesi@0
|
51 '#options' => array(
|
danielebarchiesi@0
|
52 'custom' => t('Address'),
|
danielebarchiesi@0
|
53 'component' => t('Component value'),
|
danielebarchiesi@0
|
54 ),
|
danielebarchiesi@0
|
55 '#default_value' => 'custom',
|
danielebarchiesi@0
|
56 );
|
danielebarchiesi@0
|
57
|
danielebarchiesi@0
|
58 $form['add']['email_custom'] = array(
|
danielebarchiesi@0
|
59 '#type' => 'textfield',
|
danielebarchiesi@0
|
60 '#size' => 24,
|
danielebarchiesi@0
|
61 '#maxlength' => 500,
|
danielebarchiesi@0
|
62 );
|
danielebarchiesi@0
|
63
|
danielebarchiesi@0
|
64 $form['add']['email_component'] = array(
|
danielebarchiesi@0
|
65 '#type' => 'select',
|
danielebarchiesi@0
|
66 '#options' => webform_component_list($node, 'email_address', FALSE),
|
danielebarchiesi@0
|
67 );
|
danielebarchiesi@0
|
68
|
danielebarchiesi@0
|
69 if (empty($form['add']['email_component']['#options'])) {
|
danielebarchiesi@0
|
70 $form['add']['email_component']['#options'][''] = t('No available components');
|
danielebarchiesi@0
|
71 $form['add']['email_component']['#disabled'] = TRUE;
|
danielebarchiesi@0
|
72 }
|
danielebarchiesi@0
|
73
|
danielebarchiesi@0
|
74 $form['add_button'] = array(
|
danielebarchiesi@0
|
75 '#type' => 'submit',
|
danielebarchiesi@0
|
76 '#value' => t('Add'),
|
danielebarchiesi@0
|
77 '#weight' => 45,
|
danielebarchiesi@0
|
78 );
|
danielebarchiesi@0
|
79
|
danielebarchiesi@0
|
80 $form['#validate'] = array('webform_email_address_validate');
|
danielebarchiesi@0
|
81
|
danielebarchiesi@0
|
82 return $form;
|
danielebarchiesi@0
|
83 }
|
danielebarchiesi@0
|
84
|
danielebarchiesi@0
|
85 /**
|
danielebarchiesi@0
|
86 * Theme the node components form. Use a table to organize the components.
|
danielebarchiesi@0
|
87 *
|
danielebarchiesi@0
|
88 * @param $form
|
danielebarchiesi@0
|
89 * The form array.
|
danielebarchiesi@0
|
90 * @return
|
danielebarchiesi@0
|
91 * Formatted HTML form, ready for display.
|
danielebarchiesi@0
|
92 */
|
danielebarchiesi@0
|
93 function theme_webform_emails_form($variables) {
|
danielebarchiesi@0
|
94 $form = $variables['form'];
|
danielebarchiesi@0
|
95 $node = $form['#node'];
|
danielebarchiesi@0
|
96
|
danielebarchiesi@0
|
97 $header = array(t('E-mail to'), t('Subject'), t('From'), array('data' => t('Operations'), 'colspan' => 2));
|
danielebarchiesi@0
|
98 $rows = array();
|
danielebarchiesi@0
|
99
|
danielebarchiesi@0
|
100 if (!empty($form['emails'])) {
|
danielebarchiesi@0
|
101 foreach (element_children($form['emails']) as $eid) {
|
danielebarchiesi@0
|
102 // Add each component to a table row.
|
danielebarchiesi@0
|
103 $rows[] = array(
|
danielebarchiesi@0
|
104 drupal_render($form['emails'][$eid]['email']),
|
danielebarchiesi@0
|
105 drupal_render($form['emails'][$eid]['subject']),
|
danielebarchiesi@0
|
106 drupal_render($form['emails'][$eid]['from']),
|
danielebarchiesi@0
|
107 l(t('Edit'), 'node/' . $node->nid . '/webform/emails/' . $eid),
|
danielebarchiesi@0
|
108 l(t('Delete'), 'node/' . $node->nid . '/webform/emails/' . $eid . '/delete'),
|
danielebarchiesi@0
|
109 );
|
danielebarchiesi@0
|
110 }
|
danielebarchiesi@0
|
111 }
|
danielebarchiesi@0
|
112 else {
|
danielebarchiesi@0
|
113 $rows[] = array(array('data' => t('Currently not sending e-mails, add an e-mail recipient below.'), 'colspan' => 5));
|
danielebarchiesi@0
|
114 }
|
danielebarchiesi@0
|
115
|
danielebarchiesi@0
|
116 // Add a row containing form elements for a new item.
|
danielebarchiesi@0
|
117 $row_data = array(
|
danielebarchiesi@0
|
118 array('colspan' => 3, 'data' => drupal_render($form['add'])),
|
danielebarchiesi@0
|
119 array('colspan' => 2, 'data' => drupal_render($form['add_button'])),
|
danielebarchiesi@0
|
120 );
|
danielebarchiesi@0
|
121 $rows[] = array('data' => $row_data, 'class' => array('webform-add-form'));
|
danielebarchiesi@0
|
122
|
danielebarchiesi@0
|
123 $output = '';
|
danielebarchiesi@0
|
124 $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'webform-emails')));
|
danielebarchiesi@0
|
125 $output .= drupal_render_children($form);
|
danielebarchiesi@0
|
126 return $output;
|
danielebarchiesi@0
|
127 }
|
danielebarchiesi@0
|
128
|
danielebarchiesi@0
|
129 /**
|
danielebarchiesi@0
|
130 * Theme the add new e-mail settings form on the node/x/webform/emails page.
|
danielebarchiesi@0
|
131 */
|
danielebarchiesi@0
|
132 function theme_webform_email_add_form($variables) {
|
danielebarchiesi@0
|
133 $form = $variables['form'];
|
danielebarchiesi@0
|
134
|
danielebarchiesi@0
|
135 // Add a default value to the custom e-mail textfield.
|
danielebarchiesi@0
|
136 $form['email_custom']['#attributes']['rel'] = t('email@example.com');
|
danielebarchiesi@0
|
137 $form['email_custom']['#attributes']['class'] = array('webform-set-active', 'webform-default-value');
|
danielebarchiesi@0
|
138 $form['email_option']['custom']['#theme_wrappers'] = array('webform_inline_radio');
|
danielebarchiesi@0
|
139 $form['email_option']['custom']['#inline_element'] = drupal_render($form['email_custom']);
|
danielebarchiesi@0
|
140
|
danielebarchiesi@0
|
141 // Render the component value.
|
danielebarchiesi@0
|
142 $form['email_component']['#attributes']['class'] = array('webform-set-active');
|
danielebarchiesi@0
|
143 $form['email_option']['component']['#theme_wrappers'] = array('webform_inline_radio');
|
danielebarchiesi@0
|
144 $form['email_option']['component']['#inline_element'] = drupal_render($form['email_component']);
|
danielebarchiesi@0
|
145
|
danielebarchiesi@0
|
146 return drupal_render_children($form);
|
danielebarchiesi@0
|
147 }
|
danielebarchiesi@0
|
148
|
danielebarchiesi@0
|
149 /**
|
danielebarchiesi@0
|
150 * Submit handler for webform_emails_form().
|
danielebarchiesi@0
|
151 */
|
danielebarchiesi@0
|
152 function webform_emails_form_submit($form, &$form_state) {
|
danielebarchiesi@0
|
153 if ($form_state['values']['email_option'] == 'custom') {
|
danielebarchiesi@0
|
154 $email = $form_state['values']['email_custom'];
|
danielebarchiesi@0
|
155 }
|
danielebarchiesi@0
|
156 else {
|
danielebarchiesi@0
|
157 $email = $form_state['values']['email_component'];
|
danielebarchiesi@0
|
158 }
|
danielebarchiesi@0
|
159 $form_state['redirect'] = array('node/' . $form['#node']->nid . '/webform/emails/new', array('query' => array('option' => $form_state['values']['email_option'], 'email' => trim($email))));
|
danielebarchiesi@0
|
160 }
|
danielebarchiesi@0
|
161
|
danielebarchiesi@0
|
162 /**
|
danielebarchiesi@0
|
163 * Form for configuring an e-mail setting and template.
|
danielebarchiesi@0
|
164 */
|
danielebarchiesi@0
|
165 function webform_email_edit_form($form, $form_state, $node, $email = array()) {
|
danielebarchiesi@0
|
166 module_load_include('inc', 'webform', 'includes/webform.components');
|
danielebarchiesi@0
|
167
|
danielebarchiesi@0
|
168 $form['#attached']['library'][] = array('webform', 'admin');
|
danielebarchiesi@0
|
169 $form['#attached']['js'][] = array('data' => array('webform' => array('revertConfirm' => t('Are you sure you want to revert any changes to your template back to the default?'))), 'type' => 'setting');
|
danielebarchiesi@0
|
170
|
danielebarchiesi@0
|
171 $form['#tree'] = TRUE;
|
danielebarchiesi@0
|
172 $form['node'] = array(
|
danielebarchiesi@0
|
173 '#type' => 'value',
|
danielebarchiesi@0
|
174 '#value' => $node,
|
danielebarchiesi@0
|
175 );
|
danielebarchiesi@0
|
176 $form['eid'] = array(
|
danielebarchiesi@0
|
177 '#type' => 'value',
|
danielebarchiesi@0
|
178 '#value' => isset($email['eid']) ? $email['eid'] : NULL,
|
danielebarchiesi@0
|
179 );
|
danielebarchiesi@0
|
180
|
danielebarchiesi@0
|
181 // All these fields work essentially the same, with a radio button set,
|
danielebarchiesi@0
|
182 // a textfield for custom values, and a select list for a component.
|
danielebarchiesi@0
|
183 foreach (array('email', 'subject', 'from_address', 'from_name') as $field) {
|
danielebarchiesi@0
|
184 switch ($field) {
|
danielebarchiesi@0
|
185 case 'email':
|
danielebarchiesi@0
|
186 $default_value = NULL;
|
danielebarchiesi@0
|
187 $title = t('E-mail to address');
|
danielebarchiesi@0
|
188 $description = t('Form submissions will be e-mailed to this address. Any email, select, or hidden form element may be selected as the recipient address. Multiple e-mail addresses may be separated by commas.');
|
danielebarchiesi@0
|
189 break;
|
danielebarchiesi@0
|
190 case 'subject':
|
danielebarchiesi@0
|
191 $default_value = _webform_filter_values(webform_variable_get('webform_default_subject'), $node);
|
danielebarchiesi@0
|
192 $title = t('E-mail subject');
|
danielebarchiesi@0
|
193 $description = t('Any textfield, select, or hidden form element may be selected as the subject for e-mails.');
|
danielebarchiesi@0
|
194 break;
|
danielebarchiesi@0
|
195 case 'from_address':
|
danielebarchiesi@0
|
196 $default_value = _webform_filter_values(webform_variable_get('webform_default_from_address'), $node);
|
danielebarchiesi@0
|
197 $title = t('E-mail from address');
|
danielebarchiesi@0
|
198 $description = t('Any email, select, or hidden form element may be selected as the sender\'s e-mail address.');
|
danielebarchiesi@0
|
199 break;
|
danielebarchiesi@0
|
200 case 'from_name':
|
danielebarchiesi@0
|
201 $default_value = _webform_filter_values(webform_variable_get('webform_default_from_name'), $node);
|
danielebarchiesi@0
|
202 $title = t('E-mail from name');
|
danielebarchiesi@0
|
203 $description = t('Any textfield, select, or hidden form element may be selected as the sender\'s name for e-mails.');
|
danielebarchiesi@0
|
204 break;
|
danielebarchiesi@0
|
205 }
|
danielebarchiesi@0
|
206
|
danielebarchiesi@0
|
207 $form[$field . '_option'] = array(
|
danielebarchiesi@0
|
208 '#title' => $title,
|
danielebarchiesi@0
|
209 '#type' => 'radios',
|
danielebarchiesi@0
|
210 '#default_value' => is_numeric($email[$field]) ? 'component' : ((empty($default_value) || ($email[$field] != 'default' && isset($email[$field]))) ? 'custom' : 'default'),
|
danielebarchiesi@0
|
211 '#description' => $description,
|
danielebarchiesi@0
|
212 );
|
danielebarchiesi@0
|
213 if (!empty($default_value)) {
|
danielebarchiesi@0
|
214 $form[$field . '_option']['#options']['default'] = t('Default: %value', array('%value' => $default_value));
|
danielebarchiesi@0
|
215 }
|
danielebarchiesi@0
|
216 $form[$field . '_option']['#options']['custom'] = t('Custom');
|
danielebarchiesi@0
|
217 $form[$field . '_option']['#options']['component'] = t('Component');
|
danielebarchiesi@0
|
218
|
danielebarchiesi@0
|
219 $form[$field . '_custom'] = array(
|
danielebarchiesi@0
|
220 '#type' => 'textfield',
|
danielebarchiesi@0
|
221 '#size' => 40,
|
danielebarchiesi@0
|
222 '#default_value' => (!is_numeric($email[$field]) && $email[$field] != 'default') ? $email[$field] : NULL,
|
danielebarchiesi@0
|
223 '#maxlength' => $field == 'email' ? 500 : 255,
|
danielebarchiesi@0
|
224 );
|
danielebarchiesi@0
|
225 $options = webform_component_list($node, $field == 'from_address' || $field == 'email' ? 'email_address' : 'email_name', FALSE);
|
danielebarchiesi@0
|
226 $form[$field . '_component'] = array(
|
danielebarchiesi@0
|
227 '#type' => 'select',
|
danielebarchiesi@0
|
228 '#default_value' => is_numeric($email[$field]) ? $email[$field] : NULL,
|
danielebarchiesi@0
|
229 '#options' => empty($options) ? array('' => t('No available components')) : $options,
|
danielebarchiesi@0
|
230 '#disabled' => empty($options) ? TRUE : FALSE,
|
danielebarchiesi@0
|
231 '#weight' => 6,
|
danielebarchiesi@0
|
232 );
|
danielebarchiesi@0
|
233 }
|
danielebarchiesi@0
|
234
|
danielebarchiesi@0
|
235 // Do not show the "E-mail from name" if using the short e-mail format.
|
danielebarchiesi@0
|
236 if (variable_get('webform_email_address_format', 'long') == 'short') {
|
danielebarchiesi@0
|
237 $form['from_name_option']['#access'] = FALSE;
|
danielebarchiesi@0
|
238 $form['from_name_custom']['#access'] = FALSE;
|
danielebarchiesi@0
|
239 $form['from_name_component']['#access'] = FALSE;
|
danielebarchiesi@0
|
240 }
|
danielebarchiesi@0
|
241
|
danielebarchiesi@0
|
242 // Add the template fieldset.
|
danielebarchiesi@0
|
243 $form['template'] = array(
|
danielebarchiesi@0
|
244 '#type' => 'fieldset',
|
danielebarchiesi@0
|
245 '#title' => t('E-mail template'),
|
danielebarchiesi@0
|
246 '#collapsible' => TRUE,
|
danielebarchiesi@0
|
247 '#collapsed' => !empty($email['cid']) && empty($email['template']),
|
danielebarchiesi@0
|
248 '#description' => t('An e-mail template can customize the display of e-mails.'),
|
danielebarchiesi@0
|
249 '#weight' => 15,
|
danielebarchiesi@0
|
250 '#tree' => FALSE,
|
danielebarchiesi@0
|
251 '#attributes' => array('id' => 'webform-template-fieldset'),
|
danielebarchiesi@0
|
252 );
|
danielebarchiesi@0
|
253
|
danielebarchiesi@0
|
254 $form['template']['template_option'] = array(
|
danielebarchiesi@0
|
255 '#type' => 'select',
|
danielebarchiesi@0
|
256 '#options' => array(
|
danielebarchiesi@0
|
257 'default' => t('Default template'),
|
danielebarchiesi@0
|
258 'custom' => t('Custom template'),
|
danielebarchiesi@0
|
259 ),
|
danielebarchiesi@0
|
260 '#default_value' => $email['template'] == 'default' ? 'default' : 'custom',
|
danielebarchiesi@0
|
261 );
|
danielebarchiesi@0
|
262
|
danielebarchiesi@0
|
263 $default_template = theme(array('webform_mail_' . $node->nid, 'webform_mail', 'webform_mail_message'), array('node' => $node, 'email' => $email));
|
danielebarchiesi@0
|
264 $template = $email['template'] == 'default' ? $default_template : $email['template'];
|
danielebarchiesi@0
|
265 $form['template']['template'] = array(
|
danielebarchiesi@0
|
266 '#type' => 'textarea',
|
danielebarchiesi@0
|
267 '#rows' => max(10, min(20, count(explode("\n", $template)))),
|
danielebarchiesi@0
|
268 '#default_value' => $template,
|
danielebarchiesi@0
|
269 '#wysiwyg' => webform_email_html_capable() ? NULL : FALSE,
|
danielebarchiesi@0
|
270 );
|
danielebarchiesi@0
|
271
|
danielebarchiesi@0
|
272 $form['template']['html'] = array(
|
danielebarchiesi@0
|
273 '#type' => 'checkbox',
|
danielebarchiesi@0
|
274 '#title' => t('Send e-mail as HTML'),
|
danielebarchiesi@0
|
275 '#default_value' => $email['html'],
|
danielebarchiesi@0
|
276 '#access' => webform_email_html_capable() && !variable_get('webform_format_override', 0),
|
danielebarchiesi@0
|
277 );
|
danielebarchiesi@0
|
278
|
danielebarchiesi@0
|
279 $form['template']['attachments'] = array(
|
danielebarchiesi@0
|
280 '#type' => 'checkbox',
|
danielebarchiesi@0
|
281 '#title' => t('Include files as attachments'),
|
danielebarchiesi@0
|
282 '#default_value' => $email['attachments'],
|
danielebarchiesi@0
|
283 '#access' => webform_email_html_capable(),
|
danielebarchiesi@0
|
284 );
|
danielebarchiesi@0
|
285
|
danielebarchiesi@0
|
286 $form['template']['tokens'] = array(
|
danielebarchiesi@0
|
287 '#markup' => theme('webform_token_help', array('groups' => 'all')),
|
danielebarchiesi@0
|
288 );
|
danielebarchiesi@0
|
289
|
danielebarchiesi@0
|
290 $form['template']['components'] = array(
|
danielebarchiesi@0
|
291 '#type' => 'select',
|
danielebarchiesi@0
|
292 '#title' => t('Included e-mail values'),
|
danielebarchiesi@0
|
293 '#options' => webform_component_list($node, 'email', TRUE),
|
danielebarchiesi@0
|
294 '#default_value' => array_diff(array_keys($node->webform['components']), $email['excluded_components']),
|
danielebarchiesi@0
|
295 '#multiple' => TRUE,
|
danielebarchiesi@0
|
296 '#size' => 10,
|
danielebarchiesi@0
|
297 '#description' => t('The selected components will be included in the %email_values token. Individual values may still be printed if explicitly specified as a %email[key] in the template.'),
|
danielebarchiesi@0
|
298 '#process' => array('webform_component_select'),
|
danielebarchiesi@0
|
299 );
|
danielebarchiesi@0
|
300
|
danielebarchiesi@0
|
301 // TODO: Allow easy re-use of existing templates.
|
danielebarchiesi@0
|
302 $form['templates']['#tree'] = TRUE;
|
danielebarchiesi@0
|
303 $form['templates']['default'] = array(
|
danielebarchiesi@0
|
304 '#type' => 'textarea',
|
danielebarchiesi@0
|
305 '#value' => $default_template,
|
danielebarchiesi@0
|
306 '#resizable' => FALSE,
|
danielebarchiesi@0
|
307 '#weight' => 19,
|
danielebarchiesi@0
|
308 '#wysiwyg' => FALSE,
|
danielebarchiesi@0
|
309 );
|
danielebarchiesi@0
|
310
|
danielebarchiesi@0
|
311 // Add the submit button.
|
danielebarchiesi@0
|
312 $form['submit'] = array(
|
danielebarchiesi@0
|
313 '#type' => 'submit',
|
danielebarchiesi@0
|
314 '#value' => t('Save e-mail settings'),
|
danielebarchiesi@0
|
315 '#weight' => 20,
|
danielebarchiesi@0
|
316 );
|
danielebarchiesi@0
|
317
|
danielebarchiesi@0
|
318 $form['#validate'] = array('webform_email_address_validate', 'webform_email_edit_form_validate');
|
danielebarchiesi@0
|
319
|
danielebarchiesi@0
|
320 return $form;
|
danielebarchiesi@0
|
321 }
|
danielebarchiesi@0
|
322
|
danielebarchiesi@0
|
323 /**
|
danielebarchiesi@0
|
324 * Theme the Webform mail settings section of the node form.
|
danielebarchiesi@0
|
325 */
|
danielebarchiesi@0
|
326 function theme_webform_email_edit_form($variables) {
|
danielebarchiesi@0
|
327 $form = $variables['form'];
|
danielebarchiesi@0
|
328
|
danielebarchiesi@0
|
329 // Loop through fields, rendering them into radio button options.
|
danielebarchiesi@0
|
330 foreach (array('email', 'subject', 'from_address', 'from_name') as $field) {
|
danielebarchiesi@0
|
331 foreach (array('custom', 'component') as $option) {
|
danielebarchiesi@0
|
332 $form[$field . '_' . $option]['#attributes']['class'] = array('webform-set-active');
|
danielebarchiesi@0
|
333 $form[$field . '_option'][$option]['#theme_wrappers'] = array('webform_inline_radio');
|
danielebarchiesi@0
|
334 $form[$field . '_option'][$option]['#inline_element'] = drupal_render($form[$field . '_' . $option]);
|
danielebarchiesi@0
|
335 }
|
danielebarchiesi@0
|
336 if (isset($form[$field . '_option']['#options']['default'])) {
|
danielebarchiesi@0
|
337 $form[$field . '_option']['default']['#theme_wrappers'] = array('webform_inline_radio');
|
danielebarchiesi@0
|
338 }
|
danielebarchiesi@0
|
339 }
|
danielebarchiesi@0
|
340
|
danielebarchiesi@0
|
341 $details = '';
|
danielebarchiesi@0
|
342 $details .= drupal_render($form['subject_option']);
|
danielebarchiesi@0
|
343 $details .= drupal_render($form['from_address_option']);
|
danielebarchiesi@0
|
344 $details .= drupal_render($form['from_name_option']);
|
danielebarchiesi@0
|
345 $form['details'] = array(
|
danielebarchiesi@0
|
346 '#type' => 'fieldset',
|
danielebarchiesi@0
|
347 '#title' => t('E-mail header details'),
|
danielebarchiesi@0
|
348 '#weight' => 10,
|
danielebarchiesi@0
|
349 '#children' => $details,
|
danielebarchiesi@0
|
350 '#collapsible' => FALSE,
|
danielebarchiesi@0
|
351 '#parents' => array('details'),
|
danielebarchiesi@0
|
352 '#groups' => array('details' => array()),
|
danielebarchiesi@0
|
353 '#attributes' => array(),
|
danielebarchiesi@0
|
354 );
|
danielebarchiesi@0
|
355
|
danielebarchiesi@0
|
356 // Ensure templates are completely hidden.
|
danielebarchiesi@0
|
357 $form['templates']['#prefix'] = '<div id="webform-email-templates" style="display: none">';
|
danielebarchiesi@0
|
358 $form['templates']['#suffix'] = '</div>';
|
danielebarchiesi@0
|
359
|
danielebarchiesi@0
|
360 // Re-sort the elements since we added the details fieldset.
|
danielebarchiesi@0
|
361 $form['#sorted'] = FALSE;
|
danielebarchiesi@0
|
362 $children = element_children($form, TRUE);
|
danielebarchiesi@0
|
363 return drupal_render_children($form, $children);
|
danielebarchiesi@0
|
364 }
|
danielebarchiesi@0
|
365
|
danielebarchiesi@0
|
366 /**
|
danielebarchiesi@0
|
367 * Validate handler for webform_email_edit_form() and webform_emails_form().
|
danielebarchiesi@0
|
368 */
|
danielebarchiesi@0
|
369 function webform_email_address_validate($form, &$form_state) {
|
danielebarchiesi@0
|
370 if ($form_state['values']['email_option'] == 'custom') {
|
danielebarchiesi@0
|
371 $email = trim($form_state['values']['email_custom']);
|
danielebarchiesi@0
|
372 if (empty($email)) {
|
danielebarchiesi@0
|
373 form_set_error('email_custom', t('When adding a new custom e-mail, the e-mail field is required.'));
|
danielebarchiesi@0
|
374 }
|
danielebarchiesi@0
|
375 else {
|
danielebarchiesi@0
|
376 $emails = array_filter(explode(',', $email));
|
danielebarchiesi@0
|
377 foreach ($emails as $email) {
|
danielebarchiesi@0
|
378 if (!valid_email_address(trim($email))) {
|
danielebarchiesi@0
|
379 form_set_error('email_custom', t('The entered e-mail address "@email" does not appear valid.', array('@email' => $email)));
|
danielebarchiesi@0
|
380 }
|
danielebarchiesi@0
|
381 }
|
danielebarchiesi@0
|
382 }
|
danielebarchiesi@0
|
383 }
|
danielebarchiesi@0
|
384 }
|
danielebarchiesi@0
|
385
|
danielebarchiesi@0
|
386 /**
|
danielebarchiesi@0
|
387 * Validate handler for webform_email_edit_form().
|
danielebarchiesi@0
|
388 */
|
danielebarchiesi@0
|
389 function webform_email_edit_form_validate($form, &$form_state) {
|
danielebarchiesi@0
|
390 if ($form_state['values']['from_address_option'] == 'custom' && !valid_email_address($form_state['values']['from_address_custom'])) {
|
danielebarchiesi@0
|
391 form_set_error('from_address_custom', t('The entered e-mail address "@email" does not appear valid.', array('@email' => $form_state['values']['from_address_custom'])));
|
danielebarchiesi@0
|
392 }
|
danielebarchiesi@0
|
393 }
|
danielebarchiesi@0
|
394
|
danielebarchiesi@0
|
395 /**
|
danielebarchiesi@0
|
396 * Submit handler for webform_email_edit_form().
|
danielebarchiesi@0
|
397 */
|
danielebarchiesi@0
|
398 function webform_email_edit_form_submit($form, &$form_state) {
|
danielebarchiesi@0
|
399 // Ensure a webform record exists.
|
danielebarchiesi@0
|
400 $node = $form_state['values']['node'];
|
danielebarchiesi@0
|
401 webform_ensure_record($node);
|
danielebarchiesi@0
|
402
|
danielebarchiesi@0
|
403 // Merge the e-mail, name, address, and subject options into single values.
|
danielebarchiesi@0
|
404 $email = array(
|
danielebarchiesi@0
|
405 'eid' => $form_state['values']['eid'],
|
danielebarchiesi@0
|
406 'nid' => $node->nid,
|
danielebarchiesi@0
|
407 );
|
danielebarchiesi@0
|
408
|
danielebarchiesi@0
|
409 foreach (array('email', 'from_name', 'from_address', 'subject') as $field) {
|
danielebarchiesi@0
|
410 $option = $form_state['values'][$field . '_option'];
|
danielebarchiesi@0
|
411 if ($option == 'default') {
|
danielebarchiesi@0
|
412 $email[$field] = 'default';
|
danielebarchiesi@0
|
413 }
|
danielebarchiesi@0
|
414 else {
|
danielebarchiesi@0
|
415 $email[$field] = $form_state['values'][$field . '_' . $option];
|
danielebarchiesi@0
|
416 }
|
danielebarchiesi@0
|
417 }
|
danielebarchiesi@0
|
418
|
danielebarchiesi@0
|
419 // Ensure templates are unaffected by differences in line breaks.
|
danielebarchiesi@0
|
420 $form_state['values']['template'] = str_replace(array("\r", "\n"), array('', "\n"), $form_state['values']['template']);
|
danielebarchiesi@0
|
421 $form_state['values']['templates']['default'] = str_replace(array("\r", "\n"), array('', "\n"), $form_state['values']['templates']['default']);
|
danielebarchiesi@0
|
422
|
danielebarchiesi@0
|
423 // Set the template value.
|
danielebarchiesi@0
|
424 // TODO: Support reuse of templates.
|
danielebarchiesi@0
|
425 if (strcmp(trim($form_state['values']['templates']['default']), trim($form_state['values']['template'])) == 0) {
|
danielebarchiesi@0
|
426 $email['template'] = 'default';
|
danielebarchiesi@0
|
427 }
|
danielebarchiesi@0
|
428 else {
|
danielebarchiesi@0
|
429 $email['template'] = $form_state['values']['template'];
|
danielebarchiesi@0
|
430 }
|
danielebarchiesi@0
|
431
|
danielebarchiesi@0
|
432 // Save the attachment and HTML options provided by MIME mail.
|
danielebarchiesi@0
|
433 $email['html'] = empty($form_state['values']['html']) ? 0 : 1;
|
danielebarchiesi@0
|
434 $email['attachments'] = empty($form_state['values']['attachments']) ? 0 : 1;
|
danielebarchiesi@0
|
435
|
danielebarchiesi@0
|
436 // Save the list of included components.
|
danielebarchiesi@0
|
437 // We actually maintain an *exclusion* list, so any new components will
|
danielebarchiesi@0
|
438 // default to being included in the %email_values token until unchecked.
|
danielebarchiesi@0
|
439 $included = array_keys(array_filter((array) $form_state['values']['components']));
|
danielebarchiesi@0
|
440 $excluded = array_diff(array_keys($node->webform['components']), $included);
|
danielebarchiesi@0
|
441 $email['excluded_components'] = $excluded;
|
danielebarchiesi@0
|
442
|
danielebarchiesi@0
|
443 if (empty($form_state['values']['eid'])) {
|
danielebarchiesi@0
|
444 drupal_set_message(t('Email settings added.'));
|
danielebarchiesi@0
|
445 $form_state['values']['eid'] = webform_email_insert($email);
|
danielebarchiesi@0
|
446 }
|
danielebarchiesi@0
|
447 else {
|
danielebarchiesi@0
|
448 drupal_set_message(t('Email settings updated.'));
|
danielebarchiesi@0
|
449 webform_email_update($email);
|
danielebarchiesi@0
|
450 }
|
danielebarchiesi@0
|
451
|
danielebarchiesi@0
|
452 // Clear the entity cache if Entity Cache module is installed.
|
danielebarchiesi@0
|
453 if (module_exists('entitycache')) {
|
danielebarchiesi@0
|
454 cache_clear_all($node->nid, 'cache_entity_node');
|
danielebarchiesi@0
|
455 }
|
danielebarchiesi@0
|
456
|
danielebarchiesi@0
|
457 $form_state['redirect'] = array('node/' . $node->nid . '/webform/emails');
|
danielebarchiesi@0
|
458 }
|
danielebarchiesi@0
|
459
|
danielebarchiesi@0
|
460 /**
|
danielebarchiesi@0
|
461 * Form for deleting an e-mail setting.
|
danielebarchiesi@0
|
462 */
|
danielebarchiesi@0
|
463 function webform_email_delete_form($form, $form_state, $node, $email) {
|
danielebarchiesi@0
|
464 $eid = $email['eid'];
|
danielebarchiesi@0
|
465
|
danielebarchiesi@0
|
466 $form['node'] = array(
|
danielebarchiesi@0
|
467 '#type' => 'value',
|
danielebarchiesi@0
|
468 '#value' => $node,
|
danielebarchiesi@0
|
469 );
|
danielebarchiesi@0
|
470 $form['email'] = array(
|
danielebarchiesi@0
|
471 '#type' => 'value',
|
danielebarchiesi@0
|
472 '#value' => $email,
|
danielebarchiesi@0
|
473 );
|
danielebarchiesi@0
|
474
|
danielebarchiesi@0
|
475 $question = t('Delete e-mail settings?');
|
danielebarchiesi@0
|
476 if (is_numeric($email['email'])) {
|
danielebarchiesi@0
|
477 $description = t('This will immediately delete the e-mail settings based on the @component component.', array('@component' => $email['email']));
|
danielebarchiesi@0
|
478 }
|
danielebarchiesi@0
|
479 else {
|
danielebarchiesi@0
|
480 $description = t('This will immediately delete the e-mail settings sending to the @address address.', array('@address' => $email['email']));
|
danielebarchiesi@0
|
481 }
|
danielebarchiesi@0
|
482
|
danielebarchiesi@0
|
483 return confirm_form($form, $question, 'node/' . $node->nid . '/webform/emails', $description, t('Delete'));
|
danielebarchiesi@0
|
484 }
|
danielebarchiesi@0
|
485
|
danielebarchiesi@0
|
486 /**
|
danielebarchiesi@0
|
487 * Submit handler for webform_email_delete_form().
|
danielebarchiesi@0
|
488 */
|
danielebarchiesi@0
|
489 function webform_email_delete_form_submit($form, &$form_state) {
|
danielebarchiesi@0
|
490 // Delete the e-mail settings.
|
danielebarchiesi@0
|
491 $node = $form_state['values']['node'];
|
danielebarchiesi@0
|
492 $email = $form_state['values']['email'];
|
danielebarchiesi@0
|
493 webform_email_delete($node, $email);
|
danielebarchiesi@0
|
494 drupal_set_message(t('E-mail settings deleted.'));
|
danielebarchiesi@0
|
495
|
danielebarchiesi@0
|
496 // Check if this webform still contains any information.
|
danielebarchiesi@0
|
497 unset($node->webform['emails'][$email['eid']]);
|
danielebarchiesi@0
|
498 webform_check_record($node);
|
danielebarchiesi@0
|
499
|
danielebarchiesi@0
|
500 // Clear the entity cache if Entity Cache module is installed.
|
danielebarchiesi@0
|
501 if (module_exists('entitycache')) {
|
danielebarchiesi@0
|
502 cache_clear_all($node->nid, 'cache_entity_node');
|
danielebarchiesi@0
|
503 }
|
danielebarchiesi@0
|
504
|
danielebarchiesi@0
|
505 $form_state['redirect'] = 'node/' . $node->nid . '/webform/emails';
|
danielebarchiesi@0
|
506 }
|
danielebarchiesi@0
|
507
|
danielebarchiesi@0
|
508 /**
|
danielebarchiesi@0
|
509 * Load an e-mail setting from the database or initialize a new e-mail.
|
danielebarchiesi@0
|
510 */
|
danielebarchiesi@0
|
511 function webform_email_load($eid, $nid) {
|
danielebarchiesi@0
|
512 $node = node_load($nid);
|
danielebarchiesi@0
|
513 if ($eid == 'new') {
|
danielebarchiesi@0
|
514 $email = array(
|
danielebarchiesi@0
|
515 'email' => '',
|
danielebarchiesi@0
|
516 'subject' => 'default',
|
danielebarchiesi@0
|
517 'from_name' => 'default',
|
danielebarchiesi@0
|
518 'from_address' => 'default',
|
danielebarchiesi@0
|
519 'template' => 'default',
|
danielebarchiesi@0
|
520 'excluded_components' => array(),
|
danielebarchiesi@0
|
521 'html' => variable_get('webform_default_format', 0),
|
danielebarchiesi@0
|
522 'attachments' => 0,
|
danielebarchiesi@0
|
523 );
|
danielebarchiesi@0
|
524 }
|
danielebarchiesi@0
|
525 else {
|
danielebarchiesi@0
|
526 $email = isset($node->webform['emails'][$eid]) ? $node->webform['emails'][$eid] : FALSE;
|
danielebarchiesi@0
|
527 if (variable_get('webform_format_override', 0)) {
|
danielebarchiesi@0
|
528 $email['html'] = variable_get('webform_default_format', 0);
|
danielebarchiesi@0
|
529 }
|
danielebarchiesi@0
|
530 }
|
danielebarchiesi@0
|
531
|
danielebarchiesi@0
|
532 return $email;
|
danielebarchiesi@0
|
533 }
|
danielebarchiesi@0
|
534
|
danielebarchiesi@0
|
535 /**
|
danielebarchiesi@0
|
536 * Insert a new e-mail setting into the database.
|
danielebarchiesi@0
|
537 *
|
danielebarchiesi@0
|
538 * @param $email
|
danielebarchiesi@0
|
539 * An array of settings for sending an e-mail.
|
danielebarchiesi@0
|
540 */
|
danielebarchiesi@0
|
541 function webform_email_insert($email) {
|
danielebarchiesi@0
|
542 // TODO: This is not race-condition safe. Switch to using transactions?
|
danielebarchiesi@0
|
543 if (!isset($email['eid'])) {
|
danielebarchiesi@0
|
544 $next_id_query = db_select('webform_emails')->condition('nid', $email['nid']);
|
danielebarchiesi@0
|
545 $next_id_query->addExpression('MAX(eid) + 1', 'eid');
|
danielebarchiesi@0
|
546 $email['eid'] = $next_id_query->execute()->fetchField();
|
danielebarchiesi@0
|
547 if ($email['eid'] == NULL) {
|
danielebarchiesi@0
|
548 $email['eid'] = 1;
|
danielebarchiesi@0
|
549 }
|
danielebarchiesi@0
|
550 }
|
danielebarchiesi@0
|
551
|
danielebarchiesi@0
|
552 $email['excluded_components'] = implode(',', $email['excluded_components']);
|
danielebarchiesi@0
|
553 $success = drupal_write_record('webform_emails', $email);
|
danielebarchiesi@0
|
554
|
danielebarchiesi@0
|
555 return $success ? $email['eid'] : FALSE;
|
danielebarchiesi@0
|
556 }
|
danielebarchiesi@0
|
557
|
danielebarchiesi@0
|
558 /**
|
danielebarchiesi@0
|
559 * Update an existing e-mail setting with new values.
|
danielebarchiesi@0
|
560 *
|
danielebarchiesi@0
|
561 * @param $email
|
danielebarchiesi@0
|
562 * An array of settings for sending an e-mail containing a nid, eid, and all
|
danielebarchiesi@0
|
563 * other fields from the e-mail form.
|
danielebarchiesi@0
|
564 */
|
danielebarchiesi@0
|
565 function webform_email_update($email) {
|
danielebarchiesi@0
|
566 $email['excluded_components'] = implode(',', $email['excluded_components']);
|
danielebarchiesi@0
|
567 return drupal_write_record('webform_emails', $email, array('nid', 'eid'));
|
danielebarchiesi@0
|
568 }
|
danielebarchiesi@0
|
569
|
danielebarchiesi@0
|
570 /**
|
danielebarchiesi@0
|
571 * Delete an e-mail setting.
|
danielebarchiesi@0
|
572 */
|
danielebarchiesi@0
|
573 function webform_email_delete($node, $email) {
|
danielebarchiesi@0
|
574 db_delete('webform_emails')
|
danielebarchiesi@0
|
575 ->condition('nid', $node->nid)
|
danielebarchiesi@0
|
576 ->condition('eid', $email['eid'])
|
danielebarchiesi@0
|
577 ->execute();
|
danielebarchiesi@0
|
578 }
|