You are here

function webform_conditional_confirmation_webform_client_form_submit in Webform Conditional Confirmation Messages 7.2

Same name and namespace in other branches
  1. 7 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 307

Code

function webform_conditional_confirmation_webform_client_form_submit($form, &$form_state) {
  global $user;
  $node = $form['#node'];
  $sid = $form_state['values']['details']['sid'];
  $is_draft = !empty($form_state['save_draft']);

  // 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);

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

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

  // Check confirmation and redirect_url fields.
  $redirect = $form_state['redirect'];
  $external_url = FALSE;
  $message = 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 (!empty($form_state['values']['details']['finished'])) {
    $message = t('Submission updated.');
  }
  elseif ($redirect_url == '<none>') {
    $redirect = NULL;
  }
  elseif ($redirect_url == '<confirmation>') {

    // No confirmation message needed because it will be shown on the
    // confirmation page.
    $message = FALSE;
    $query = array(
      'sid' => $sid,
    );
    if ((int) $user->uid === 0) {
      $query['token'] = webform_get_submission_access_token($submission);
    }
    $redirect = array(
      'node/' . $node->nid . '/done',
      array(
        'query' => $query,
      ),
    );
  }
  elseif (valid_url($redirect_url, TRUE)) {
    $redirect = $redirect_url;
    $external_url = TRUE;
  }
  elseif ($redirect_url && strpos($redirect_url, 'http://') !== FALSE) {
    $url_parts = drupal_parse_url($redirect_url);
    $url_parts['query'] ? $url_parts['query']['sid'] = $sid : ($url_parts['query'] = array(
      'sid' => $sid,
    ));
    $redirect = array(
      $url_parts['path'],
      array(
        'query' => $url_parts['query'],
        'fragment' => $url_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;
}