/** * If this order is still a cart, we save a copy of the items and * the subtotal in the session for the quick cart dropdown to be * usable even on static cached pages. * * @param OrderItem $item * @param Buyable $buyable * @param int $quantity */ protected function updateSessionCart($item, $buyable, $quantity) { if (!session_id() || !$buyable) { return; } $cart = !empty($_SESSION['Cart']) ? $_SESSION['Cart'] : array('Items' => array(), 'SubTotal' => 0.0); if ($quantity > 0) { if (!isset($cart['Items'][$buyable->ID])) { $prod = $item->Product(); $img = $prod ? $prod->Image() : null; $img = $img ? $img->getThumbnail() : null; // TODO: the key here should probably include the classname (or cover the diff bt Products and Variations) $cart['Items'][$buyable->ID] = array('ThumbURL' => $img ? $img->RelativeLink() : '', 'Link' => $prod ? $prod->RelativeLink() : '', 'Title' => $item->TableTitle(), 'SubTitle' => $item->hasMethod('SubTitle') ? $item->SubTitle() : '', 'UnitPrice' => $item->obj('UnitPrice')->Nice(), 'Quantity' => $quantity, 'RemoveLink' => $item->removeallLink()); } else { // update the quantity if it's already present $cart['Items'][$buyable->ID]['Quantity'] = $quantity; } } else { // remove the item if quantity is 0 unset($cart['Items'][$buyable->ID]); } // recalculate the subtotal $cart['SubTotal'] = $this->owner->obj('SubTotal')->Nice(); // and the total number of items $cart['TotalItems'] = 0; foreach ($cart['Items'] as $item) { $cart['TotalItems'] += $item['Quantity']; } $_SESSION['Cart'] = $cart; }
public function itemMatchesCriteria(OrderItem $item, Discount $discount) { $products = $discount->Products(); $itemproduct = $item->Product(true); //true forces the current version of product to be retrieved. if ($products->exists() && !$products->find('ID', $item->ProductID)) { return false; } return true; }
public function itemMatchesCriteria(OrderItem $item, Discount $discount) { $products = $discount->Products(); $itemproduct = $item->Product(true); // true forces the current version of product to be retrieved. if ($products->exists()) { foreach ($products as $product) { // uses 'DiscountedProductID' since some subclasses of buyable could be used as the item product (such as // a bundle) rather than the product stored. if ($product->ID == $itemproduct->DiscountedProductID) { return true; } } $this->error(_t('ProductsDiscountConstraint.MISSINGPRODUCT', "The required products are not in the cart.")); return false; } return true; }