View source
<?php
define('PARDOT_STATUS_NEW', 'new');
define('PARDOT_STATUS_FAILED', 'failed');
define('PARDOT_STATUS_UPLOADED', 'uploaded');
function pardot_webform_theme($existing, $type, $theme, $path) {
return array(
'pardot_webform_components_form' => array(
'render element' => 'form',
'file' => 'pardot_webform.admin.inc',
),
);
}
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;
}
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')) {
$nid = $form['details']['nid']['#value'];
if (empty($nid)) {
return;
}
$form_settings = pardot_webform_load($nid);
if (empty($form_settings) || !$form_settings->is_active) {
return;
}
$form['#submit'][] = 'pardot_webform_submit';
}
}
function pardot_webform_submit($form, &$form_state) {
$values = array();
$values['user_headers'] = automate_get_user_headers();
$post_fields = automate_webform_values($form, $form_state);
$values['post_fields'] = $post_fields;
$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,
));
$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);
}
}
}
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;
}
function pardot_webform_submission_save(&$submission) {
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);
}
}
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,
));
}