Completed
Push — develop ( 07de1c...011379 )
by David
03:12
created

Shipping_Zones::load_zones()   A

Complexity

Conditions 5
Paths 6

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
nc 6
nop 0
dl 0
loc 24
rs 9.2248
c 0
b 0
f 0
1
<?php
2
3
4
namespace Wordlift\Shipping_Data;
5
6
7
use WC_Shipping_Zones;
8
9
class Shipping_Zones {
10
11
	/**
12
	 * @var Shipping_Zone[]
13
	 */
14
	private $zones;
15
16
	public function __construct() {
17
		$this->zones = array();
18
	}
19
20
	private function load_zones() {
21
22
		$zone_ids          = array_keys( WC_Shipping_Zones::get_zones() );
23
		$wc_shipping_zones = array( WC_Shipping_Zones::get_zone( 0 ) );
24
		foreach ( $zone_ids as $zone_id ) {
25
			$wc_shipping_zones[] = WC_Shipping_Zones::get_zone( $zone_id );
26
		}
27
28
		$zones = array();
29
		foreach ( $wc_shipping_zones as $wc_shipping_zone ) {
30
			$country_codes = $this->get_country_codes( $wc_shipping_zone->get_zone_locations() );
31
32
			if ( empty( $country_codes ) ) {
33
				$zones[] = Shipping_Zone::from_wc_shipping_zone( $wc_shipping_zone );
34
			} else {
35
				foreach ( $country_codes as $country_code ) {
36
					$zones[] = Shipping_Zone::from_wc_shipping_zone( $wc_shipping_zone, $country_code );
37
				}
38
			}
39
		}
40
41
		$this->zones = $zones;
42
43
	}
44
45
	public function add_available_delivery_method( &$jsonld ) {
46
47
		$this->load_zones();
48
49
		foreach ( $this->zones as $zone ) {
50
			$zone->add_available_delivery_method( $jsonld );
51
		}
52
53
	}
54
55
	public function add_offer_shipping_details( &$jsonld ) {
56
57
		$this->load_zones();
58
59
		foreach ( $this->zones as $zone ) {
60
			$zone->add_offer_shipping_details( $jsonld );
61
		}
62
63
	}
64
65
	private function get_country_codes( $wc_shipping_zones ) {
66
		$countries = array();
67
68
		foreach ( $wc_shipping_zones as $wc_shipping_zone ) {
69
			if ( ! isset( $wc_shipping_zone->type )
70
			     || ( 'country' !== $wc_shipping_zone->type && 'state' !== $wc_shipping_zone->type ) ) {
71
				continue;
72
			}
73
74
			$country = substr( $wc_shipping_zone->code, 0, 2 );
75
76
			if ( ! in_array( $country, $countries ) ) {
77
				$countries[] = $country;
78
			}
79
		}
80
81
		return $countries;
82
	}
83
84
}
85