Merge pull request #2939 from aanbar/cart_update

Removed the requirement of quantity to trigger cart update.
diff --git a/system/libraries/Cart.php b/system/libraries/Cart.php
index 5b05974..cd46a6e 100644
--- a/system/libraries/Cart.php
+++ b/system/libraries/Cart.php
@@ -282,10 +282,10 @@
 
 		// 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 @@
 		{
 			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 @@
 	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)
+		if (isset($items['qty']))
 		{
-			unset($this->_cart_contents[$items['rowid']]);
-		}
-		else
+			$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']]);
+				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']))
 		{
-			// 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];
-			}
+			$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 36ddbc9..6f246e3 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -317,7 +317,7 @@
       -  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 d7d4959..bedea4d 100644
--- a/user_guide_src/source/libraries/cart.rst
+++ b/user_guide_src/source/libraries/cart.rst
@@ -205,8 +205,8 @@
 =================
 
 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 @@
 		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)