woocommerce/classes/shipping/shipping.class.php

141 lines
3.3 KiB
PHP
Raw Normal View History

2011-08-10 17:11:11 +00:00
<?php
/**
* WooCommerce Shipping Class
*
* Handles shipping and loads shipping methods via hooks.
*
* @class woocommerce_shipping
* @package WooCommerce
* @category Shipping
* @author WooThemes
*/
class woocommerce_shipping {
2011-08-09 15:16:18 +00:00
var $enabled = false;
var $shipping_methods = array();
var $chosen_method = null;
var $shipping_total = 0;
var $shipping_tax = 0;
var $shipping_label = null;
2011-08-09 15:16:18 +00:00
function init() {
2011-08-09 15:16:18 +00:00
if (get_option('woocommerce_calc_shipping')!='no') $this->enabled = true;
2011-08-09 15:16:18 +00:00
2011-08-10 17:11:11 +00:00
do_action('woocommerce_shipping_init');
2011-08-09 15:16:18 +00:00
2011-08-10 17:11:11 +00:00
$load_methods = apply_filters('woocommerce_shipping_methods', array());
2011-08-09 15:16:18 +00:00
foreach ($load_methods as $method) :
$this->shipping_methods[] = &new $method();
2011-08-09 15:16:18 +00:00
endforeach;
}
2011-08-09 15:16:18 +00:00
function get_available_shipping_methods() {
if ($this->enabled=='yes') :
2011-08-09 15:16:18 +00:00
$_available_methods = array();
foreach ( $this->shipping_methods as $shipping_method ) :
2011-08-09 15:16:18 +00:00
if ($shipping_method->is_available()) :
$shipping_method->calculate_shipping();
// If available, put available methods/rates in the array
if ($shipping_method->multiple_rates) :
foreach ($shipping_method->rates as $rate) :
$method = $rate;
$_available_methods[$method->id] = $method;
endforeach;
else :
$method = $shipping_method;
$_available_methods[$method->id] = $method;
endif;
endif;
2011-08-09 15:16:18 +00:00
endforeach;
2011-08-09 15:16:18 +00:00
return $_available_methods;
endif;
}
function reset_shipping_methods() {
foreach ( $this->shipping_methods as $shipping_method ) :
$shipping_method->shipping_total = 0;
$shipping_method->shipping_tax = 0;
$shipping_method->rates = array();
2011-08-09 15:16:18 +00:00
endforeach;
}
function calculate_shipping() {
if ($this->enabled=='yes') :
2011-08-09 15:16:18 +00:00
$this->shipping_total = 0;
$this->shipping_tax = 0;
$this->shipping_label = null;
2011-08-09 15:16:18 +00:00
$_cheapest_fee = '';
$_cheapest_method = '';
if (isset($_SESSION['_chosen_shipping_method'])) $chosen_method = $_SESSION['_chosen_shipping_method']; else $chosen_method = '';
2011-08-09 15:16:18 +00:00
$calc_cheapest = false;
if (!$chosen_method || empty($chosen_method)) $calc_cheapest = true;
$this->reset_shipping_methods();
2011-08-09 15:16:18 +00:00
$_available_methods = $this->get_available_shipping_methods();
2011-08-09 15:16:18 +00:00
if (sizeof($_available_methods)>0) :
foreach ($_available_methods as $method_id => $method) :
2011-08-09 15:16:18 +00:00
$fee = $method->shipping_total;
if ($fee < $_cheapest_fee || !is_numeric($_cheapest_fee)) :
$_cheapest_fee = $fee;
$_cheapest_method = $method_id;
2011-08-09 15:16:18 +00:00
endif;
2011-08-09 15:16:18 +00:00
endforeach;
// Default to cheapest
if ($calc_cheapest || !isset($_available_methods[$chosen_method])) :
$chosen_method = $_cheapest_method;
endif;
if ($chosen_method) :
$_SESSION['_chosen_shipping_method'] = $chosen_method;
$this->shipping_total = $_available_methods[$chosen_method]->shipping_total;
$this->shipping_tax = $_available_methods[$chosen_method]->shipping_tax;
$this->shipping_label = $_available_methods[$chosen_method]->title;
2011-08-09 15:16:18 +00:00
endif;
endif;
endif;
}
function reset_shipping() {
unset($_SESSION['_chosen_shipping_method']);
$this->shipping_total = 0;
$this->shipping_tax = 0;
$this->shipping_label = null;
2011-08-09 15:16:18 +00:00
}
}