summaryrefslogtreecommitdiffstats
path: root/system
diff options
context:
space:
mode:
authorAndrey Andreev <narf@devilix.net>2014-02-13 12:56:50 +0100
committerAndrey Andreev <narf@devilix.net>2014-02-13 12:56:50 +0100
commit42a1139debbe1679beb670dd29561a2965f99b8c (patch)
tree5a82d069aed0e87e0110ad9a2c25e73b5e314cc2 /system
parent376b215500b1facb3ba063aec618bcc12da50351 (diff)
parentc09b953be9d14158cc21cecc676f7e992c16f752 (diff)
Merge pull request #2874 from aanbar/develop
[Cart Library] Allow updating all properties for an item.
Diffstat (limited to 'system')
-rw-r--r--system/libraries/Cart.php18
1 files changed, 15 insertions, 3 deletions
diff --git a/system/libraries/Cart.php b/system/libraries/Cart.php
index 5a31a1d45..389b1b77e 100644
--- a/system/libraries/Cart.php
+++ b/system/libraries/Cart.php
@@ -323,10 +323,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 +350,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;