*/ class Mage_Shipping_Model_Carrier_Freeshipping extends Mage_Shipping_Model_Carrier_Abstract implements Mage_Shipping_Model_Carrier_Interface { /** * Carrier's code * * @var string */ protected $_code = 'freeshipping'; /** * Whether this carrier has fixed rates calculation * * @var bool */ protected $_isFixed = true; /** * FreeShipping Rates Collector * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } $result = Mage::getModel('shipping/rate_result'); $this->_updateFreeMethodQuote($request); if (($request->getFreeShipping()) || ($request->getBaseSubtotalInclTax() >= $this->getConfigData('free_shipping_subtotal')) ) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('freeshipping'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('freeshipping'); $method->setMethodTitle($this->getConfigData('name')); $method->setPrice('0.00'); $method->setCost('0.00'); $result->append($method); } return $result; } /** * Allows free shipping when all product items have free shipping (promotions etc.) * * @param Mage_Shipping_Model_Rate_Request $request * @return void */ protected function _updateFreeMethodQuote($request) { $freeShipping = false; $items = $request->getAllItems(); $c = count($items); for ($i = 0; $i < $c; $i++) { if ($items[$i]->getProduct() instanceof Mage_Catalog_Model_Product) { if ($items[$i]->getFreeShipping()) { $freeShipping = true; } else { return; } } } if ($freeShipping) { $request->setFreeShipping(true); } } /** * Get allowed shipping methods * * @return array */ public function getAllowedMethods() { return array('freeshipping' => $this->getConfigData('name')); } }