You are here

function commerce_coupon_pane_checkout_form in Commerce Coupon 7

Same name and namespace in other branches
  1. 7.2 includes/commerce_coupon.checkout_pane.inc \commerce_coupon_pane_checkout_form()

Payment pane: form callback.

File

includes/commerce_coupon.checkout_pane.inc, line 14
Coupon checkout panes.

Code

function commerce_coupon_pane_checkout_form($form, &$form_state, $checkout_pane, $order) {

  // Allow to replace pane content with ajax calls.
  $pane_form = array(
    '#prefix' => '<div id="commerce-checkout-coupon-ajax-wrapper">',
    '#suffix' => '</div>',
  );

  // Store the payment methods in the form for validation purposes.
  $pane_form['coupon_code'] = array(
    '#type' => 'textfield',
    '#title' => t('Coupon Code'),
    '#description' => t('Enter here your coupon code.'),
  );
  if (variable_get('commerce_coupon_checkout_enable_add_button', TRUE)) {
    $pane_form['coupon_add'] = array(
      '#type' => 'button',
      '#value' => t('Add coupon'),
      '#name' => 'coupon_add',
      '#limit_validation_errors' => array(),
      '#ajax' => array(
        'callback' => 'commerce_coupon_add_coupon_callback',
        'wrapper' => 'commerce-checkout-coupon-ajax-wrapper',
      ),
    );
  }

  // Extract the View and display keys from the cart contents pane setting.
  $pane_view = variable_get('commerce_coupon_checkout_pane_view', 'commerce_coupon_review_pane|checkout');
  if ($pane_view != 'none') {
    list($view_id, $display_id) = explode('|', $pane_view);
    if (!empty($view_id) && !empty($display_id) && views_get_view($view_id)) {
      $pane_form['redeemed_coupons'] = array(
        '#type' => 'markup',
        '#markup' => commerce_embed_view($view_id, $display_id, array(
          $order->order_id,
        )),
      );
    }
  }
  if (isset($form_state['triggering_element']) && $form_state['triggering_element']['#name'] == 'coupon_add') {
    if (!empty($form_state['values']['commerce_coupon']['coupon_add'])) {
      list($view_id, $display_id) = explode('|', $pane_view);
      if (!empty($view_id) && !empty($display_id)) {
        global $_commerce_coupon_validation_error_message;
        $code = $form_state['input']['commerce_coupon']['coupon_code'];
        if (!empty($code) && commerce_coupon_code_is_valid($code, $order)) {
          $coupon = commerce_coupon_load_by_code($code);
          commerce_coupon_redeem_coupon($coupon, $order);

          // Clear the field value so that the coupon code does not get resubmitted
          // causing an error when user uses main "Continue to next step" submit.
          $pane_form['coupon_code']['#value'] = '';
          if (isset($order->order_id) && is_numeric($order->order_id)) {

            // This is to get the summary of the form rerendered.
            $alter_coupon_commands =& drupal_static('alter_coupon_commands');
            $coupon_current_order =& drupal_static('coupon_current_order');
            $alter_coupon_commands = TRUE;
            $coupon_current_order = $order->order_id;
          }

          // Force shopping cart refresh to recalculate all prices there,
          // which is not done automatically in case of percentage coupons.
          commerce_cart_order_refresh($order);
          $pane_form['redeemed_coupons']['#markup'] = commerce_embed_view($view_id, $display_id, array(
            $order->order_id,
          ));
        }
        else {
          if (isset($_commerce_coupon_validation_error_message)) {
            $message = $_commerce_coupon_validation_error_message;
          }
          else {
            $message = t('Your coupon code is not valid.');
          }
          form_set_error('commerce_coupon][coupon_code', $message);
        }
      }
    }
  }

  // Display any new status messages added by this pane within the pane's area.
  if (drupal_get_messages(NULL, FALSE)) {
    $pane_form['status_messages'] = array(
      '#type' => 'markup',
      '#markup' => theme('status_messages'),
      '#weight' => -1,
    );
  }
  return $pane_form;
}