From 425a108aab91f50742332e9c233eea4b76722070 Mon Sep 17 00:00:00 2001 From: gRoussac Date: Wed, 9 Jan 2013 15:55:48 +0100 Subject: [PATCH 1/2] [-] FO : Fix #PSCFV-5905 Fatal error: "no default carrier" --- classes/Carrier.php | 29 ++++++++++++++--------------- classes/Cart.php | 7 +++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/classes/Carrier.php b/classes/Carrier.php index c975b9e30..196822243 100644 --- a/classes/Carrier.php +++ b/classes/Carrier.php @@ -1161,23 +1161,18 @@ class CarrierCore extends ObjectModel $query->where('pc.id_product = '.(int)$product->id); $query->where('pc.id_shop = '.(int)$id_shop); - $carriers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); - - if (!empty($carriers)) - { + $carriers_for_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); + $carrier_list = array(); + if (!empty($carriers_for_product)) + { //the product is linked with carriers - $carrier_list = array(); - foreach ($carriers as $carrier) //check if the linked carriers are available in current zone + foreach ($carriers_for_product as $carrier) //check if the linked carriers are available in current zone if (Carrier::checkCarrierZone($carrier['id_carrier'], $id_zone)) $carrier_list[] = $carrier['id_carrier']; - if (!empty($carrier_list)) - return $carrier_list; - else + if (empty($carrier_list)) return array();//no linked carrier are available for this zone } - $carrier_list = array(); - // The product is not dirrectly linked with a carrier // Get all the carriers linked to a warehouse if ($id_warehouse) @@ -1189,13 +1184,17 @@ class CarrierCore extends ObjectModel $available_carrier_list = array(); $customer = new Customer($cart->id_customer); $carriers = Carrier::getCarriersForOrder($id_zone, $customer->getGroups(), $cart); + foreach ($carriers as $carrier) $available_carrier_list[] = $carrier['id_carrier']; - - if (empty($warehouse_carrier_list)) - $carrier_list = $available_carrier_list; + + if ($carrier_list) + $carrier_list = array_intersect($available_carrier_list, $carrier_list); else - $carrier_list = array_intersect($warehouse_carrier_list, $available_carrier_list); + $carrier_list = $available_carrier_list; + + if (isset($warehouse_carrier_list)) + $carrier_list = array_intersect($carrier_list, $warehouse_carrier_list); if ($product->width > 0 || $product->height > 0 || $product->depth > 0 || $product->weight > 0) { diff --git a/classes/Cart.php b/classes/Cart.php index 6ff4b3f12..29df1bf63 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -1508,7 +1508,6 @@ class CartCore extends ObjectModel if ($cart_rule['obj']->reduction_percent > 0 || $cart_rule['obj']->reduction_amount > 0) $order_total_discount += Tools::ps_round($cart_rule['obj']->getContextualValue($with_taxes, $virtual_context, CartRule::FILTER_ACTION_REDUCTION, $package, $use_cache), 2); } - $order_total_discount = min(Tools::ps_round($order_total_discount, 2), $wrapping_fees + $order_total_products + $shipping_fees); $order_total -= $order_total_discount; } @@ -2603,8 +2602,12 @@ class CartCore extends ObjectModel $carrier = self::$_carriers[$id_carrier]; + // No valid Carrier or $id_carrier <= 0 ? if (!Validate::isLoadedObject($carrier)) - die(Tools::displayError('Fatal error: "no default carrier"')); + { + Cache::store($cache_id, 0); + return 0; + } if (!$carrier->active) { From 554dd4aba4bbce2d45e7a04aaf68c5ce23a72ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Gaillard?= Date: Wed, 9 Jan 2013 16:55:28 +0100 Subject: [PATCH 2/2] // Fix PHP warning --- controllers/admin/AdminProductsController.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 52e11d986..b06353b18 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -3775,11 +3775,16 @@ class AdminProductsControllerCore extends AdminController } // gets the minimum - $pack_quantity = $pack_quantities[0]; - foreach ($pack_quantities as $value) - { - if ($pack_quantity > $value) - $pack_quantity = $value; + if (!count($pack_quantities)) + $pack_quantity = 0; + else + { + $pack_quantity = $pack_quantities[0]; + foreach ($pack_quantities as $value) + { + if ($pack_quantity > $value) + $pack_quantity = $value; + } } if (!Warehouse::getPackWarehouses((int)$obj->id))