View source
<?php
function uc_webform_views_api() {
return array(
'api' => 2.0,
'path' => drupal_get_path('module', 'uc_webform') . '/views',
);
}
function uc_webform_menu() {
$items = array();
$items['uc_webform/autocomplete'] = array(
'title' => 'Ubercart Webform autocomplete',
'page callback' => 'uc_webform_autocomplete',
'access callback' => 'user_access',
'access arguments' => array(
'edit own webform submissions',
),
'type' => MENU_CALLBACK,
);
$items['admin/store/orders/%/webform'] = array(
'title' => t('Webform Results'),
'page callback' => 'uc_webform_application',
'page arguments' => array(
3,
),
'access arguments' => array(
'view all orders',
),
'type' => MENU_LOCAL_TASK,
);
return $items;
}
function uc_webform_application($oid) {
$urls = explode('/', $_GET['q']);
$webform_order_query = db_query('SELECT * FROM {uc_webform_submission} uc LEFT JOIN {webform_submissions} wc ON uc.sid = wc.sid WHERE order_id = :oid', array(
':oid' => $urls[3],
));
$display = '<ul>';
include_once drupal_get_path('module', 'webform') . '/includes/webform.submissions.inc';
foreach ($webform_order_query as $record) {
$display .= '<li>' . l('Webform Results', 'node/' . $record->nid . '/submission/' . $record->sid) . '</li>';
}
$display .= '</ul>';
return $display;
}
function uc_webform_node_load($nodes, $types) {
$result = db_query('SELECT * FROM {uc_webform} WHERE nid IN(:nids)', array(
':nids' => array_keys($nodes),
));
foreach ($result as $record) {
if (uc_product_is_product($nodes[$record->nid])) {
$nodes[$record->nid]->webform_nid = $record->webform_nid;
$nodes[$record->nid]->uc_webform_submit = $record->submit;
}
}
}
function uc_webform_node_delete($node) {
if (!isset($node->webform_nid) || !isset($node->uc_webform_submit)) {
return;
}
db_delete('uc_webform')
->condition('nid', $node->nid)
->execute();
}
function uc_webform_node_insert($node) {
if (uc_product_is_product($node)) {
db_insert('uc_webform')
->fields(array(
'nid' => $node->nid,
'webform_nid' => $node->webform_nid,
'submit' => $node->uc_webform_submit,
))
->execute();
}
}
function uc_webform_node_update($node) {
uc_webform_node_delete($node);
uc_webform_node_insert($node);
}
function uc_webform_form_node_form_alter(&$form, &$form_state) {
if ($form['#node']->type == 'webform') {
$form['base']['uc_webform_submit'] = array(
'#type' => 'checkbox',
'#title' => t('Add this webform to cart on submission?'),
'#default_value' => isset($form['#node']->uc_webform_submit) ? $form['#node']->uc_webform_submit : FALSE,
);
$form['#submit'][] = 'uc_webform_form_node_submit';
}
else {
if (uc_product_is_product($form['#node'])) {
$form['base']['uc_webform'] = array(
'#type' => 'feildset',
'#title' => t('Webform Settings'),
);
$form['base']['uc_webform']['webform_nid'] = array(
'#type' => 'textfield',
'#title' => t('Application Form'),
'#autocomplete_path' => 'uc_webform/autocomplete',
'#default_value' => isset($form['#node']->webform_nid) ? $form['#node']->webform_nid : null,
'#value_callback' => 'uc_webform_autocomplete_value',
'#element_validate' => array(
'uc_webform_autocomplete_validate',
),
);
$form['base']['uc_webform']['uc_webform_submit'] = array(
'#type' => 'checkbox',
'#title' => t('Redirect user to cart after form submission.'),
'#default_value' => isset($form['#node']->uc_webform_submit) ? $form['#node']->uc_webform_submit : null,
);
}
}
}
function uc_webform_autocomplete($string) {
$results = db_select('node', 'n')
->fields('n')
->condition('n.title', '%' . $string . '%', 'LIKE')
->condition('n.type', 'webform')
->range(0, 10)
->execute();
foreach ($results as $row) {
$matches[$row->title . " [nid:{$row->nid}]"] = '<div class="reference-autocomplete">' . $row->title . '</div>';
}
return drupal_json_output($matches);
}
function uc_webform_autocomplete_value($element, $input = FALSE, $form_state) {
if ($input === FALSE) {
$nid = $element['#default_value'];
if (!empty($nid)) {
$q = db_select('node', 'n');
$node_title_alias = $q
->addField('n', 'title');
$q
->addTag('node_access')
->condition('n.nid', $nid)
->range(0, 1);
$result = $q
->execute();
$value = $result
->fetchField();
$value .= ' [nid:' . $nid . ']';
return $value;
}
}
}
function uc_webform_autocomplete_validate($element, &$form_state, $form) {
$value = $element['#value'];
$nid = NULL;
if (!empty($value)) {
preg_match('/^(?:\\s*|(.*) )?\\[\\s*nid\\s*:\\s*(\\d+)\\s*\\]$/', $value, $matches);
if (!empty($matches)) {
list(, $title, $nid) = $matches;
if (!empty($title)) {
$real_title = db_select('node', 'n')
->fields('n', array(
'title',
))
->condition('n.nid', $nid)
->execute()
->fetchField();
if (trim($title) != trim($real_title)) {
form_error($element, t('%name: title mismatch. Please check your selection.', array(
'%name' => $instance['label'],
)));
}
}
}
}
form_set_value($element, $nid, $form_state);
}
function uc_webform_form_uc_product_add_to_cart_form_alter(&$form, &$form_state) {
if (isset($form['node']['#value']->webform_nid)) {
}
}
function uc_webform_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'webform_component_form' || $form_id == 'webform_component_edit_form') {
if ($form['type']['#value'] == 'select') {
$form['extra']['uc_webform_options'] = array(
'#title' => t('Product SKU '),
'#description' => t('You can choose to set what options will be selected by safe_key|option '),
'#type' => 'textarea',
'#default_value' => variable_get('uc_webform_sku_' . $form['nid']['#value'] . '_' . $form['cid']['#value'], ''),
);
$form['#submit'][] = 'uc_webform_sku_submit';
}
}
if (strpos($form_id, 'webform_client_form') === 0) {
$form['#submit'][] = 'uc_webform_webform_client_form_submit';
}
}
function uc_webform_sku_submit(&$form, &$form_state) {
variable_set('uc_webform_sku_' . $form_state['values']['nid'] . '_' . $form_state['values']['cid'], $form_state['values']['extra']['uc_webform_options']);
}
function uc_webform_webform_client_form_submit(&$form, &$form_state) {
if (has_completed_webform($form['#node']->nid) == TRUE) {
$uc_webform_query = db_query('SELECT * FROM {uc_webform} WHERE webform_nid = :nid', array(
':nid' => $form['#node']->nid,
));
$uc_webform = null;
foreach ($uc_webform_query as $record) {
$uc_webform = $record;
}
$attributes = array();
foreach ($form_state['values']['submitted'] as $id => $value) {
$option_ids = variable_get('uc_webform_sku_' . $form['#node']->nid . '_' . $id, NULL);
if (isset($option_ids)) {
$option_ids = explode("\n", $option_ids);
$available_options = array();
foreach ($option_ids as $option) {
$opt = explode("|", $option);
$available_options[$opt[0]] = $opt[1];
}
$option_ids = $available_options;
$option_name = $option_ids[$value];
$attribute_query = db_query('SELECT aid, oid, name FROM {uc_attribute_options} WHERE name = :name', array(
':name' => $option_name,
));
foreach ($attribute_query as $record) {
$attributes[$record->aid] = $record->oid;
}
}
}
$cid = isset($cid) ? $cid : uc_cart_get_id();
$items = uc_cart_get_contents();
variable_set('uc_webform_cart_item_' . $items[count($items) - 1]->cart_item_id . '_' . $cid, $form_state['values']['details']['sid']);
uc_cart_add_item($uc_webform->nid, 1, array(
'attributes' => $attributes,
'sid' => $form_state['values']['details']['sid'],
));
$product = node_load($uc_webform->nid);
if ($product->uc_webform__submit == 1) {
}
}
}
function uc_webform_uc_checkout_pane() {
$panes[] = array(
'id' => 'application',
'callback' => 'application_checkout_pane',
'title' => t('Class application information'),
'weight' => 4,
);
return $panes;
}
function application_checkout_pane($op, $order, $form = NULL, &$form_state = NULL) {
if (!is_object($order)) {
return;
}
}
function uc_webform_uc_add_to_cart($nid, &$qty, &$data) {
$cid = isset($cid) ? $cid : uc_cart_get_id();
$items = uc_cart_get_contents();
$node = node_load($nid);
$data['sid'] = $date['sid'];
}
function _uc_webform_add_to_cart($node) {
$items = uc_cart_get_contents();
foreach ($items as $item) {
if ($item->nid == $node->webform_nid) {
$item->qty++;
$item->data['original_node'][$node->nid] = $node;
uc_cart_update_item($item);
$found = TRUE;
break;
}
}
if (!isset($found)) {
$data['original_node'][$node->nid] = $node;
uc_cart_add_item($node->webform_nid, 1, $data);
}
}
function uc_webform_uc_order($op, &$arg1, $arg2) {
switch ($op) {
case 'save':
foreach ($arg1->products as $product) {
if (isset($product->data['sid'])) {
_uc_webform_save_submission($product->data['sid'], $arg1);
}
}
break;
case 'new':
case 'load':
break;
}
}
function uc_webform_uc_cart_item($op, &$item) {
switch ($op) {
case 'load':
$item->data['sid'] = variable_get('uc_webform_cart_item_' . $item->cart_item_id . '_' . $item->cart_id, null);
break;
case 'remove':
if (isset($item->data['sid'])) {
if (isset($_SESSION['webform_submission'][$item->data['sid']])) {
unset($_SESSION['webform_submission'][$item->data['sid']]);
}
db_delete('webform_submitted_data')
->condition('sid', $item->data['sid'])
->execute();
db_delete('webform_submissions')
->condition('sid', $item->data['sid'])
->execute();
db_delete('uc_webform_submission')
->condition('sid', $item->data['sid'])
->execute();
}
break;
}
}
function uc_webform_webform_submission_insert($node, $submission) {
$found = FALSE;
$items = uc_cart_get_contents();
foreach ($items as $item) {
if ($item->nid == $submission->nid) {
$item->data['sid'] = $submission->sid;
uc_cart_update_item($item);
$found = TRUE;
}
}
if ($found !== TRUE && isset($node->uc_webform_submit) && $node->uc_webform_submit) {
$data['sid'] = $submission->sid;
uc_cart_add_item($node->nid, 1, $data);
}
}
function uc_webform_webform_submission_delete($node, $submission) {
db_delete('uc_webform_submission')
->condition('sid', $submission->sid)
->execute();
}
function uc_webform_webform_submission_load(&$submissions) {
foreach ($submissions as $delta => $submission) {
$query = db_select('uc_webform_submission', 'ucs')
->fields('ucs')
->condition('sid', $submission->sid)
->execute()
->fetchAssoc();
if ($query) {
$submissions[$delta] = (object) array_merge((array) $submission, $query);
}
}
}
function uc_webform_webform_submission_render_alter(&$renderable) {
if (!isset($renderable['#submission']->order_id)) {
return;
}
}
function has_completed_webform($webform_nid) {
global $user;
$query = db_select('webform_submissions', 'ws');
$query
->leftJoin('uc_webform_submission', 'uc_ws', 'uc_ws.sid = ws.sid');
$query
->leftJoin('uc_orders', 'o', 'uc_ws.order_id = o.order_id');
$or = db_or();
$or
->condition('o.order_status', 'Completed', '!=')
->condition('o.order_status', NULL);
$row = $query
->fields('ws')
->fields('o')
->condition('ws.nid', $webform_nid)
->condition('ws.uid', $user->uid)
->condition('ws.is_draft', 0)
->condition($or)
->execute()
->fetchAssoc();
return (bool) $row;
}
function _uc_webform_save_submission($sid, $order) {
$fields = array(
'sid' => $sid,
'order_id' => $order->order_id,
);
db_delete('uc_webform_submission')
->condition('sid', $sid)
->execute();
db_insert('uc_webform_submission')
->fields($fields)
->execute();
}