/**
  * @category ISO_HOOKS: updateItemInCollection
  *
  * @param ProductCollectionItem|\Model $item
  * @param array                        $set
  * @param ProductCollection            $collection
  *
  * @return array
  *
  */
 public function checkBeforeUpdateCollection(ProductCollectionItem $item, $set, ProductCollection $collection)
 {
     if (empty($set['quantity'])) {
         return $set;
     }
     /** @var Product|\Model $product */
     $product = $item->getProduct();
     /** @var ProductType|\Model $productType */
     $productType = $product->getRelated('type');
     if (!$productType->stockmanagement_active) {
         return $set;
     }
     $stock = Stock::getStockForProduct($product->id);
     if (false !== $stock && $set['quantity'] > $stock) {
         Message::addInfo($GLOBALS['TL_LANG']['MSC']['simpleStockmanagement']['maxQuantityUpdated']);
         $set['quantity'] = $stock;
     }
     return $set;
 }
 /**
  * Update product collection item with given ID
  *
  * @param int   $intId
  * @param array $arrSet
  *
  * @return bool
  */
 public function updateItemById($intId, $arrSet)
 {
     $this->ensureNotLocked();
     $arrItems = $this->getItems();
     if (!isset($arrItems[$intId])) {
         return false;
     }
     /** @var ProductCollectionItem $objItem */
     $objItem = $arrItems[$intId];
     // !HOOK: additional functionality when updating a product in the collection
     if (isset($GLOBALS['ISO_HOOKS']['updateItemInCollection']) && is_array($GLOBALS['ISO_HOOKS']['updateItemInCollection'])) {
         foreach ($GLOBALS['ISO_HOOKS']['updateItemInCollection'] as $callback) {
             $objCallback = \System::importStatic($callback[0]);
             $arrSet = $objCallback->{$callback}[1]($objItem, $arrSet, $this);
             if (empty($arrSet) && is_array($arrSet)) {
                 return false;
             }
         }
     }
     // Quantity set to 0, delete item
     if (isset($arrSet['quantity']) && $arrSet['quantity'] == 0) {
         return $this->deleteItemById($intId);
     }
     if (isset($arrSet['quantity']) && $objItem->hasProduct()) {
         // Set product quantity so we can determine the correct minimum price
         $objProduct = $objItem->getProduct();
         $intMinimumQuantity = $objProduct->getMinimumQuantity();
         if ($arrSet['quantity'] < $intMinimumQuantity) {
             Message::addInfo(sprintf($GLOBALS['TL_LANG']['ERR']['productMinimumQuantity'], $objProduct->name, $intMinimumQuantity));
             $arrSet['quantity'] = $intMinimumQuantity;
         }
     }
     $arrSet['tstamp'] = time();
     foreach ($arrSet as $k => $v) {
         $objItem->{$k} = $v;
     }
     $objItem->save();
     $this->tstamp = time();
     // !HOOK: additional functionality when adding product to collection
     if (isset($GLOBALS['ISO_HOOKS']['postUpdateItemInCollection']) && is_array($GLOBALS['ISO_HOOKS']['postUpdateItemInCollection'])) {
         foreach ($GLOBALS['ISO_HOOKS']['postUpdateItemInCollection'] as $callback) {
             $objCallback = \System::importStatic($callback[0]);
             $objCallback->{$callback}[1]($objItem, $arrSet['quantity'], $this);
         }
     }
     return true;
 }