uc_payment.ca.inc in Ubercart 6.2
This file contains the Conditional Actions hooks and functions necessary to make the order related entity, conditions, events, and actions work.
File
payment/uc_payment/uc_payment.ca.incView source
<?php
/**
* @file
* This file contains the Conditional Actions hooks and functions necessary to
* make the order related entity, conditions, events, and actions work.
*/
/******************************************************************************
* Conditional Actions Hooks *
******************************************************************************/
/**
* Implements hook_ca_predicate().
*/
function uc_payment_ca_predicate() {
$predicates = array();
// Set the order status to "Payment Received" when a payment is received
// and the balance is less than or equal to 0.
$predicates['uc_payment_received'] = array(
'#title' => t('Update order status on full payment'),
'#description' => t('Only happens when a payment is entered and the balance is <= $0.00.'),
'#class' => 'payment',
'#trigger' => 'uc_payment_entered',
'#status' => 1,
'#conditions' => array(
'#operator' => 'AND',
'#conditions' => array(
array(
'#name' => 'uc_payment_condition_order_balance',
'#title' => t('If the balance is less than or equal to $0.00.'),
'#argument_map' => array(
'order' => 'order',
),
'#settings' => array(
'negate' => FALSE,
'balance_comparison' => 'less_equal',
),
),
array(
'#operator' => 'OR',
'#conditions' => array(
array(
'#name' => 'uc_order_state_condition',
'#title' => t('If the order state is in checkout.'),
'#argument_map' => array(
'order' => 'order',
),
'#settings' => array(
'order_state' => 'in_checkout',
),
),
array(
'#name' => 'uc_order_state_condition',
'#title' => t('If the order state is post checkout.'),
'#argument_map' => array(
'order' => 'order',
),
'#settings' => array(
'order_state' => 'post_checkout',
),
),
),
),
),
),
'#actions' => array(
array(
'#name' => 'uc_order_update_status',
'#title' => t('Update the order status to Payment Received.'),
'#argument_map' => array(
'order' => 'order',
),
'#settings' => array(
'order_status' => 'payment_received',
),
),
),
);
// Set the order status to "Completed" when payment has been received
// and none of the products are shippable.
$predicates['uc_checkout_complete_paid'] = array(
'#title' => t('Complete non-shippable order after payment received'),
'#trigger' => 'uc_order_status_update',
'#class' => 'payment',
'#status' => 1,
'#weight' => 1,
'#conditions' => array(
'#operator' => 'AND',
'#conditions' => array(
array(
'#name' => 'uc_order_status_condition',
'#title' => t('If the order status is Payment received.'),
'#argument_map' => array(
'order' => 'updated_order',
),
'#settings' => array(
'order_status' => 'payment_received',
),
),
array(
'#name' => 'uc_order_condition_is_shippable',
'#title' => t('If the order is not shippable.'),
'#argument_map' => array(
'order' => 'updated_order',
),
'#settings' => array(
'negate' => TRUE,
),
),
),
),
'#actions' => array(
array(
'#name' => 'uc_order_update_status',
'#title' => t('Update the order status to Completed.'),
'#argument_map' => array(
'order' => 'updated_order',
),
'#settings' => array(
'order_status' => 'completed',
),
),
),
);
return $predicates;
}
/**
* Implements hook_ca_trigger().
*/
function uc_payment_ca_trigger() {
$triggers['uc_payment_entered'] = array(
'#title' => t('A payment gets entered for an order'),
'#category' => t('Payment'),
'#arguments' => array(
'order' => array(
'#entity' => 'uc_order',
'#title' => t('Order'),
),
'account' => array(
'#entity' => 'user',
'#title' => t('User'),
),
),
);
return $triggers;
}
/**
* Implements hook_ca_condition().
*/
function uc_payment_ca_condition() {
$conditions['uc_payment_condition_order_balance'] = array(
'#title' => t('Check the order balance'),
'#category' => t('Payment'),
'#callback' => 'uc_payment_condition_order_balance',
'#arguments' => array(
'order' => array(
'#entity' => 'uc_order',
),
),
);
$conditions['uc_order_condition_payment_method'] = array(
'#title' => t('Check the payment method'),
'#category' => t('Order'),
'#callback' => 'uc_order_condition_payment_method',
'#arguments' => array(
'order' => array(
'#entity' => 'uc_order',
),
),
);
return $conditions;
}
/******************************************************************************
* Condition Callbacks and Forms *
******************************************************************************/
/**
* Check the current order balance.
*/
function uc_payment_condition_order_balance($order, $settings) {
$balance = uc_payment_balance($order);
if (!empty($settings['include_authorizations'])) {
foreach ((array) $order->data['cc_txns']['authorizations'] as $auth_id => $data) {
$balance -= $data['amount'];
}
}
switch ($settings['balance_comparison']) {
case 'less':
return $balance < 0;
case 'less_equal':
return $balance <= 0.01;
case 'equal':
return $balance < 0.01 && $balance > -0.01;
case 'greater':
return $balance >= 0.01;
}
}
function uc_payment_condition_order_balance_form($form_state, $settings = array()) {
$context = array(
'revision' => 'formatted',
'type' => 'amount',
);
$zero = array(
'!zero' => uc_price(0, $context),
);
$options = array(
'less' => t('Balance is less than !zero.', $zero),
'less_equal' => t('Balance is less than or equal to !zero.', $zero),
'equal' => t('Balance is equal to !zero.', $zero),
'greater' => t('Balance is greater than !zero.', $zero),
);
$form['balance_comparison'] = array(
'#type' => 'radios',
'#title' => t('Balance comparison type'),
'#options' => $options,
'#default_value' => isset($settings['balance_comparison']) ? $settings['balance_comparison'] : 'equal',
);
$form['include_authorizations'] = array(
'#type' => 'checkbox',
'#title' => t('Include authorizations?'),
'#description' => t('Should "authorization only" credit card transactions be used in calculating the order balance?'),
'#default_value' => isset($settings['include_authorizations']) ? $settings['include_authorizations'] : FALSE,
);
return $form;
}
/**
* Check the order payment method.
*/
function uc_order_condition_payment_method($order, $settings) {
return $order->payment_method == $settings['payment_method'];
}
function uc_order_condition_payment_method_form($form_state, $settings = array()) {
foreach (_payment_method_list() as $method) {
$options[$method['id']] = $method['title'];
}
$form['payment_method'] = array(
'#type' => 'radios',
'#title' => t('Payment method'),
'#options' => $options,
'#default_value' => $settings['payment_method'],
);
return $form;
}
Functions
Name | Description |
---|---|
uc_order_condition_payment_method | Check the order payment method. |
uc_order_condition_payment_method_form | |
uc_payment_ca_condition | Implements hook_ca_condition(). |
uc_payment_ca_predicate | Implements hook_ca_predicate(). |
uc_payment_ca_trigger | Implements hook_ca_trigger(). |
uc_payment_condition_order_balance | Check the current order balance. |
uc_payment_condition_order_balance_form |