You are here

pardot_webform.module in Pardot Integration 7.2

Pardot Webform integration module.

File

pardot_webform/pardot_webform.module
View source
<?php

/**
 * @file
 * Pardot Webform integration module.
 */
define('PARDOT_STATUS_NEW', 'new');
define('PARDOT_STATUS_FAILED', 'failed');
define('PARDOT_STATUS_UPLOADED', 'uploaded');

/**
 * Implements hook_theme().
 */
function pardot_webform_theme($existing, $type, $theme, $path) {
  return array(
    'pardot_webform_components_form' => array(
      'render element' => 'form',
      'file' => 'pardot_webform.admin.inc',
    ),
  );
}

/**
 * Implements hook_menu().
 */
function pardot_webform_menu() {
  $items['admin/config/services/pardot/post_url_usage'] = array(
    'title' => 'Pardot enabled WebForms',
    'description' => 'Webforms which have been enabled for Pardot.',
    'page callback' => 'pardot_webform_enabled_pardot_load',
    'access arguments' => array(
      'administer pardot',
    ),
    'type' => MENU_LOCAL_TASK,
    'weight' => 20,
  );
  $items['node/%webform_menu/webform/pardot'] = array(
    'title' => 'Pardot',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'pardot_webform_components_form',
      1,
    ),
    'access callback' => 'node_access',
    'access arguments' => array(
      'update',
      1,
    ),
    'file' => 'pardot_webform.admin.inc',
    'weight' => 1,
    'type' => MENU_LOCAL_TASK,
  );
  return $items;
}

/**
 * Implements hook_form_alter().
 *
 * @see pardot_webform_submit()
 */
function pardot_webform_form_alter(&$form, $form_state, $form_id) {
  if (strstr($form_id, 'pardot_admin_form')) {
    $form['pardot_validate_url'] = array(
      '#title' => t('Validate Pardot url'),
      '#type' => 'checkbox',
      '#description' => t('Validate Pardot form handler URL during webform creation.'),
      '#default_value' => variable_get('pardot_validate_url', 1),
      '#weight' => 0,
    );
  }
  elseif (strstr($form_id, 'webform_client_form')) {

    // Modify all webforms to use this output thingy.
    // Load the form specific settings.
    $nid = $form['details']['nid']['#value'];
    if (empty($nid)) {
      return;
    }
    $form_settings = pardot_webform_load($nid);

    // Check to see if the form exists.
    if (empty($form_settings) || !$form_settings->is_active) {
      return;
    }
    $form['#submit'][] = 'pardot_webform_submit';
  }
}

/**
 * Form submission handler for pardot_webform_form_alter().
 *
 * Stores submissions for Pardot.
 */
function pardot_webform_submit($form, &$form_state) {
  $values = array();

  // Get Browser headers.
  $values['user_headers'] = automate_get_user_headers();

  // Collapse form values so they make more sense to Pardot.
  $post_fields = automate_webform_values($form, $form_state);
  $values['post_fields'] = $post_fields;

  // Save the values and essential information to the database.
  $submission = new stdClass();
  $submission->form_nid = $form['#node']->nid;
  $submission->data = $values;
  pardot_webform_submission_save($submission);
  if (empty($submission->sid)) {
    $message = 'Unable to save submitted entry. <pre>!data</pre>';
    $vars = array(
      '!data' => var_export($submission, TRUE),
    );
    watchdog('pardot_webform', $message, $vars, WATCHDOG_NOTICE);
  }
  else {
    $form_settings = pardot_webform_load($submission->form_nid);
    $result = automate_map_webform_values($post_fields, $form_settings->data);
    $url = url($form_settings->url, array(
      'query' => $result,
    ));

    // Send data.
    $result = drupal_http_request($url, array(
      'timeout' => 5,
    ));
    if ($result->code == 200) {
      $submission->status = PARDOT_STATUS_UPLOADED;
      pardot_webform_submission_save($submission);
    }
    else {
      $submission->status = PARDOT_STATUS_FAILED;
      pardot_webform_submission_save($submission);
      $message = 'Unable to submit entry to Pardot. <pre>!data</pre>';
      $vars = array(
        '!data' => var_export($submission, TRUE),
      );
      watchdog('pardot_webform', $message, $result, WATCHDOG_ERROR);
    }
  }
}

/**
 * Loads a Pardot form settings object.
 *
 * @param int $nid
 *   Associated webform node id.
 *
 * @return object|FALSE
 *   Settings object or false on failure.
 */
function pardot_webform_load($nid) {
  $record = db_query("SELECT * FROM {pardot_webform} WHERE nid = :nid", array(
    ':nid' => $nid,
  ))
    ->fetchObject();
  if ($record) {
    $record->data = unserialize($record->data);
  }
  return $record;
}

/**
 * Helper function that saves Pardot form submissions.
 *
 * @param object $submission
 *   A submission object.
 */
function pardot_webform_submission_save(&$submission) {

  // Set some sane defaults for new submissions.
  if (!isset($submission->submitted)) {
    $submission->submitted = $_SERVER['REQUEST_TIME'];
  }
  if (!isset($submission->status)) {
    $submission->status = PARDOT_STATUS_NEW;
  }
  if (isset($submission->sid)) {
    drupal_write_record('pardot_submissions', $submission, array(
      'sid',
    ));
  }
  else {
    drupal_write_record('pardot_submissions', $submission);
  }
}

/**
 * Loads all webform enabled nodes with Pardot post URL.
 *
 * @return object|FALSE
 *   Settings object or false on failure.
 */
function pardot_webform_enabled_pardot_load() {
  $results = db_query("SELECT * FROM {pardot_webform}");
  $header = array(
    t('Node'),
    t('Edit Post URL'),
    t('URL'),
    t('Active'),
  );
  $rows = array();
  foreach ($results as $result) {
    $node = node_load($result->nid);
    $rows[] = array(
      l($node->title, "node/{$result->nid}"),
      l(t('Edit'), "node/{$result->nid}/webform/pardot"),
      $result->url,
      $result->is_active,
    );
  }
  return theme('table', array(
    'header' => $header,
    'rows' => $rows,
  ));
}

Functions

Namesort descending Description
pardot_webform_enabled_pardot_load Loads all webform enabled nodes with Pardot post URL.
pardot_webform_form_alter Implements hook_form_alter().
pardot_webform_load Loads a Pardot form settings object.
pardot_webform_menu Implements hook_menu().
pardot_webform_submission_save Helper function that saves Pardot form submissions.
pardot_webform_submit Form submission handler for pardot_webform_form_alter().
pardot_webform_theme Implements hook_theme().

Constants

Namesort descending Description
PARDOT_STATUS_FAILED
PARDOT_STATUS_NEW @file Pardot Webform integration module.
PARDOT_STATUS_UPLOADED