You are here

function uc_discounts_uc_checkout_pane_discounts in Ubercart Discounts (Alternative) 7.2

Discounts checkout pane callback.

More information at http://www.ubercart.org/docs/developer/245/checkout

1 string reference to 'uc_discounts_uc_checkout_pane_discounts'
uc_discounts_uc_checkout_pane in uc_discounts/uc_discounts.module
Implements hook_uc_checkout_pane().

File

uc_discounts/uc_discounts.module, line 540

Code

function uc_discounts_uc_checkout_pane_discounts($op, $order, $form = NULL, &$form_state = NULL) {
  switch ($op) {
    case 'view':
      uc_discounts_apply($order, FALSE, FALSE);
      $show_codes = variable_get('uc_discounts_checkout_allow_user_codes', TRUE);
      $show_messages = variable_get('uc_discounts_checkout_show_messages', TRUE);
      $description = '';
      $contents = array();

      // Get results for coded and codeless discounts.
      if ($show_codes || $show_messages) {
        $results = uc_discounts_get_discounts_for_order($order);
      }

      // If customer can enter codes then display the codes text field.
      if ($show_codes) {
        $description = t("Enter discount codes in the box below (one per line).");
        $codes = array();
        foreach ($results['discounts'] as $discount) {
          if (!empty($discount->code)) {
            $codes[] = $discount->code;
          }
        }
        $codes_str = uc_discounts_codes_to_str($codes);
        $contents['codes'] = array(
          '#type' => 'textarea',
          '#default_value' => $codes_str,
          '#rows' => 5,
        );
      }

      // If customer can see discount messages then display them.
      if ($show_messages) {
        $messages = '';
        if (count($results['messages']['success'])) {
          $messages .= '<div class="messages status"><ul>';
          foreach ($results['messages']['success'] as $message) {
            $messages .= '<li>' . $message . '</li>';
          }
          $messages .= '</ul></div>';
        }
        if (count($results['messages']['errors'])) {
          $messages .= '<div class="messages errors"><ul>';
          foreach ($results['messages']['errors'] as $error) {
            $messages .= '<li>' . $error . '</li>';
          }
          $messages .= '</ul></div>';
        }
        if (count($results['messages']['warnings'])) {
          $messages .= '<div class="messages warning"><ul>';
          foreach ($results['messages']['warnings'] as $warning) {
            $messages .= '<li>' . $warning . '</li>';
          }
          $messages .= '</ul></div>';
        }
        $contents['messages'] = array(
          '#markup' => '<div id="uc-discounts-messages-container">' . $messages . '</div>',
        );
      }

      // Add submit button and callback if customer can enter discount codes.
      if ($show_codes) {
        $contents['button'] = array(
          '#type' => 'button',
          '#value' => t('Click to calculate discounts'),
          '#ajax' => array(
            'callback' => 'uc_discounts_checkout_pane_ajax_callback',
            'event' => 'mousedown',
            'method' => 'replace',
            'effect' => 'fade',
            'wrapper' => 'uc-discounts-messages-container',
            'progress' => array(
              'type' => 'throbber',
              'message' => t('Calculating discounts...'),
            ),
          ),
        );

        // Set callback to refresh the order totals display.
        $form_state['uc_ajax']['uc_discounts']['panes][uc_discounts][button'] = array(
          'payment-pane' => 'uc_ajax_replace_checkout_pane',
        );
      }

      // Only display pane if customer can enter codes or there are messages.
      $pane_return = array();
      if (!empty($contents)) {
        $pane_return['description'] = $description;
        $pane_return['contents'] = $contents;
      }
      return $pane_return;
    case 'process':

      // Save form values from checkout pane in order.
      if (isset($form_state['values']['panes']['uc_discounts']['codes'])) {
        $order->uc_discounts_codes = uc_discounts_codes_to_array($form_state['values']['panes']['uc_discounts']['codes']);
      }
      $result = uc_discounts_apply($order, FALSE, FALSE);
      return $result['success'];
    case 'settings':
      module_load_include('inc', 'uc_discounts', 'uc_discounts.admin');
      return uc_discounts_admin_checkout_pane_settings_form($form, $form_state);
  }
}