summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Andreev <narf@devilix.net>2014-03-14 16:42:41 +0100
committerAndrey Andreev <narf@devilix.net>2014-03-14 16:42:41 +0100
commit395e68f490daf2d613dc921c59f090e58faf55f9 (patch)
treeba1f14bdcadc6eec7af2068a0f8f3221cfba7021
parentb79d75d21fc9438679ed0552b8cd4042db80b8f6 (diff)
parent2702a3b647785c06bf21ba0b6b36cacef2f8ee1f (diff)
Merge pull request #2939 from aanbar/cart_update
Removed the requirement of quantity to trigger cart update.
-rw-r--r--system/libraries/Cart.php49
-rw-r--r--user_guide_src/source/changelog.rst2
-rw-r--r--user_guide_src/source/libraries/cart.rst6
3 files changed, 29 insertions, 28 deletions
diff --git a/system/libraries/Cart.php b/system/libraries/Cart.php
index 5b05974e4..cd46a6ef6 100644
--- a/system/libraries/Cart.php
+++ b/system/libraries/Cart.php
@@ -282,10 +282,10 @@ class CI_Cart {
// You can either update a single product using a one-dimensional array,
// or multiple products using a multi-dimensional one. The way we
- // determine the array type is by looking for a required array key named "id".
+ // determine the array type is by looking for a required array key named "rowid".
// If it's not found we assume it's a multi-dimensional array
$save_cart = FALSE;
- if (isset($items['rowid'], $items['qty']))
+ if (isset($items['rowid']))
{
if ($this->_update($items) === TRUE)
{
@@ -296,7 +296,7 @@ class CI_Cart {
{
foreach ($items as $val)
{
- if (is_array($val) && isset($val['rowid'], $val['qty']))
+ if (is_array($val) && isset($val['rowid']))
{
if ($this->_update($val) === TRUE)
{
@@ -332,37 +332,38 @@ class CI_Cart {
protected function _update($items = array())
{
// Without these array indexes there is nothing we can do
- if ( ! isset($items['qty'], $items['rowid'], $this->_cart_contents[$items['rowid']]))
+ if ( ! isset($items['rowid'], $this->_cart_contents[$items['rowid']]))
{
return FALSE;
}
// Prep the quantity
- $items['qty'] = (float) $items['qty'];
-
- // Is the quantity zero? If so we will remove the item from the cart.
- // If the quantity is greater than zero we are updating
- if ($items['qty'] == 0)
- {
- unset($this->_cart_contents[$items['rowid']]);
- }
- else
+ if (isset($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['qty'] = (float) $items['qty'];
+ // Is the quantity zero? If so we will remove the item from the cart.
+ // If the quantity is greater than zero we are updating
+ if ($items['qty'] == 0)
{
- $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];
+ unset($this->_cart_contents[$items['rowid']]);
+ return TRUE;
}
+ }
+
+ // 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;
}
diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst
index 36ddbc92e..6f246e3a0 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -317,7 +317,7 @@ Release Date: Not Released
- Added unicode support for product names.
- Added support for disabling product name strictness via the ``$product_name_safe`` property.
- Changed ``insert()`` method to auto-increment quantity for an item when inserted twice instead of resetting it.
- - Changed ``update()`` method to support updating all properties attached to an item.
+ - Changed ``update()`` method to support updating all properties attached to an item and not to require 'qty'.
- :doc:`Image Manipulation Library <libraries/image_lib>` changes include:
diff --git a/user_guide_src/source/libraries/cart.rst b/user_guide_src/source/libraries/cart.rst
index d7d495967..bedea4dbf 100644
--- a/user_guide_src/source/libraries/cart.rst
+++ b/user_guide_src/source/libraries/cart.rst
@@ -205,8 +205,8 @@ Updating The Cart
=================
To update the information in your cart, you must pass an array
-containing the Row ID and quantity to the ``$this->cart->update()``
-method.
+containing the Row ID and one or more pre-defined properties to the
+``$this->cart->update()`` method.
.. note:: If the quantity is set to zero, the item will be removed from
the cart.
@@ -318,7 +318,7 @@ Class Reference
This method permits changing the properties of a given item.
Typically it is called from the "view cart" page if a user makes changes
to the quantity before checkout. That array must contain the rowid
- and qty for each item.
+ for each item.
.. method:: remove($rowid)