/** * @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; }