annotate sites/all/modules/webform/includes/webform.emails.inc @ 11:b0ee71395280

deleted .DS_Store files
author danieleb <danielebarchiesi@me.com>
date Mon, 28 Oct 2013 16:12:13 +0000
parents ff03f76ab3fe
children
rev   line source
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 }