2011-08-10 17:11:11 +00:00
< ? php
/**
* Bank Transfer Payment Gateway
2012-08-15 18:15:06 +00:00
*
2011-09-22 14:14:55 +00:00
* Provides a Bank Transfer Payment Gateway . Based on code by Mike Pepper .
2011-08-10 17:11:11 +00:00
*
2012-01-27 16:38:39 +00:00
* @ class WC_BACS
2012-08-15 18:15:06 +00:00
* @ extends WC_Payment_Gateway
* @ version 1.6 . 4
* @ package WooCommerce / Classes / Payment
* @ author WooThemes
2011-08-10 17:11:11 +00:00
*/
2012-10-15 10:57:58 +00:00
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
2012-01-27 16:38:39 +00:00
class WC_BACS extends WC_Payment_Gateway {
2011-08-10 17:11:11 +00:00
2012-08-15 18:15:06 +00:00
/**
* Constructor for the gateway .
*
* @ access public
* @ return void
*/
public function __construct () {
2011-11-03 09:34:53 +00:00
$this -> id = 'bacs' ;
$this -> icon = apply_filters ( 'woocommerce_bacs_icon' , '' );
2011-09-22 14:14:55 +00:00
$this -> has_fields = false ;
2012-01-31 12:35:01 +00:00
$this -> method_title = __ ( 'Bacs' , 'woocommerce' );
2011-09-22 14:14:55 +00:00
// Load the form fields.
$this -> init_form_fields ();
2012-08-15 18:15:06 +00:00
2011-09-22 14:14:55 +00:00
// Load the settings.
$this -> init_settings ();
2012-08-15 18:15:06 +00:00
2011-09-22 14:14:55 +00:00
// Define user set variables
$this -> title = $this -> settings [ 'title' ];
$this -> description = $this -> settings [ 'description' ];
$this -> account_name = $this -> settings [ 'account_name' ];
$this -> account_number = $this -> settings [ 'account_number' ];
$this -> sort_code = $this -> settings [ 'sort_code' ];
$this -> bank_name = $this -> settings [ 'bank_name' ];
$this -> iban = $this -> settings [ 'iban' ];
2012-08-15 18:15:06 +00:00
$this -> bic = $this -> settings [ 'bic' ];
2011-09-22 14:14:55 +00:00
// Actions
2011-09-15 16:37:38 +00:00
add_action ( 'woocommerce_update_options_payment_gateways' , array ( & $this , 'process_admin_options' ));
2011-09-22 14:14:55 +00:00
add_action ( 'woocommerce_thankyou_bacs' , array ( & $this , 'thankyou_page' ));
2012-08-15 18:15:06 +00:00
2011-11-02 20:32:35 +00:00
// Customer Emails
add_action ( 'woocommerce_email_before_order_table' , array ( & $this , 'email_instructions' ), 10 , 2 );
2012-08-15 18:15:06 +00:00
}
2011-08-10 17:11:11 +00:00
2012-08-15 18:15:06 +00:00
/**
2011-09-22 14:14:55 +00:00
* Initialise Gateway Settings Form Fields
2012-08-15 18:15:06 +00:00
*
* @ access public
* @ return void
2011-09-22 14:14:55 +00:00
*/
function init_form_fields () {
2012-08-15 18:15:06 +00:00
2011-09-22 14:14:55 +00:00
$this -> form_fields = array (
'enabled' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Enable/Disable' , 'woocommerce' ),
'type' => 'checkbox' ,
'label' => __ ( 'Enable Bank Transfer' , 'woocommerce' ),
2011-09-22 14:14:55 +00:00
'default' => 'yes'
2012-08-15 18:15:06 +00:00
),
2011-09-22 14:14:55 +00:00
'title' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Title' , 'woocommerce' ),
'type' => 'text' ,
'description' => __ ( 'This controls the title which the user sees during checkout.' , 'woocommerce' ),
2012-01-05 11:31:22 +00:00
'default' => __ ( 'Direct Bank Transfer' , 'woocommerce' )
2011-09-22 14:14:55 +00:00
),
'description' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Customer Message' , 'woocommerce' ),
'type' => 'textarea' ,
'description' => __ ( 'Give the customer instructions for paying via BACS, and let them know that their order won\'t be shipping until the money is received.' , 'woocommerce' ),
2012-10-16 09:45:33 +00:00
'default' => __ ( 'Make your payment directly into our bank account. Please use your Order ID as the payment reference. Your order wont be shipped until the funds have cleared in our account.' , 'woocommerce' )
2011-09-22 14:14:55 +00:00
),
2012-07-26 14:11:29 +00:00
'account_details' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Account Details' , 'woocommerce' ),
'type' => 'title' ,
'description' => __ ( 'Optionally enter your bank details below for customers to pay into.' , 'woocommerce' ),
2012-07-26 14:11:29 +00:00
'default' => ''
),
2011-09-22 14:14:55 +00:00
'account_name' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Account Name' , 'woocommerce' ),
'type' => 'text' ,
'description' => '' ,
2011-09-22 14:14:55 +00:00
'default' => ''
),
'account_number' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Account Number' , 'woocommerce' ),
'type' => 'text' ,
'description' => '' ,
2011-09-22 14:14:55 +00:00
'default' => ''
),
'sort_code' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Sort Code' , 'woocommerce' ),
'type' => 'text' ,
'description' => '' ,
2011-09-22 14:14:55 +00:00
'default' => ''
),
'bank_name' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Bank Name' , 'woocommerce' ),
'type' => 'text' ,
'description' => '' ,
2011-09-22 14:14:55 +00:00
'default' => ''
),
'iban' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'IBAN' , 'woocommerce' ),
'type' => 'text' ,
2012-10-16 09:45:33 +00:00
'description' => __ ( 'Your bank may require this for international payments' , 'woocommerce' ),
2011-09-22 14:14:55 +00:00
'default' => ''
),
'bic' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'BIC (formerly Swift)' , 'woocommerce' ),
'type' => 'text' ,
'description' => __ ( 'Your bank may require this for international payments' , 'woocommerce' ),
2011-09-22 14:14:55 +00:00
'default' => ''
),
2011-08-10 17:11:11 +00:00
2011-09-22 14:14:55 +00:00
);
2012-08-15 18:15:06 +00:00
}
2011-09-22 14:14:55 +00:00
/**
2012-08-15 18:15:06 +00:00
* Admin Panel Options
2011-09-22 14:14:55 +00:00
* - Options for bits like 'title' and availability on a country - by - country basis
*
2012-08-15 18:15:06 +00:00
* @ access public
* @ return void
2011-09-22 14:14:55 +00:00
*/
public function admin_options () {
?>
2012-10-16 09:45:33 +00:00
< h3 >< ? php _e ( 'BACS Payment' , 'woocommerce' ); ?> </h3>
< p >< ? php _e ( 'Allows payments by BACS (Bank Account Clearing System), more commonly known as direct bank/wire transfer.' , 'woocommerce' ); ?> </p>
2011-09-22 14:14:55 +00:00
< table class = " form-table " >
< ? php
// Generate the HTML For the settings form.
$this -> generate_settings_html ();
?>
</ table ><!--/. form - table -->
< ? php
2012-08-15 18:15:06 +00:00
}
2011-08-10 17:11:11 +00:00
2012-08-15 18:15:06 +00:00
/**
* Output for the order received page .
*
* @ access public
* @ return void
*/
2011-08-10 17:11:11 +00:00
function thankyou_page () {
2012-08-15 18:15:06 +00:00
if ( $description = $this -> get_description () )
2012-10-17 12:46:35 +00:00
echo wpautop ( wptexturize ( wp_kses_post ( $description ) ) );
2012-08-15 18:15:06 +00:00
2012-10-17 12:46:35 +00:00
echo '<h2>' . __ ( 'Our Details' , 'woocommerce' ) . '</h2>' ;
echo '<ul class="order_details bacs_details">' ;
2012-08-15 18:15:06 +00:00
2012-02-24 10:59:28 +00:00
$fields = apply_filters ( 'woocommerce_bacs_fields' , array (
2012-10-16 09:45:33 +00:00
'account_name' => __ ( 'Account Name' , 'woocommerce' ),
'account_number' => __ ( 'Account Number' , 'woocommerce' ),
'sort_code' => __ ( 'Sort Code' , 'woocommerce' ),
'bank_name' => __ ( 'Bank Name' , 'woocommerce' ),
'iban' => __ ( 'IBAN' , 'woocommerce' ),
'bic' => __ ( 'BIC' , 'woocommerce' )
2012-02-24 10:59:28 +00:00
));
2012-08-15 18:15:06 +00:00
2012-10-17 12:46:35 +00:00
foreach ( $fields as $key => $value ) {
if ( ! empty ( $this -> $key ) ) {
echo '<li class="' . esc_attr ( $key ) . '">' . esc_attr ( $value ) . ': <strong>' . wptexturize ( $this -> $key ) . '</strong></li>' ;
}
}
2012-08-15 18:15:06 +00:00
2012-10-17 12:46:35 +00:00
echo '</ul>' ;
2011-11-02 20:32:35 +00:00
}
2012-08-15 18:15:06 +00:00
2011-11-02 20:32:35 +00:00
/**
2012-08-15 18:15:06 +00:00
* Add content to the WC emails .
*
* @ access public
* @ param WC_Order $order
* @ param bool $sent_to_admin
* @ return void
*/
2011-11-02 20:32:35 +00:00
function email_instructions ( $order , $sent_to_admin ) {
2012-08-15 18:15:06 +00:00
2011-11-02 20:32:35 +00:00
if ( $sent_to_admin ) return ;
2012-08-15 18:15:06 +00:00
2011-11-02 20:32:35 +00:00
if ( $order -> status !== 'on-hold' ) return ;
2012-08-15 18:15:06 +00:00
2011-11-02 20:32:35 +00:00
if ( $order -> payment_method !== 'bacs' ) return ;
2012-08-15 18:15:06 +00:00
if ( $description = $this -> get_description () )
2012-06-29 18:44:33 +00:00
echo wpautop ( wptexturize ( $description ) );
2012-08-15 18:15:06 +00:00
2012-10-16 09:45:33 +00:00
?> <h2><?php _e( 'Our Details', 'woocommerce' ) ?></h2><ul class="order_details bacs_details"><?php
2012-08-15 18:15:06 +00:00
2012-02-24 10:59:28 +00:00
$fields = apply_filters ( 'woocommerce_bacs_fields' , array (
2012-10-16 09:45:33 +00:00
'account_name' => __ ( 'Account Name' , 'woocommerce' ),
'account_number' => __ ( 'Account Number' , 'woocommerce' ),
'sort_code' => __ ( 'Sort Code' , 'woocommerce' ),
'bank_name' => __ ( 'Bank Name' , 'woocommerce' ),
'iban' => __ ( 'IBAN' , 'woocommerce' ),
'bic' => __ ( 'BIC' , 'woocommerce' )
2012-02-24 10:59:28 +00:00
));
2012-08-15 18:15:06 +00:00
2011-11-02 20:32:35 +00:00
foreach ( $fields as $key => $value ) :
2011-11-08 10:26:27 +00:00
if ( ! empty ( $this -> $key )) :
echo '<li class="' . $key . '">' . $value . ': <strong>' . wptexturize ( $this -> $key ) . '</strong></li>' ;
endif ;
2011-11-02 20:32:35 +00:00
endforeach ;
2012-08-15 18:15:06 +00:00
2011-11-02 20:32:35 +00:00
?> </ul><?php
2011-08-10 17:11:11 +00:00
}
2012-08-15 18:15:06 +00:00
2011-08-10 17:11:11 +00:00
/**
2012-08-15 18:15:06 +00:00
* Process the payment and return the result
*
* @ access public
* @ param int $order_id
* @ return array
*/
2011-08-10 17:11:11 +00:00
function process_payment ( $order_id ) {
2011-09-06 11:11:22 +00:00
global $woocommerce ;
2012-08-15 18:15:06 +00:00
2012-01-27 16:38:39 +00:00
$order = new WC_Order ( $order_id );
2012-08-15 18:15:06 +00:00
2011-09-06 11:11:22 +00:00
// Mark as on-hold (we're awaiting the payment)
2012-10-16 09:45:33 +00:00
$order -> update_status ( 'on-hold' , __ ( 'Awaiting BACS payment' , 'woocommerce' ));
2012-08-15 18:15:06 +00:00
2011-11-26 22:22:25 +00:00
// Reduce stock levels
$order -> reduce_order_stock ();
2011-09-06 11:11:22 +00:00
// Remove cart
$woocommerce -> cart -> empty_cart ();
2012-08-15 18:15:06 +00:00
2011-09-06 11:11:22 +00:00
// Return thankyou redirect
return array (
'result' => 'success' ,
2012-01-12 00:54:45 +00:00
'redirect' => add_query_arg ( 'key' , $order -> order_key , add_query_arg ( 'order' , $order -> id , get_permalink ( woocommerce_get_page_id ( 'thanks' ))))
2011-09-06 11:11:22 +00:00
);
2011-08-10 17:11:11 +00:00
}
}
2012-08-15 18:15:06 +00:00
2011-08-10 17:11:11 +00:00
/**
* Add the gateway to WooCommerce
2012-08-15 18:15:06 +00:00
*
* @ access public
* @ param array $methods
* @ package WooCommerce / Classes / Payment
* @ return array
*/
2011-08-10 17:11:11 +00:00
function add_bacs_gateway ( $methods ) {
2012-08-15 18:15:06 +00:00
$methods [] = 'WC_BACS' ;
return $methods ;
2011-08-13 16:07:10 +00:00
}
2012-08-15 18:15:06 +00:00
add_filter ( 'woocommerce_payment_gateways' , 'add_bacs_gateway' );