Skip to content

Commit

Permalink
Refactor shipping rate to include instance IDs
Browse files Browse the repository at this point in the history
  • Loading branch information
mikejolley committed Jul 7, 2017
1 parent fe9dd86 commit e539d31
Show file tree
Hide file tree
Showing 2 changed files with 199 additions and 35 deletions.
8 changes: 7 additions & 1 deletion includes/abstracts/abstract-wc-shipping-method.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,13 @@ public function add_rate( $args = array() ) {
$total_cost = wc_format_decimal( $total_cost, wc_get_price_decimals() );

// Create rate object
$rate = new WC_Shipping_Rate( $args['id'], $args['label'], $total_cost, $taxes, $this->id );
$rate = new WC_Shipping_Rate();
$rate->set_id( $args['id'] );
$rate->set_method_id( $this->id );
$rate->set_instance_id( $this->instance_id );
$rate->set_label( $args['label'] );
$rate->set_cost( $total_cost );
$rate->set_taxes( $taxes );

if ( ! empty( $args['meta_data'] ) ) {
foreach ( $args['meta_data'] as $key => $value ) {
Expand Down
226 changes: 192 additions & 34 deletions includes/class-wc-shipping-rate.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,35 @@
*
* Simple Class for storing rates.
*
* @class WC_Shipping_Rate
* @version 2.6.0
* @package WooCommerce/Classes/Shipping
* @category Class
* @author WooThemes
* @class WC_Shipping_Rate
* @package WooCommerce/Classes/Shipping
* @category Class
* @author Automattic
*/
class WC_Shipping_Rate {

/** @var string Rate ID. */
public $id = '';

/** @var string Label for the rate. */
public $label = '';

/** @var float Cost for the rate. */
public $cost = 0;

/** @var array Array of taxes for the rate. */
public $taxes = array();

/** @var string Label for the rate. */
public $method_id = '';
/**
* Stores data for this rate.
*
* @since 3.2.0
* @var array
*/
protected $data = array(
'id' => '',
'method_id' => '',
'instance_id' => 0,
'label' => '',
'cost' => 0,
'taxes' => array(),
);

/**
* Stores meta data for this rate
* Stores meta data for this rate.
*
* @since 2.6.0
* @var array
* @var array
*/
private $meta_data = array();
protected $meta_data = array();

/**
* Constructor.
Expand All @@ -47,35 +47,191 @@ class WC_Shipping_Rate {
* @param integer $cost
* @param array $taxes
* @param string $method_id
* @param int $instance_id
*/
public function __construct( $id = '', $label = '', $cost = 0, $taxes = array(), $method_id = '' ) {
$this->id = $id;
$this->label = $label;
$this->cost = $cost;
$this->taxes = ! empty( $taxes ) && is_array( $taxes ) ? $taxes : array();
$this->method_id = $method_id;
public function __construct( $id = '', $label = '', $cost = 0, $taxes = array(), $method_id = '', $instance_id = 0 ) {
$this->set_id( $id );
$this->set_label( $label );
$this->set_cost( $cost );
$this->set_taxes( $taxes );
$this->set_method_id( $method_id );
$this->set_instance_id( $instance_id );
}

/**
* Get shipping tax.
* Magic methods to support direct access to props.
*
* @return array
* @since 3.2.0
* @param string $key
* @return bool
*/
public function get_shipping_tax() {
return apply_filters( 'woocommerce_get_shipping_tax', sizeof( $this->taxes ) > 0 && ! WC()->customer->get_is_vat_exempt() ? array_sum( $this->taxes ) : 0, $this );
public function __isset( $key ) {
return isset( $this->data[ $key ] );
}

/**
* Magic methods to support direct access to props.
*
* @since 3.2.0
* @param string $key
* @return mixed
*/
public function __get( $key ) {
if ( is_callable( array( $this, "get_{$key}" ) ) ) {
return $this->{"get_{$key}"}();
} elseif ( isset( $this->data[ $key ] ) ) {
return $this->data[ $key ];
} else {
return '';
}
}

/**
* Magic methods to support direct access to props.
*
* @since 3.2.0
* @param string $key
* @param mixed $value
*/
public function __set( $key, $value ) {
if ( is_callable( array( $this, "set_{$key}" ) ) ) {
$this->{"set_{$key}"}( $value );
} else {
$this->data[ $key ] = $value;
}
}

/**
* Set ID for the rate. This is usually a combination of the method and instance IDs.
*
* @since 3.2.0
* @param string $id
*/
public function set_id( $id ) {
$this->data['id'] = (string) $id;
}

/**
* Set shipping method ID the rate belongs to.
*
* @since 3.2.0
* @param string $method_id
*/
public function set_method_id( $method_id ) {
$this->data['method_id'] = (string) $method_id;
}

/**
* Set instance ID the rate belongs to.
*
* @since 3.2.0
* @param int $instance_id
*/
public function set_instance_id( $instance_id ) {
$this->data['method_id'] = absint( $instance_id );
}

/**
* Set rate label.
*
* @since 3.2.0
* @param string $method_id
*/
public function set_label( $label ) {
$this->data['label'] = (string) $label;
}

/**
* Set rate cost.
*
* @since 3.2.0
* @param string $cost
*/
public function set_cost( $cost ) {
$this->data['cost'] = $cost;
}

/**
* Set rate taxes.
*
* @since 3.2.0
* @param array $taxes
*/
public function set_taxes( $taxes ) {
$this->data['taxes'] = ! empty( $taxes ) && is_array( $taxes ) ? $taxes : array();
}

/**
* Set ID for the rate. This is usually a combination of the method and instance IDs.
*
* @since 3.2.0
* @return string
*/
public function get_id() {
return apply_filters( 'woocommerce_shipping_rate_id', $this->data['id'], $this );
}

/**
* Set shipping method ID the rate belongs to.
*
* @since 3.2.0
* @return string
*/
public function get_method_id() {
return apply_filters( 'woocommerce_shipping_rate_method_id', $this->data['method_id'], $this );
}

/**
* Set instance ID the rate belongs to.
*
* @since 3.2.0
* @return int
*/
public function get_instance_id() {
return apply_filters( 'woocommerce_shipping_rate_instance_id', $this->data['instance_id'], $this );
}

/**
* Get label.
* Set rate label.
*
* @return string
*/
public function get_label() {
return apply_filters( 'woocommerce_shipping_rate_label', $this->label, $this );
return apply_filters( 'woocommerce_shipping_rate_label', $this->data['label'], $this );
}

/**
* Set rate cost.
*
* @since 3.2.0
* @return string
*/
public function get_cost() {
return apply_filters( 'woocommerce_shipping_rate_cost', $this->data['cost'], $this );
}

/**
* Set rate taxes.
*
* @since 3.2.0
* @return array
*/
public function get_taxes() {
return apply_filters( 'woocommerce_shipping_rate_taxes', $this->data['taxes'], $this );
}

/**
* Get shipping tax.
*
* @return array
*/
public function get_shipping_tax() {
return apply_filters( 'woocommerce_get_shipping_tax', sizeof( $this->taxes ) > 0 && ! WC()->customer->get_is_vat_exempt() ? array_sum( $this->taxes ) : 0, $this );
}

/**
* Add some meta data for this rate.
*
* @since 2.6.0
* @param string $key
* @param string $value
Expand All @@ -86,7 +242,9 @@ public function add_meta_data( $key, $value ) {

/**
* Get all meta data for this rate.
*
* @since 2.6.0
* @return array
*/
public function get_meta_data() {
return $this->meta_data;
Expand Down

0 comments on commit e539d31

Please sign in to comment.