/** * Test: WC_Shipping_Zones::delete_zone */ public function test_delete_zone() { // Setup WC_Helper_Shipping_Zones::create_mock_zones(); // Test WC_Shipping_Zones::delete_zone(1); $zones = WC_Shipping_Zones::get_zones(); // Assert $this->assertTrue(3 === sizeof($zones)); // Clean WC_Helper_Shipping_Zones::remove_mock_zones(); }
/** * Handle submissions from assets/js/wc-shipping-zones.js Backbone model. */ public static function shipping_zones_save_changes() { if (!isset($_POST['wc_shipping_zones_nonce'], $_POST['changes'])) { wp_send_json_error('missing_fields'); exit; } if (!wp_verify_nonce($_POST['wc_shipping_zones_nonce'], 'wc_shipping_zones_nonce')) { wp_send_json_error('bad_nonce'); exit; } // Check User Caps if (!current_user_can('manage_woocommerce')) { wp_send_json_error('missing_capabilities'); exit; } $changes = $_POST['changes']; foreach ($changes as $zone_id => $data) { if (isset($data['deleted'])) { if (isset($data['newRow'])) { // So the user added and deleted a new row. // That's fine, it's not in the database anyways. NEXT! continue; } WC_Shipping_Zones::delete_zone($zone_id); continue; } $zone_data = array_intersect_key($data, array('zone_id' => 1, 'zone_name' => 1, 'zone_order' => 1, 'zone_locations' => 1, 'zone_postcodes' => 1)); if (isset($zone_data['zone_id'])) { $zone = new WC_Shipping_Zone($zone_data['zone_id']); if (isset($zone_data['zone_name'])) { $zone->set_zone_name($zone_data['zone_name']); } if (isset($zone_data['zone_order'])) { $zone->set_zone_order($zone_data['zone_order']); } if (isset($zone_data['zone_locations'])) { $zone->clear_locations(array('state', 'country', 'continent')); $locations = array_filter(array_map('wc_clean', (array) $zone_data['zone_locations'])); foreach ($locations as $location) { // Each posted location will be in the format type:code $location_parts = explode(':', $location); switch ($location_parts[0]) { case 'state': $zone->add_location($location_parts[1] . ':' . $location_parts[2], 'state'); break; case 'country': $zone->add_location($location_parts[1], 'country'); break; case 'continent': $zone->add_location($location_parts[1], 'continent'); break; } } } if (isset($zone_data['zone_postcodes'])) { $zone->clear_locations('postcode'); $postcodes = array_filter(array_map('strtoupper', array_map('wc_clean', explode("\n", $zone_data['zone_postcodes'])))); foreach ($postcodes as $postcode) { $zone->add_location($postcode, 'postcode'); } } $zone->save(); } } wp_send_json_success(array('zones' => WC_Shipping_Zones::get_zones())); }
/** * Handle submissions from assets/js/wc-shipping-zones.js Backbone model. */ public static function shipping_zones_save_changes() { if (!isset($_POST['wc_shipping_zones_nonce'], $_POST['changes'])) { wp_send_json_error('missing_fields'); exit; } if (!wp_verify_nonce($_POST['wc_shipping_zones_nonce'], 'wc_shipping_zones_nonce')) { wp_send_json_error('bad_nonce'); exit; } // Check User Caps if (!current_user_can('manage_woocommerce')) { wp_send_json_error('missing_capabilities'); exit; } $changes = $_POST['changes']; foreach ($changes as $zone_id => $data) { if (isset($data['deleted'])) { if (isset($data['newRow'])) { // So the user added and deleted a new row. // That's fine, it's not in the database anyways. NEXT! continue; } WC_Shipping_Zones::delete_zone($zone_id); continue; } $zone_data = array_intersect_key($data, array('zone_id' => 1, 'zone_order' => 1)); if (isset($zone_data['zone_id'])) { $zone = new WC_Shipping_Zone($zone_data['zone_id']); if (isset($zone_data['zone_order'])) { $zone->set_zone_order($zone_data['zone_order']); } $zone->save(); } } wp_send_json_success(array('zones' => WC_Shipping_Zones::get_zones())); }