You are here

function webform_conditional_confirmation_webform_client_form_submit in Webform Conditional Confirmation Messages 7

Same name and namespace in other branches
  1. 7.2 webform_conditional_confirmation.module \webform_conditional_confirmation_webform_client_form_submit()

Submit handler; Load our conditional confirmation messages if required.

1 string reference to 'webform_conditional_confirmation_webform_client_form_submit'
webform_conditional_confirmation_form_webform_client_form_alter in ./webform_conditional_confirmation.module
Implements hook_form_FORMID_alter().

File

./webform_conditional_confirmation.module, line 239

Code

function webform_conditional_confirmation_webform_client_form_submit($form, &$form_state) {
  $node = $form['#node'];
  $sid = $form_state['values']['details']['sid'];

  // Don't trigger this if the webform isn't completed, i.e. final step of a
  // multi-step form.
  if (empty($form_state['save_draft']) && empty($form_state['webform_completed'])) {
    return;
  }

  // If we have no sid, return.
  if (empty($sid)) {
    return;
  }
  module_load_include('inc', 'webform', 'includes/webform.submissions');
  $submission = webform_get_submission($node->nid, $sid);
  webform_conditional_confirmation_get_message($node, $submission);

  // Strip out empty tags added by WYSIWYG editors if needed.
  $confirmation = strlen(trim(strip_tags($node->webform['confirmation']))) ? $node->webform['confirmation'] : '';

  // Clean up the redirect URL and filter it for webform tokens.
  $redirect_url = trim($node->webform['redirect_url']);
  $redirect_url = _webform_filter_values($redirect_url, $node, $submission, NULL, FALSE, TRUE);

  // Check if user is submitting as a draft.
  $is_draft = (int) (!empty($form_state['save_draft']));

  // Remove the domain name from the redirect.
  $redirect_url = preg_replace('/^' . preg_quote($GLOBALS['base_url'], '/') . '\\//', '', $redirect_url);

  // Check confirmation and redirect_url fields.
  $message = NULL;
  $redirect = NULL;
  $external_url = FALSE;
  if (isset($form['actions']['draft']['#value']) && $form_state['values']['op'] == $form['actions']['draft']['#value']) {
    $message = t('Submission saved. You may return to this form later and it will restore the current values.');
  }
  elseif ($is_draft) {
    $redirect = NULL;
  }
  elseif (!empty($form_state['values']['details']['finished'])) {
    $message = t('Submission updated.');
  }
  elseif ($redirect_url == '<none>') {
    $redirect = NULL;
  }
  elseif ($redirect_url == '<confirmation>') {
    $redirect = array(
      'node/' . $node->nid . '/done',
      array(
        'query' => array(
          'sid' => $sid,
        ),
      ),
    );
  }
  elseif (valid_url($redirect_url, TRUE)) {
    $redirect = $redirect_url;
    $external_url = TRUE;
  }
  elseif ($redirect_url && strpos($redirect_url, 'http') !== 0) {
    $parts = drupal_parse_url($redirect_url);
    $parts['query'] ? $parts['query']['sid'] = $sid : ($parts['query'] = array(
      'sid' => $sid,
    ));
    $query = $parts['query'];
    $redirect = array(
      $parts['path'],
      array(
        'query' => $query,
        'fragment' => $parts['fragment'],
      ),
    );
  }

  // Show a message if manually set.
  if (isset($message)) {
    drupal_set_message($message);
  }
  elseif (!$is_draft && !$external_url && (!empty($redirect_url) && $redirect_url != '<confirmation>') && !empty($confirmation)) {
    drupal_set_message(check_markup($confirmation, $node->webform['confirmation_format'], '', TRUE));
  }
  $form_state['redirect'] = $redirect;
}