From 849a208e54a75e0ce6996bd7c642b364858eb36a Mon Sep 17 00:00:00 2001 From: Justin Shreve Date: Fri, 26 Aug 2016 04:57:30 -0700 Subject: [PATCH] Fix issues based on feedback. Make sure to use WC_Shipping_Zone's methods when avaiable, fix up some coding standards, and add a new delete_shipping_method to WC_Shipping_Zone --- ...ss-wc-rest-shipping-methods-controller.php | 14 +++--- ...-rest-shipping-zone-methods-controller.php | 43 ++++--------------- includes/class-wc-shipping-zone.php | 21 +++++++++ 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/includes/api/class-wc-rest-shipping-methods-controller.php b/includes/api/class-wc-rest-shipping-methods-controller.php index b7f9cdac390..b2dbfea1146 100644 --- a/includes/api/class-wc-rest-shipping-methods-controller.php +++ b/includes/api/class-wc-rest-shipping-methods-controller.php @@ -93,14 +93,14 @@ class WC_REST_Shipping_Methods_Controller extends WC_REST_Controller { * @return WP_Error|WP_REST_Response */ public function get_items( $request ) { - $wc_shipping = WC_Shipping::instance(); - $response = array(); - foreach ( $wc_shipping->get_shipping_methods() as $id => $shipping_method ) { - $method = $this->prepare_item_for_response( $shipping_method, $request ); + $wc_shipping = WC_Shipping::instance(); + $response = array(); + foreach ( $wc_shipping->get_shipping_methods() as $id => $shipping_method ) { + $method = $this->prepare_item_for_response( $shipping_method, $request ); $method = $this->prepare_response_for_collection( $method ); $response[] = $method; - } - return rest_ensure_response( $response ); + } + return rest_ensure_response( $response ); } /** @@ -112,7 +112,7 @@ class WC_REST_Shipping_Methods_Controller extends WC_REST_Controller { public function get_item( $request ) { $wc_shipping = WC_Shipping::instance(); $methods = $wc_shipping->get_shipping_methods(); - if ( empty ( $methods[ $request['id'] ] ) ) { + if ( empty( $methods[ $request['id'] ] ) ) { return new WP_Error( 'woocommerce_rest_shipping_method_invalid', __( "Resource doesn't exist.", 'woocommerce' ), array( 'status' => 404 ) ); } diff --git a/includes/api/class-wc-rest-shipping-zone-methods-controller.php b/includes/api/class-wc-rest-shipping-zone-methods-controller.php index 1895eaf356f..2f687ac47d7 100644 --- a/includes/api/class-wc-rest-shipping-zone-methods-controller.php +++ b/includes/api/class-wc-rest-shipping-zone-methods-controller.php @@ -140,36 +140,9 @@ class WC_REST_Shipping_Zone_Methods_Controller extends WC_REST_Shipping_Zones_Co return $zone; } - $instance_id = 0; - $wc_shipping = WC_Shipping::instance(); - $allowed_classes = $wc_shipping->get_shipping_method_class_names(); - $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}woocommerce_shipping_zone_methods WHERE zone_id = %d", $zone->get_id() ) ); - if ( in_array( $method_id, array_keys( $allowed_classes ) ) ) { - $wpdb->insert( - $wpdb->prefix . 'woocommerce_shipping_zone_methods', - array( - 'method_id' => $method_id , - 'zone_id' => $zone->get_id(), - 'method_order' => ( $count + 1 ) - ), - array( - '%s', - '%d', - '%d' - ) - ); - $instance_id = $wpdb->insert_id; - } - - if ( $instance_id ) { - do_action( 'woocommerce_shipping_zone_method_added', $instance_id, $method_id, $zone->get_id() ); - } - - WC_Cache_Helper::get_transient_version( 'shipping', true ); - + $instance_id = $zone->add_shipping_method( $method_id ) ; $methods = $zone->get_shipping_methods(); $method = false; - foreach ( $methods as $method_obj ) { if ( $instance_id === $method_obj->instance_id ) { $method = $method_obj; @@ -178,7 +151,7 @@ class WC_REST_Shipping_Zone_Methods_Controller extends WC_REST_Shipping_Zones_Co } if ( false === $method ) { - return new WP_Error( 'woocommerce_rest_shipping_zone_not_created', __( "Resource cannot be created.", 'woocommerce' ), array( 'status' => 500 ) ); + return new WP_Error( 'woocommerce_rest_shipping_zone_not_created', __( 'Resource cannot be created.', 'woocommerce' ), array( 'status' => 500 ) ); } $method = $this->update_fields( $instance_id, $method, $request ); @@ -203,6 +176,7 @@ class WC_REST_Shipping_Zone_Methods_Controller extends WC_REST_Shipping_Zones_Co $instance_id = (int) $request['instance_id']; $force = $request['force']; + $methods = $zone->get_shipping_methods(); $method = false; @@ -221,8 +195,9 @@ class WC_REST_Shipping_Zone_Methods_Controller extends WC_REST_Shipping_Zones_Co $request->set_param( 'context', 'view' ); $response = $this->prepare_item_for_response( $method, $request ); + // Actually delete if ( $force ) { - $wpdb->delete( $wpdb->prefix . 'woocommerce_shipping_zone_methods', array( 'instance_id' => $instance_id ) ); + $zone->delete_shipping_method( $instance_id ) ; } else { return new WP_Error( 'rest_trash_not_supported', __( 'Shipping methods do not support trashing.' ), array( 'status' => 501 ) ); } @@ -357,12 +332,12 @@ class WC_REST_Shipping_Zone_Methods_Controller extends WC_REST_Shipping_Zones_Co $data = array( 'id' => $id, 'label' => $field['title'], - 'description' => ( empty( $field['description'] ) ? '' : $field['description'] ), + 'description' => empty( $field['description'] ) ? '' : $field['description'], 'type' => $field['type'], 'value' => $item->instance_settings[ $id ], - 'default' => ( empty( $field['default'] ) ? '' : $field['default'] ), - 'tip' => ( empty( $field['description'] ) ? '' : $field['description'] ), - 'placeholder' => ( empty( $field['placeholder'] ) ? '' : $field['placeholder'] ), + 'default' => empty( $field['default'] ) ? '' : $field['default'], + 'tip' => empty( $field['description'] ) ? '' : $field['description'], + 'placeholder' => empty( $field['placeholder'] ) ? '' : $field['placeholder'], ); if ( ! empty( $field['options'] ) ) { $data['options'] = $field['options']; diff --git a/includes/class-wc-shipping-zone.php b/includes/class-wc-shipping-zone.php index 0a0e6e9b8c3..1c2e3180ea2 100644 --- a/includes/class-wc-shipping-zone.php +++ b/includes/class-wc-shipping-zone.php @@ -487,4 +487,25 @@ class WC_Shipping_Zone extends WC_Data { return $instance_id; } + + /** + * Delete a shipping method from a zone. + * @param int $instance_id + * @return True on success, false on failure + */ + public function delete_shipping_method( $instance_id ) { + global $wpdb; + + if ( null === $this->get_id() ) { + return false; + } + + $wpdb->delete( $wpdb->prefix . 'woocommerce_shipping_zone_methods', array( 'instance_id' => $instance_id ) ); + do_action( 'woocommerce_shipping_zone_method_deleted', $instance_id, $this->get_id() ); + + WC_Cache_Helper::get_transient_version( 'shipping', true ); + + return true; + } + }