public function setUpOnce() { if (!ShoppingCart_Controller::has_extension('ShoppingCartAjax')) { ShoppingCart_Controller::add_extension('ShoppingCartAjax'); } if (!VariationForm::has_extension('ShoppingCartAjax')) { VariationForm::add_extension('ShoppingCartAjax'); } if (!Controller::has_extension('AjaxControllerExtension')) { Controller::add_extension('AjaxControllerExtension'); } parent::setUpOnce(); }
/** * Update the variations of a product (Cart Page) * * @see 'addtocart' function of VariationForm ($this->owner) * @param SS_HTTPRequest $request * @param AjaxHTTPResponse $response * @param Buyable $variation [optional] * @param int $quantity [optional] * @param VariationForm $form [optional] */ public function updateVariationFormResponse(&$request, &$response, $variation = null, $quantity = 1, $form = null) { if ($request->isAjax()) { if (!$response) { $response = $this->owner->getResponse(); } $response->removeHeader('Content-Type'); $response->addHeader('Content-Type', 'application/json; charset=utf-8'); $shoppingcart = ShoppingCart::curr(); $shoppingcart->calculate(); // recalculate the shopping cart $data = array('id' => (string) $variation->ID, 'message' => array('content' => $form->Message(), 'type' => $form->MessageType())); $form->clearMessage(); // include totals if required if ($shoppingcart) { $data['subTotal'] = $shoppingcart->SubTotal(); $data['grandTotal'] = $shoppingcart->GrandTotal(); } $this->owner->extend('updateVariationFormResponseShopJsonResponse', $data, $request, $response, $variation, $quantity, $form); $response->setBody(json_encode($data)); } }