You are here

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;
  }
}