summaryrefslogtreecommitdiffstats
path: root/system/libraries/Cart.php
diff options
context:
space:
mode:
Diffstat (limited to 'system/libraries/Cart.php')
-rw-r--r--system/libraries/Cart.php22
1 files changed, 16 insertions, 6 deletions
diff --git a/system/libraries/Cart.php b/system/libraries/Cart.php
index edc300bd7..5b05974e4 100644
--- a/system/libraries/Cart.php
+++ b/system/libraries/Cart.php
@@ -18,7 +18,7 @@
*
* @package CodeIgniter
* @author EllisLab Dev Team
- * @copyright Copyright (c) 2006 - 2013, EllisLab, Inc. (http://ellislab.com/)
+ * @copyright Copyright (c) 2006 - 2014, EllisLab, Inc. (http://ellislab.com/)
* @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
* @link http://codeigniter.com
* @since Version 1.0
@@ -61,8 +61,6 @@ class CI_Cart {
public $product_name_safe = TRUE;
// --------------------------------------------------------------------------
- // Protected variables. Do not change!
- // --------------------------------------------------------------------------
/**
* Reference to CodeIgniter instance
@@ -323,10 +321,10 @@ class CI_Cart {
/**
* Update the cart
*
- * This function permits the quantity of a given item to be changed.
+ * This function permits changing item properties.
* Typically it is called from the "view cart" page if a user makes
* changes to the quantity before checkout. That array must contain the
- * product ID and quantity for each item.
+ * rowid and quantity for each item.
*
* @param array
* @return bool
@@ -350,7 +348,19 @@ class CI_Cart {
}
else
{
- $this->_cart_contents[$items['rowid']]['qty'] = $items['qty'];
+ // find updatable keys
+ $keys = array_intersect(array_keys($this->_cart_contents[$items['rowid']]), array_keys($items));
+ // if a price was passed, make sure it contains valid data
+ if (isset($items['price']))
+ {
+ $items['price'] = (float) $items['price'];
+ }
+
+ // product id & name shouldn't be changed
+ foreach (array_diff($keys, array('id', 'name')) as $key)
+ {
+ $this->_cart_contents[$items['rowid']][$key] = $items[$key];
+ }
}
return TRUE;