You are here

uc_free_order.module in UC Free Order Payment Method 7

Same filename and directory in other branches
  1. 5 uc_free_order.module
  2. 6 uc_free_order.module

Adds a payment method to handle free orders.

File

uc_free_order.module
View source
<?php

/**
 * @file
 * Adds a payment method to handle free orders.
 */

/**
 * Implementation of hook_permission().
 */
function uc_free_order_permission() {
  return array(
    'test free order' => array(
      'title' => t('Test Free Order Functionality'),
    ),
  );
}

/**
 * Implementation of hook_uc_payment_method().
 */
function uc_free_order_uc_payment_method() {
  $methods['freeorder'] = array(
    'name' => t('Free order'),
    'title' => t('Free order - payment not necessary.'),
    'desc' => t('Allow customers with $0 order totals to checkout without paying.'),
    'callback' => 'uc_uc_payment_method_free_order',
    'checkout' => TRUE,
    'no_gateway' => TRUE,
    'weight' => 1,
  );
  return $methods;
}

/**
 * Implementation of hook_form_FORM_ID_alter().
 */
function uc_free_order_form_uc_cart_checkout_form_alter(&$form, &$form_state, $form_id) {
  if (!user_access('test free order')) {
    return;
  }
  $order = $form['panes']['payment']['line_items']['#order'];
  $subtotal = $order->order_total;

  //line_items[0]['amount']; //gets the order total, $order->order_total is always 0
  if ($subtotal >= 0.01) {
    unset($form['panes']['payment']['payment_method']['#options']['freeorder']);
    return;
  }
  $free_order = $form['panes']['payment']['payment_method']['#options']['freeorder'];
  $form['panes']['payment']['payment_method']['#options'] = array(
    'freeorder' => $free_order,
  );
}
function uc_free_order_form_uc_cart_checkout_review_form_alter(&$form, &$form_state, $form_id) {
  $order = uc_order_load($_SESSION['cart_order']);
  if ($order->payment_method != 'freeorder') {
    return;
  }
  if ($order->order_total >= 0.01) {
    drupal_set_message(t('We cannot process your order without payment.'), 'error');
    drupal_goto('cart/checkout');
  }
}

// Handles the free order payment method.
function uc_uc_payment_method_free_order($op, &$order) {
  if ($op == 'cart-details') {
    return array(
      '#markup' => t('Continue with checkout to complete your free order.'),
    );
    uc_payment_enter($order->order_id, 'freeorder', 0, 0, NULL, t('Checkout completed for a free order.'));
  }
}