You are here

little_helpers.module in Little helpers 7.2

Same filename and directory in other branches
  1. 7 little_helpers.module

Hook implementations and supplementary functions availably in any request.

File

little_helpers.module
View source
<?php

/**
 * @file
 * Hook implementations and supplementary functions availably in any request.
 */
use Drupal\little_helpers\System\FormRedirect;
use Drupal\little_helpers\Webform\Webform;
use Drupal\little_helpers\Webform\Submission;

/**
 * Implements hook_form_BASE_FORM_ID_alter() for webform_client_form().
 *
 * Insert a custom submit handler that lets other modules alter the redirect.
 */
function little_helpers_form_webform_client_form_alter(array &$form, array &$form_state) {
  $form['#submit'][] = '_little_helpers_webform_redirect_alter';
}

/**
 * Form submission handler: Let other modules alter the redirect.
 *
 * @see little_helpers_form_webform_client_form_alter()
 * @see hook_webform_redirect_alter()
 */
function _little_helpers_webform_redirect_alter(array $form, array &$form_state) {
  if (!$form_state['webform_completed'] || !$form_state['redirect']) {
    return;
  }
  $sid = $form_state['values']['details']['sid'];
  $submission = Submission::load($form['#node']->nid, $sid);
  $redirect = FormRedirect::fromFormStateRedirect($form_state['redirect']);
  drupal_alter('webform_redirect', $redirect, $submission);
  $form_state['redirect'] = $redirect
    ->toFormStateRedirect();
}

/**
 * Implements hook_webform_confirm_email_confirmation_redirect_alter().
 */
function little_helpers_webform_confirm_email_confirmation_redirect_alter(&$redirect, $node, $submission) {
  $submission = new Submission($node, $submission);
  $submission->confirmed = 1;
  $r = FormRedirect::fromFormStateRedirect($redirect['path'], $redirect);
  drupal_alter('webform_redirect', $r, $submission);
  $redirect = get_object_vars($r) + $redirect;
}

/**
 * Implements hook_webform_submission_insert().
 */
function little_helpers_webform_submission_insert($node, $submission) {
  little_helpers_webform_submission_update($node, $submission);
}

/**
 * Implements hook_webform_submission_presave().
 *
 * Śet $submission->was_draft which is needed later in
 * @see little_helpers_webform_submission_update() to only invoke the hook once.
 */
function little_helpers_webform_submission_presave($node, $submission) {
  $submission->new_or_was_draft = empty($submission->sid) || empty($submission->completed);
}

/**
 * Implements hook_webform_submission_update().
 */
function little_helpers_webform_submission_update($node, $submission) {
  if (!$submission->is_draft && $submission->new_or_was_draft) {
    $webform = new Webform($node);
    if (!$webform
      ->needsConfirmation()) {
      little_helpers_webform_confirm_email_email_confirmed($webform, $submission);
    }
  }
}

/**
 * Implements hook_webform_confirm_email_email_confirmed().
 */
function little_helpers_webform_confirm_email_email_confirmed($node_or_webform, $submission, $first_confirmation = TRUE) {
  if ($first_confirmation) {
    $submission_o = new Submission($node_or_webform, $submission);
    module_invoke_all('webform_submission_confirmed', $submission_o);
  }
}

/**
 * Delivery callback: JSON response.
 */
function little_helpers_deliver_json($result) {
  switch ($result) {
    case MENU_NOT_FOUND:
      drupal_add_http_header('Status', '404 Not found');
      return;
    case MENU_ACCESS_DENIED:
      drupal_add_http_header('Status', '403 Forbidden');
      return;
    case 405:
      drupal_add_http_header('Status', '405 Method Not Allowed');
      return;
    case 502:
      drupal_add_http_header('Status', '502 Bad Gateway');
      return;
    case MENU_SITE_OFFLINE:
      drupal_add_http_header('Status', '503 Service unavailable');
      return;
  }
  echo drupal_json_output($result);
  drupal_page_footer();
}