Enabled product bundles
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
<?php
|
||||
/**
|
||||
* Booster for WooCommerce - Module - Order Minimum Amount
|
||||
*
|
||||
* @version 3.2.4
|
||||
* @since 2.5.7
|
||||
* @author Algoritmika Ltd.
|
||||
* @todo order max amount
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
||||
|
||||
if ( ! class_exists( 'WCJ_Order_Min_Amount' ) ) :
|
||||
|
||||
class WCJ_Order_Min_Amount extends WCJ_Module {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @version 2.8.0
|
||||
* @since 2.5.7
|
||||
*/
|
||||
function __construct() {
|
||||
|
||||
$this->id = 'order_min_amount';
|
||||
$this->short_desc = __( 'Order Minimum Amount', 'woocommerce-jetpack' );
|
||||
$this->desc = __( 'Minimum order amount (optionally by user role).', 'woocommerce-jetpack' );
|
||||
$this->link_slug = 'woocommerce-order-minimum-amount';
|
||||
parent::__construct();
|
||||
|
||||
if ( $this->is_enabled() ) {
|
||||
add_action( 'init', array( $this, 'add_order_minimum_amount_hooks' ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* add_order_minimum_amount_hooks.
|
||||
*
|
||||
* @version 2.6.0
|
||||
* @since 2.5.3
|
||||
* @todo (maybe) `template_redirect` instead of `wp`
|
||||
*/
|
||||
function add_order_minimum_amount_hooks() {
|
||||
$is_order_minimum_amount_enabled = false;
|
||||
if ( get_option( 'wcj_order_minimum_amount', 0 ) > 0 ) {
|
||||
$is_order_minimum_amount_enabled = true;
|
||||
} else {
|
||||
foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
|
||||
if ( get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 ) > 0 ) {
|
||||
$is_order_minimum_amount_enabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( $is_order_minimum_amount_enabled ) {
|
||||
add_action( 'woocommerce_checkout_process', array( $this, 'order_minimum_amount' ) );
|
||||
add_action( 'woocommerce_before_cart', array( $this, 'order_minimum_amount' ) );
|
||||
if ( 'yes' === get_option( 'wcj_order_minimum_amount_stop_from_seeing_checkout', 'no' ) ) {
|
||||
add_action( 'wp', array( $this, 'stop_from_seeing_checkout' ), 100 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get_order_minimum_amount_with_user_roles.
|
||||
*
|
||||
* @version 2.7.0
|
||||
* @since 2.5.3
|
||||
*/
|
||||
function get_order_minimum_amount_with_user_roles() {
|
||||
$minimum = get_option( 'wcj_order_minimum_amount', 0 );
|
||||
$current_user_role = wcj_get_current_user_first_role();
|
||||
foreach ( wcj_get_user_roles() as $role_key => $role_data ) {
|
||||
if ( $role_key === $current_user_role ) {
|
||||
$order_minimum_amount_by_user_role = get_option( 'wcj_order_minimum_amount_by_user_role_' . $role_key, 0 );
|
||||
if ( $order_minimum_amount_by_user_role > /* $minimum */ 0 ) {
|
||||
$minimum = $order_minimum_amount_by_user_role;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Multicurrency (Currency Switcher) module
|
||||
if ( WCJ()->modules['multicurrency']->is_enabled() ) {
|
||||
$minimum = WCJ()->modules['multicurrency']->change_price( $minimum, null );
|
||||
}
|
||||
return $minimum;
|
||||
}
|
||||
|
||||
/**
|
||||
* get_cart_total_for_minimal_order_amount.
|
||||
*
|
||||
* @version 3.2.4
|
||||
* @since 2.5.5
|
||||
*/
|
||||
function get_cart_total_for_minimal_order_amount() {
|
||||
if ( ! isset( WC()->cart ) ) {
|
||||
return 0;
|
||||
}
|
||||
WC()->cart->calculate_totals();
|
||||
$cart_total = WC()->cart->total;
|
||||
if ( 'yes' === get_option( 'wcj_order_minimum_amount_exclude_shipping', 'no' ) ) {
|
||||
$shipping_total = isset( WC()->cart->shipping_total ) ? WC()->cart->shipping_total : 0;
|
||||
$shipping_tax_total = isset( WC()->cart->shipping_tax_total ) ? WC()->cart->shipping_tax_total : 0;
|
||||
$cart_total -= ( $shipping_total + $shipping_tax_total );
|
||||
}
|
||||
if ( 'yes' === get_option( 'wcj_order_minimum_amount_exclude_discounts', 'no' ) ) {
|
||||
$cart_total += ( WC()->cart->get_cart_discount_total() + WC()->cart->get_cart_discount_tax_total() );
|
||||
}
|
||||
return $cart_total;
|
||||
}
|
||||
|
||||
/**
|
||||
* order_minimum_amount.
|
||||
*
|
||||
* @version 2.9.0
|
||||
* @todo `wcj_order_minimum_amount_checkout_notice_type`
|
||||
*/
|
||||
function order_minimum_amount() {
|
||||
$minimum = $this->get_order_minimum_amount_with_user_roles();
|
||||
if ( 0 == $minimum ) {
|
||||
return;
|
||||
}
|
||||
$cart_total = $this->get_cart_total_for_minimal_order_amount();
|
||||
if ( $cart_total < $minimum ) {
|
||||
if ( is_cart() ) {
|
||||
if ( 'yes' === get_option( 'wcj_order_minimum_amount_cart_notice_enabled', 'no' ) ) {
|
||||
$notice_function = get_option( 'wcj_order_minimum_amount_cart_notice_function', 'wc_print_notice' );
|
||||
$notice_function(
|
||||
sprintf( apply_filters( 'booster_option', 'You must have an order with a minimum of %s to place your order, your current order total is %s.', get_option( 'wcj_order_minimum_amount_cart_notice_message' ) ),
|
||||
wc_price( $minimum ),
|
||||
wc_price( $cart_total )
|
||||
),
|
||||
get_option( 'wcj_order_minimum_amount_cart_notice_type', 'notice' )
|
||||
);
|
||||
}
|
||||
} else {
|
||||
wc_add_notice(
|
||||
sprintf( apply_filters( 'booster_option', 'You must have an order with a minimum of %s to place your order, your current order total is %s.', get_option( 'wcj_order_minimum_amount_error_message' ) ),
|
||||
wc_price( $minimum ),
|
||||
wc_price( $cart_total )
|
||||
),
|
||||
'error'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* stop_from_seeing_checkout.
|
||||
*
|
||||
* @version 3.2.3
|
||||
* @todo (maybe) `if ( is_admin() ) return;`
|
||||
*/
|
||||
function stop_from_seeing_checkout( $wp ) {
|
||||
global $woocommerce;
|
||||
if ( ! isset( $woocommerce ) || ! is_object( $woocommerce ) ) {
|
||||
return;
|
||||
}
|
||||
if ( ! isset( $woocommerce->cart ) || ! is_object( $woocommerce->cart ) ) {
|
||||
return;
|
||||
}
|
||||
if ( ! is_checkout() ) {
|
||||
return;
|
||||
}
|
||||
$minimum = $this->get_order_minimum_amount_with_user_roles();
|
||||
if ( 0 == $minimum ) {
|
||||
return;
|
||||
}
|
||||
$the_cart_total = $this->get_cart_total_for_minimal_order_amount();
|
||||
if ( 0 == $the_cart_total ) {
|
||||
return;
|
||||
}
|
||||
if ( $the_cart_total < $minimum ) {
|
||||
wp_safe_redirect( wc_get_cart_url() );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
endif;
|
||||
|
||||
return new WCJ_Order_Min_Amount();
|
||||
Reference in New Issue
Block a user