public function testForm() { $controller = new Product_Controller($this->objFromFixture("Product", "socks")); $form = new AddProductForm($controller); $form->setMaximumQuantity(10); $this->markTestIncomplete("test can't go over max quantity"); $data = array('Quantity' => 4); $form->addtocart($data, $form); $this->markTestIncomplete('check quantity'); }
public function __construct($controller, $name = "VariationForm") { parent::__construct($controller, $name); $product = $controller->data(); $farray = array(); $requiredfields = array(); $attributes = $product->VariationAttributeTypes(); foreach ($attributes as $attribute) { $farray[] = $attribute->getDropDownField("Choose {$attribute->Label} ...", $product->possibleValuesForAttributeType($attribute)); $requiredfields[] = "ProductAttributes[{$attribute->ID}]"; } $fields = new FieldList($farray); if (self::$include_json) { $vararray = array(); if ($vars = $product->Variations()) { foreach ($vars as $var) { $vararray[$var->ID] = $var->AttributeValues()->map('ID', 'ID'); } } $fields->push(new HiddenField('VariationOptions', 'VariationOptions', json_encode($vararray))); } $fields->merge($this->Fields()); $this->setFields($fields); $requiredfields[] = 'Quantity'; $this->setValidator(new VariationFormValidator($requiredfields)); $this->extend('updateVariationForm'); }
public function __construct($controller, $name = "VariationForm") { parent::__construct($controller, $name); $product = $controller->data(); $farray = array(); $requiredfields = array(); $attributes = $product->VariationAttributeTypes(); foreach ($attributes as $attribute) { $attributeDropdown = $attribute->getDropDownField(_t('VariationForm.ChooseAttribute', "Choose {attribute} …", '', array('attribute' => $attribute->Label)), $product->possibleValuesForAttributeType($attribute)); if ($attributeDropdown) { $farray[] = $attributeDropdown; $requiredfields[] = "ProductAttributes[{$attribute->ID}]"; } } $fields = FieldList::create($farray); if (self::$include_json) { $vararray = array(); $query = $query2 = new SQLQuery(); $query->setSelect('ID')->setFrom('ProductVariation')->addWhere(array('ProductID' => $product->ID)); if (!Product::config()->allow_zero_price) { $query->addWhere('"Price" > 0'); } foreach ($query->execute()->column('ID') as $variationID) { $query2->setSelect('ProductAttributeValueID')->setFrom('ProductVariation_AttributeValues')->setWhere(array('ProductVariationID' => $variationID)); $vararray[$variationID] = $query2->execute()->keyedColumn(); } $fields->push(HiddenField::create('VariationOptions', 'VariationOptions', json_encode($vararray))); } $fields->merge($this->Fields()); $this->setFields($fields); $requiredfields[] = 'Quantity'; $this->setValidator(VariationFormValidator::create($requiredfields)); $this->extend('updateVariationForm'); }
/** * Add one of an item to a cart (Product Page) * * @see the addtocart function within AddProductForm class * @param SS_HTTPRequest $request * @param AjaxHTTPResponse $response * @param Buyable $buyable [optional] * @param int $quantity [optional] * @param AddProductForm $form [optional] */ public function updateAddProductFormResponse(&$request, &$response, $buyable, $quantity, $form) { if ($request->isAjax()) { if (!$response) { $response = $this->owner->getController()->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) $buyable->ID, 'internalItemID' => $buyable->InternalItemID, 'title' => $buyable->Title, 'url' => $buyable->URLSegment, 'categories' => $buyable->getCategories()->column('Title'), 'addLink' => $buyable->addLink(), 'removeLink' => $buyable->removeLink(), 'removeallLink' => $buyable->removeallLink(), 'setquantityLink' => $buyable->Item()->setquantityLink(), '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('updateAddProductFormResponseShopJsonResponse', $data, $request, $response, $buyable, $quantity, $form); $response->setBody(json_encode($data)); } }
/** * @param SS_HTTPRequest $request * @param AjaxHTTPResponse $response * @param AddProductForm $form [optional] */ public function updateCartFormResponse(&$request, &$response, $form = null) { if ($request->isAjax()) { if (!$response) { $response = $this->owner->getAjaxResponse(); } $this->setupRenderContexts($response); if (self::config()->show_ajax_messages) { $response->triggerEvent('statusmessage', array('content' => $form->Message(), 'type' => $form->MessageType())); $form->clearMessage(); } // Because ShoppingCart::current() calculates the order once and // then remembers the total, and that was called BEFORE the product // was added, we need to recalculate again here. Under non-ajax // requests the redirect eliminates the need for this but under // ajax the total lags behind the subtotal without this. ShoppingCart::curr()->calculate(); $response->pushRegion('CartFormAjax', $this->owner, array('Editable' => true)); } }