FlexibleShippingRates.php
105 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Class FlexibleShippingRates |
| 4 | * |
| 5 | * @package WPDesk\FS\TableRate\Rates |
| 6 | */ |
| 7 | |
| 8 | namespace WPDesk\FS\TableRate\Rates; |
| 9 | |
| 10 | use WC_Shipping_Zone; |
| 11 | use WC_Shipping_Zones; |
| 12 | use WPDesk\FS\TableRate\ShippingMethodSingle; |
| 13 | use WPDesk_Flexible_Shipping; |
| 14 | |
| 15 | /** |
| 16 | * Can get all Flexible Shipping rates. |
| 17 | */ |
| 18 | class FlexibleShippingRates { |
| 19 | |
| 20 | /** |
| 21 | * @var array |
| 22 | */ |
| 23 | private static $flexible_shipping_rates; |
| 24 | |
| 25 | /** |
| 26 | * @return array |
| 27 | */ |
| 28 | public static function get_flexible_shipping_rates() { |
| 29 | if ( null === self::$flexible_shipping_rates ) { |
| 30 | self::$flexible_shipping_rates = self::get_flexible_shipping_rates_from_configuration(); |
| 31 | } |
| 32 | |
| 33 | return self::$flexible_shipping_rates; |
| 34 | } |
| 35 | |
| 36 | /** |
| 37 | * @return array |
| 38 | */ |
| 39 | private static function get_flexible_shipping_rates_from_configuration() { |
| 40 | $rates = []; |
| 41 | foreach ( self::get_shipping_zones() as $zone ) { |
| 42 | foreach ( $zone['shipping_methods'] as $instance_id => $woo_shipping_method ) { |
| 43 | if ( WPDesk_Flexible_Shipping::METHOD_ID === $woo_shipping_method->id ) { |
| 44 | $rates = self::append_flexible_shipping_group_rates( $rates, $woo_shipping_method ); |
| 45 | } |
| 46 | if ( ShippingMethodSingle::SHIPPING_METHOD_ID === $woo_shipping_method->id ) { |
| 47 | $rates = self::append_flexible_shipping_single_rate( $rates, $woo_shipping_method ); |
| 48 | } |
| 49 | } |
| 50 | } |
| 51 | |
| 52 | return $rates; |
| 53 | } |
| 54 | |
| 55 | /** |
| 56 | * @return WC_Shipping_Zone[] |
| 57 | */ |
| 58 | private static function get_shipping_zones() { |
| 59 | if ( WC()->countries === null ) { |
| 60 | return []; |
| 61 | } |
| 62 | $zones = WC_Shipping_Zones::get_zones(); |
| 63 | $zone0 = WC_Shipping_Zones::get_zone( 0 ); |
| 64 | $zones[0] = $zone0->get_data(); |
| 65 | $zones[0]['formatted_zone_location'] = $zone0->get_formatted_location(); |
| 66 | $zones[0]['shipping_methods'] = $zone0->get_shipping_methods(); |
| 67 | |
| 68 | return $zones; |
| 69 | } |
| 70 | |
| 71 | /** |
| 72 | * @param array $rates . |
| 73 | * @param WPDesk_Flexible_Shipping $woo_shipping_method . |
| 74 | * |
| 75 | * @return array |
| 76 | */ |
| 77 | private static function append_flexible_shipping_group_rates( array $rates, WPDesk_Flexible_Shipping $woo_shipping_method ) { |
| 78 | $shipping_methods = $woo_shipping_method->get_shipping_methods(); |
| 79 | foreach ( $shipping_methods as $shipping_method ) { |
| 80 | $id = $woo_shipping_method->prepare_rate_id( $shipping_method ); |
| 81 | $shipping_method['instance_id'] = $woo_shipping_method->instance_id; |
| 82 | $rates[ $id ] = $shipping_method; |
| 83 | $rates[ $id ]['method_id'] = WPDesk_Flexible_Shipping::METHOD_ID; |
| 84 | } |
| 85 | |
| 86 | return $rates; |
| 87 | } |
| 88 | |
| 89 | /** |
| 90 | * @param array $rates . |
| 91 | * @param ShippingMethodSingle $woo_shipping_method . |
| 92 | * |
| 93 | * @return array |
| 94 | */ |
| 95 | private static function append_flexible_shipping_single_rate( array $rates, ShippingMethodSingle $woo_shipping_method ) { |
| 96 | $shipping_method = $woo_shipping_method->instance_settings; |
| 97 | $shipping_method['instance_id'] = $woo_shipping_method->instance_id; |
| 98 | $rates[ $woo_shipping_method->get_rate_id() ] = $shipping_method; |
| 99 | $rates[ $woo_shipping_method->get_rate_id() ]['method_id'] = ShippingMethodSingle::SHIPPING_METHOD_ID; |
| 100 | $rates[ $woo_shipping_method->get_rate_id() ]['method_enabled'] = $woo_shipping_method->enabled; |
| 101 | |
| 102 | return $rates; |
| 103 | } |
| 104 | } |
| 105 |