<?php /** * Class FreeShippingCalculator * * @package WPDesk\FS\TableRate\ShippingMethod */ namespace WPDesk\FS\TableRate\ShippingMethod; use FSVendor\WPDesk\FS\TableRate\Settings\MethodSettings; use FSVendor\WPDesk\FS\TableRate\Settings\MethodSettingsFactory; use WPDesk_Flexible_Shipping; /** * Can calculate free shipping. */ class FreeShippingCalculator { /** * @param MethodSettings $shipping_method . * @param float $cart_contents_cost . * * @return bool */ public function is_free_shipping( MethodSettings $shipping_method, $cart_contents_cost ) { /** * Can provide free shipping callback. * For internal use. * * @internal */ $free_shipping_calculation_callback = apply_filters( 'flexible-shipping/shipping-method/free-shipping-callback', array( $this, 'is_free_shipping_callback' ), $shipping_method->get_raw_settings() ); $is_free_shipping = $free_shipping_calculation_callback( $shipping_method->get_raw_settings(), $cart_contents_cost ); $is_free_shipping = apply_filters_deprecated( 'flexible_shipping_is_free_shipping', array( $is_free_shipping, $shipping_method->get_raw_settings(), $cart_contents_cost ), '4.0.0', 'flexible-shipping/shipping-method/is-free-shipping' ); /** * Can modify free shipping. * * @param bool $is_free_shipping Current is_free_shipping value based on method settings. * @param array $shipping_method Flexible shipping method settings. * @param float $cart_contents_cost Shipping contents cost. * * @return bool */ return apply_filters( 'flexible-shipping/shipping-method/is-free-shipping', $is_free_shipping, $shipping_method->get_raw_settings(), $cart_contents_cost ); } /** * Is free shipping? * * @param array $shipping_method_settings . * @param float $cart_contents_cost . * * @return bool */ public function is_free_shipping_callback( $shipping_method_settings, $cart_contents_cost ) { $shipping_method = MethodSettingsFactory::create_from_array( $shipping_method_settings ); $is_free_shipping = false; $free_shipping = $shipping_method->get_free_shipping(); if ( isset( $free_shipping ) && '' !== $free_shipping ) { $free_shipping = (float) trim( $free_shipping ); if ( is_numeric( $free_shipping ) ) { if ( (float) apply_filters( 'flexible_shipping_value_in_currency', $free_shipping ) <= (float) $cart_contents_cost ) { $is_free_shipping = true; } } } return $is_free_shipping; } }