function commerce_registration_information_checkout_form_validate in Commerce Registration 7.3
Same name and namespace in other branches
- 7 includes/commerce_registration.checkout_pane.inc \commerce_registration_information_checkout_form_validate()
- 7.2 includes/commerce_registration.checkout_pane.inc \commerce_registration_information_checkout_form_validate()
Commerce checkout pane form validation callback.
File
- includes/
commerce_registration.checkout_pane.inc, line 262 - Checkout pane callback functions.
Code
function commerce_registration_information_checkout_form_validate($form, &$form_state, $checkout_pane, $order) {
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
$ret = TRUE;
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 (registration_status('commerce_product', $id, TRUE) == 1) {
$settings = registration_entity_settings('commerce_product', $id);
$product = $line_item_wrapper->commerce_product;
$emails = array();
$self_products = array();
// Registration objects are stored as a serialized string in the database,
// so we need to unserialize it to get the full registration object.
$registrations = $line_item_wrapper->registrations
->value();
if (!is_array($registrations)) {
$registrations = unserialize($registrations);
}
$validate = array();
$prodkey = 'lineitem-' . $line_item_wrapper->line_item_id
->value();
switch ($settings['settings']['limit_registrations']) {
case 'registrations':
foreach ($form_state['values']['registration_information'][$prodkey] as $i => $quantity_reg) {
foreach ($quantity_reg as $j => $registration) {
$registration['form_index'] = "{$i}][{$j}";
$registration['entity'] = $registrations[$i][$j];
$registration['form_structure'] = $form['registration_information'][$prodkey][$i][$j];
$validate[] = $registration;
}
}
break;
case 'slots':
foreach ($form_state['values']['registration_information'][$prodkey] as $i => $registration) {
$registration['form_index'] = "{$i}";
$registration['entity'] = $registrations[$i];
$registration['form_structure'] = $form['registration_information'][$prodkey][$i];
$validate[] = $registration;
}
break;
}
foreach ($validate as $registration_data) {
// Delete the following when we use ER's validation handler.
$index = $registration_data['form_index'];
if (isset($registration_data['no_reg_permission'])) {
form_set_error("registration_information][{$prodkey}][{$index}][no_reg", t("Unable to continue, you are unable to register for this item. Please remove it from your cart."));
$ret = FALSE;
continue;
}
$entity = $registration_data['entity'];
$type = $registration_data['who_is_registering'];
switch ($type) {
case REGISTRATION_REGISTRANT_TYPE_ANON:
$mail = $registration_data['anon_mail'];
$mail_is_required = $registration_data['anon_mail']['#required'];
if (registration_is_registered($entity, $mail)) {
form_set_error("registration_information][{$prodkey}][{$index}][anon_mail", t("The email address entered is already registered for this item."));
$ret = FALSE;
}
else {
if ($mail_is_required) {
if (empty($mail) || !valid_email_address($mail)) {
form_set_error("registration_information][{$prodkey}][{$index}][anon_mail", t("You must provide a valid email address."));
$ret = FALSE;
}
}
elseif (in_array($mail, $emails)) {
form_set_error("registration_information][{$prodkey}][{$index}][anon_mail", t("Email addresses must be unique for each registrant."));
$ret = FALSE;
}
else {
if ($mail_is_required) {
$emails[] = $mail;
}
}
}
break;
case REGISTRATION_REGISTRANT_TYPE_USER:
$account = user_load_by_name($registration_data['user']);
if ($account !== FALSE) {
if (registration_is_registered($entity, NULL, $account->uid)) {
form_set_error("registration_information][{$prodkey}][{$index}][user", t("That user is already registered for this item."));
$ret = FALSE;
}
}
else {
form_set_error("registration_information][{$prodkey}][{$index}][user", t("Cannot find a user by that username."));
$ret = FALSE;
}
break;
case REGISTRATION_REGISTRANT_TYPE_ME:
global $user;
if (registration_is_registered($entity, NULL, $user->uid)) {
form_set_error("registration_information][{$prodkey}][{$index}][who_is_registering", t("You are already registered for this item."));
$ret = FALSE;
}
if (isset($self_products[$id]) && $self_products[$id] == $user->uid) {
form_set_error("registration_information][{$prodkey}][{$index}][who_is_registering", t("You cannot register yourself for the same item more than once."));
$ret = FALSE;
}
else {
// Set a flag that the current user is registering 'self' for
// this product.
$self_products[$id] = $user->uid;
}
break;
}
// Let other modules do any field API validation if necessary.
field_attach_form_validate('registration', $entity, $registration_data['form_structure'], $form_state);
}
}
}
return $ret;
}