function commerce_registration_information_checkout_form in Commerce Registration 7.2
Same name and namespace in other branches
- 7.3 includes/commerce_registration.checkout_pane.inc \commerce_registration_information_checkout_form()
- 7 includes/commerce_registration.checkout_pane.inc \commerce_registration_information_checkout_form()
Commerce checkout pane form builder callback.
File
- includes/
commerce_registration.checkout_pane.inc, line 10 - Checkout pane callback functions.
Code
function commerce_registration_information_checkout_form($form, &$form_state, $checkout_pane, $order) {
global $user;
$pane_form = array();
$show_form = FALSE;
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
// Determine if we should create a new entity or if the user has gone back in
// the checkout process and we should load previously stored values from
// either the checkout pane or from the order.
$find_values = isset($form_state['values'][$checkout_pane['pane_id']]['register_entities']);
$order_values = isset($order->data['register_entities']);
$override_title = variable_get('commerce_registration_product_title', NULL);
$hide_email = variable_get('commerce_registration_hide_email_logged_in', FALSE);
$i = 0;
// Main counter for all the registrations
foreach ($order_wrapper->commerce_line_items as $delta => $line_item_wrapper) {
if (!in_array($line_item_wrapper->type
->value(), commerce_product_line_item_types())) {
continue;
}
$id = (int) $line_item_wrapper->commerce_product->product_id
->value();
if (commerce_registration_product_has_registration_field($id) && registration_status('commerce_product', $id, TRUE) == 1) {
$show_form = TRUE;
$product = $line_item_wrapper->commerce_product;
$line_item_id = $line_item_wrapper->line_item_id
->value();
$quantity = (int) $line_item_wrapper->quantity
->value();
$prodkey = $line_item_id . 'prod-' . $product->sku
->value();
for ($k = 0; $k < $quantity; $k++) {
// We add a single registration for the quantity of the product being
// purchased/registered for.
$label = $i + 1;
$tokens_data = array(
'index' => $label,
);
$title_vars = array(
'@product' => $product->title
->value(),
'@count' => $label,
);
$title = t('@product - Registrant #@count', $title_vars);
// Replace tokens in the title and help text.
if (!empty($override_title)) {
// Support for legacy tokens: '[title]' and '[index]'.
$title = str_replace('[title]', $product->title
->value(), $override_title);
$title = str_replace('[index]', $label, $title);
if (module_exists('token')) {
$title = token_replace($title, array(
'commerce-line-item' => $line_item_wrapper
->value(),
'commerce-order' => $order_wrapper
->value(),
'commerce-registration' => $tokens_data,
));
}
}
$help_text = variable_get('commerce_registration_registrant_help', NULL);
if (!empty($help_text) && module_exists('token')) {
$help_text = token_replace($help_text, array(
'commerce-line-item' => $line_item_wrapper
->value(),
'commerce-order' => $order_wrapper
->value(),
'commerce-registration' => $tokens_data,
));
}
$pane_form[$prodkey][$prodkey . '-reg-' . $i] = array(
'#type' => 'fieldset',
'#title' => $title,
'#collapsible' => TRUE,
'#tree' => TRUE,
'#description' => $help_text,
);
$entity = NULL;
$bundle = registration_get_entity_registration_type('commerce_product', $product
->value());
if ($find_values && isset($form_state['values'][$checkout_pane['pane_id']]['register_entities'][$prodkey][$i])) {
// The entity exists already, so let's just load it from the
// form_state.
$entity = $form_state['values'][$checkout_pane['pane_id']]['register_entities'][$prodkey][$i];
}
elseif ($order_values && isset($order->data['register_entities'][$prodkey][$i])) {
// The entity is not in form_state, but is in the order data, so we
// load it from there instead.
$entity = $order->data['register_entities'][$prodkey][$i];
}
else {
// Entity doesn't exist, so we need to create a new registration.
$entity = commerce_registration_create_product_registration($line_item_wrapper->commerce_product->product_id
->value(), $bundle, $order->order_id);
}
// -------------------------------------------------------------------------
// All the following code can be deleted if we use the form builder from ER.
// -------------------------------------------------------------------------
$options = registration_access_people($entity);
if (count($options) == 0 || !registration_register_page_access('commerce_product', $product
->value())) {
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['no_reg'] = array(
'#markup' => t('You do not have permission to register for this item.'),
);
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['no_reg_permission'] = array(
'#type' => 'hidden',
'#value' => TRUE,
);
return $pane_form;
}
$register_form = registration_form($pane_form, $form_state, $entity);
// Copy fields from the registration form so we don't duplicate functionality.
if (isset($register_form['who_message'])) {
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['who_message'] = $register_form['who_message'];
}
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['register_for'] = $register_form['who_is_registering'];
// Default value for select list if user has saved registration.
if (!is_null($entity
->registrant_type($user))) {
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['register_for']['#default_value'] = $entity
->registrant_type($user);
}
$find_name = "registration_information[{$prodkey}][{$prodkey}-reg-{$i}][register_for]";
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['user'] = $register_form['user'];
// Default value for user autocomplete if user has saved regitration by
// proceeding forward/backward in the checkout process.
if (!empty($entity->user_uid)) {
$referenced_user = user_load($entity->user_uid);
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['user']['#default_value'] = $referenced_user->name;
}
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['user']['#states'] = array(
'visible' => array(
':input[name="' . $find_name . '"]' => array(
'value' => REGISTRATION_REGISTRANT_TYPE_USER,
),
),
);
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['anon_mail'] = $register_form['anon_mail'];
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['anon_mail']['#states'] = array(
'visible' => array(
':input[name="' . $find_name . '"]' => array(
'value' => REGISTRATION_REGISTRANT_TYPE_ANON,
),
),
);
$pane_form[$prodkey][$prodkey . '-reg-' . $i]['#parents'] = array(
'registration_information',
$prodkey,
$prodkey . '-reg-' . $i,
);
// Attach the entity's fields to the form.
field_attach_form('registration', $entity, $pane_form[$prodkey][$prodkey . '-reg-' . $i], $form_state);
// -------------------------------------------------------------------------
$pane_form['register_entities'][$prodkey][$i] = array(
'#type' => 'value',
'#value' => $entity,
);
// Update the total registration counter
$i++;
}
}
}
if (!$show_form) {
// No register enabled products, so go to next step of checkout process.
$pane_form['no_reg_products'] = array(
'#markup' => t('No information required. You may skip this page.'),
);
}
// Allow other modules to alter the pane form.
// Using hook_commerce_registration_information_checkout_form_alter().
drupal_alter('commerce_registration_information_checkout_form', $pane_form, $form_state);
return $pane_form;
}