function commerce_registration_form_alter in Commerce Registration 7.2
Same name and namespace in other branches
- 7 commerce_registration.module \commerce_registration_form_alter()
Implements hook_form_alter().
Changes the product title in the add to cart form to have the remaining capacity if available.
File
- ./
commerce_registration.module, line 313 - Commerce Registration module code.
Code
function commerce_registration_form_alter(&$form, &$form_state, $form_id) {
// Add slots available text to Add to Cart form.
if (substr($form_id, 0, 30) == 'commerce_cart_add_to_cart_form') {
$form['#validate'][] = 'commerce_registration_add_to_cart_validate';
if (!isset($form['product_id'])) {
return;
}
switch ($form['product_id']['#type']) {
case "select":
$count = 0;
$disabled = 0;
$total_regs = 0;
foreach ($form['product_id']['#options'] as $product_id => $title) {
$product = commerce_product_load($product_id);
$wrapper = entity_metadata_wrapper('commerce_product', $product);
$count++;
if (commerce_registration_product_has_registration_field($product->product_id)) {
$total_regs++;
$settings = registration_entity_settings('commerce_product', $product_id);
if (registration_get_entity_registration_type('commerce_product', $product) && !empty($settings)) {
if (registration_status('commerce_product', $product_id, TRUE) == 1 && registration_register_page_access('commerce_product', $product)) {
$fieldsettings = field_extra_fields_get_display('commerce_product', $product->type, 'default');
$showavail = isset($fieldsettings['registration_available']) && isset($fieldsettings['registration_available']['visible']) && $fieldsettings['registration_available']['visible'];
$title = $showavail ? commerce_registration_get_product_title($product, $showavail) : $product->title;
$form['product_id']['#options'][$product_id] = $title;
}
else {
$price = commerce_currency_format($wrapper->commerce_price->amount
->value(), $wrapper->commerce_price->currency_code
->value());
$selector = $count == count($form['product_id']['#options']) ? "prev" : "next";
drupal_add_js('(function ($) { $("select[name=\'product_id\'] option[value=\'' . $product_id . '\']").attr(\'disabled\', \'disabled\'); $("select[name=\'product_id\'] option:selected").' . $selector . '(\'option\').attr(\'selected\', \'selected\'); $(window).load(function() { $("select[name=\'product_id\']").change(); }) }) (jQuery);', 'inline');
$form['unavailable']['product_unavailable_' . $product_id] = array(
'#markup' => '<em>' . t('@product (@price)', array(
'@product' => $product->title,
'@price' => $price,
)) . '</em>' . t(' is currently unavailable.'),
);
$disabled++;
}
}
}
}
if ($disabled === $count && $total_regs == $count) {
$form['product_id']['#type'] = 'hidden';
unset($form['submit']);
$form['unavailable'] = array(
'#markup' => t('There are no products available for registration at this time.'),
);
}
break;
case "hidden":
$product = commerce_product_load($form['product_id']['#value']);
$settings = registration_entity_settings('commerce_product', $form['product_id']['#value']);
if (commerce_registration_product_has_registration_field($product->product_id) && !empty($settings) && registration_status('commerce_product', $form['product_id']['#value'], TRUE) && registration_register_page_access('commerce_product', $product)) {
$fieldsettings = field_extra_fields_get_display('commerce_product', $product->type, 'default');
$showavail = isset($fieldsettings['registration_available']) && isset($fieldsettings['registration_available']['visible']) && $fieldsettings['registration_available']['visible'];
$submit = $form['submit'];
unset($form['submit']);
$capacity = (int) $settings['capacity'];
$avail = $capacity - registration_event_count('commerce_product', $product->product_id);
$availtext = $avail > 0 ? format_plural($avail, '1 slot available', '@count slots available') : t('No slots available');
$capacity = $settings['capacity'] == 0 ? t("Unlimited slots available") : $availtext;
$form['capacity'] = array(
'#type' => 'markup',
'#markup' => '<em>' . $capacity . '</em>',
);
if (!$showavail) {
unset($form['capacity']);
}
if (registration_has_room('commerce_product', $product->product_id)) {
$form['submit'] = $submit;
}
else {
$form['not_available'] = array(
'#type' => 'markup',
'#markup' => '<p><strong>' . t('This item is currently unavailable.') . '</strong></p>',
);
}
}
break;
}
}
elseif (substr($form_id, 0, 32) == 'commerce_product_ui_product_form') {
// Add settings to Commerce Product Add/Edit Form.
$product = $form_state['commerce_product'];
if (isset($product->product_id)) {
$settings = registration_entity_settings('commerce_product', $product->product_id);
if (commerce_registration_product_has_registration_field($product->product_id)) {
if (!function_exists("registration_entity_settings_form_validate")) {
form_load_include($form_state, 'inc', 'registration', 'includes/registration.forms');
}
if (!function_exists("commerce_registration_registration_settings_form_validate")) {
form_load_include($form_state, 'inc', 'commerce_registration', 'includes/commerce_registration.forms');
}
// Add validation and submission handlers to the form.
$form['#validate'][] = "commerce_registration_registration_settings_form_validate";
$form['actions']['submit']['#submit'][] = "commerce_registration_registration_settings_form_submit";
$collapsed = empty($form['field_registration'][LANGUAGE_NONE]['0']['registration_type']['#default_value']['registration_type']) ? TRUE : FALSE;
$form['registration_settings'] = array(
'#title' => t('Registration Settings'),
'#type' => "fieldset",
'#collapsible' => TRUE,
'#collapsed' => $collapsed,
'#weight' => 45,
'#tree' => TRUE,
'#states' => array(
'collapsed' => array(
':input[name="field_registration[und][0][registration_type]"]' => array(
'value' => '',
),
),
),
);
// Grab the registration settings form for this entity.
$addform = registration_entity_settings_form(array(), $form_state, $settings, "commerce_product", $product);
// Remove the save button for this form since we have one already.
unset($addform['save']);
// We rename the registration settings form's status field to be reg_status
// so our validation and submission doesn't overwrite the product's status.
$addform['reg_status'] = $addform['status'];
$addform['reg_status']['#weight'] = -20;
unset($addform['status']);
// Add parents to each registration setting so we can get the values.
foreach ($addform as $key => $array) {
$addform[$key]['#parents'] = array(
'registration_settings',
$key,
);
}
// Add the registration settings form to the base form.
$form['registration_settings'] += $addform;
$form['registration_settings']['reminder']['#parents'] = array(
'registration_settings',
'reminder',
);
$form['registration_settings']['reminder']['reminder_settings']['#states']['visible'] = array(
':input[name="registration_settings[send_reminder]"]' => array(
'checked' => TRUE,
),
);
$form['registration_settings']['settings']['hide_from_display'] = array(
'#type' => 'checkbox',
'#title' => t('Hide Manage Registrations tab from product display nodes'),
'#default_value' => isset($settings['settings']['hide_from_display']) ? $settings['settings']['hide_from_display'] : 0,
);
}
}
}
elseif (substr($form_id, -9) == 'node_form') {
$node = NULL;
if (isset($form_state['node']) && !empty($form_state['node'])) {
$node = $form_state['node'];
}
$fields = field_read_fields(array(
'type' => 'commerce_product_reference',
));
$has_product_reference = FALSE;
foreach ($fields as $field) {
if (isset($node->{$field['field_name']}) && !isset($node->clone_from_original_nid)) {
$has_product_reference = TRUE;
break;
}
}
if ($has_product_reference) {
$node_settings = db_select('commerce_registration_node_settings', 'ns')
->fields('ns', array(
'settings',
))
->condition('nid', $node->nid)
->execute()
->fetchCol();
$node_settings = isset($node_settings[0]) ? $node_settings[0] : array();
if (!is_array($node_settings)) {
$node_settings = unserialize($node_settings);
}
$form['commerce_registration'] = array(
'#type' => 'fieldset',
'#title' => t('Commerce Registration settings'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#group' => 'additional_settings',
'#tree' => TRUE,
);
$form['commerce_registration']['hide_from_display'] = array(
'#type' => 'checkbox',
'#title' => t('Hide Manage Registrations tab on this node'),
'#default_value' => isset($node_settings['hide_from_display']) ? $node_settings['hide_from_display'] : 0,
);
$form['#submit'][] = 'commerce_registration_node_settings_form_submit';
}
}
}