function commerce_donate_checkout_pane_checkout_form in Commerce Donate 7
Create the donate checkout pane form.
File
- includes/
commerce_donate.checkout_pane.inc, line 63 - Contains callback functions for the commerce_donate checkout pane.
Code
function commerce_donate_checkout_pane_checkout_form($form, &$form_state, $checkout_pane, $order) {
$pane_id = $checkout_pane['pane_id'];
$product_id = variable_get('commerce_donate_checkout_pane_product_id', 0);
if (!empty($product_id) || !is_numeric($product_id)) {
$pane_form = array();
$product = commerce_product_load($product_id);
$line_item = commerce_product_line_item_new($product, 1, 0, array(), 'commerce_donate');
$form_state['donate_line_item'] = $line_item;
// Add the line item's fields to a container on the form.
$pane_form[$pane_id] = array(
'#type' => 'container',
'#parents' => array(
$pane_id,
),
'#weight' => 10,
'#tree' => TRUE,
);
// Check if donation has already been added.
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
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 ($id == $product_id) {
$pane_form[$pane_id]['already_added'] = array(
'#markup' => t('A donation has already been added to your order. You can remove this donation by editing your <a href="@url">shopping cart</a>.', array(
'@url' => url('cart'),
)),
);
// Return without additional fields.
return $pane_form;
}
}
field_attach_form('commerce_line_item', $line_item, $pane_form[$pane_id], $form_state);
foreach (element_children($pane_form[$pane_id]) as $field_name) {
$info = field_info_instance('commerce_line_item', $field_name, $line_item->type);
$pane_form[$pane_id][$field_name]['#commerce_cart_settings'] = commerce_cart_field_instance_access_settings($info);
if (empty($pane_form[$pane_id][$field_name]['#commerce_cart_settings']['field_access'])) {
$pane_form[$pane_id][$field_name]['#access'] = FALSE;
}
elseif ($field_name == 'commerce_donate_amount') {
$language = $pane_form[$pane_id][$field_name]['#language'];
$form_state['language'] = $language;
$pane_form[$pane_id][$field_name][$language]['#default_value'] = '';
$pane_form[$pane_id][$field_name][$language]['#required'] = FALSE;
// Allow for people changing the select to a text field.
if (!empty($pane_form[$pane_id][$field_name][$language]['#options'])) {
$default_options = $pane_form[$pane_id][$field_name][$language]['#options'];
// Override default field available options.
if (variable_get('commerce_donate_checkout_pane_override_options', FALSE)) {
$overridden_options_string = variable_get('commerce_donate_checkout_pane_donate_amounts', '');
if (!empty($overridden_options_string)) {
$line_options = explode("\n", $overridden_options_string);
$pos = strpos($overridden_options_string, '|');
if ($pos !== FALSE) {
// There are keys.
foreach ($line_options as $line) {
$exploded = explode('|', $line);
$temp_options[$exploded[0]] = $exploded[1];
}
$default_options = $temp_options;
}
}
}
// Add in 'none' option.
$options = array(
'' => t('None'),
);
foreach ($default_options as $key => $label) {
$options[$key] = $label;
}
$pane_form[$pane_id][$field_name][$language]['#options'] = $options;
}
$description = variable_get('commerce_donate_checkout_pane_description', '');
if (!empty($description)) {
$pane_form[$pane_id][$field_name][$language]['#prefix'] = filter_xss($description);
}
}
}
return $pane_form;
}
}