public function add(Buyable $buyable, $quantity = 1, $filter = array())
{
$order = $this->findOrMake();
// If an extension throws an exception, error out
try {
$order->extend("beforeAdd", $buyable, $quantity, $filter);
} catch (Exception $exception) {
return $this->error($exception->getMessage());
}
if (!$buyable) {
return $this->error(_t("ShoppingCart.ProductNotFound", "Product not found."));
}
$item = $this->findOrMakeItem($buyable, $quantity, $filter);
if (!$item) {
return false;
}
if (!$item->_brandnew) {
$item->Quantity += $quantity;
} else {
$item->Quantity = $quantity;
}
// If an extension throws an exception, error out
try {
$order->extend("afterAdd", $item, $buyable, $quantity, $filter);
} catch (Exception $exception) {
return $this->error($exception->getMessage());
}
$item->write();
$this->message(_t("ShoppingCart.ItemAdded", "Item has been added successfully."));
return $item;
}