Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Product_ControllerDecorator extends Extension {
- function extraStatics() {
- return array(
- 'allowed_actions' => array('AddMultipleToCartForm', 'addmultiple')
- );
- }
- /**
- * Add to cart form for adding Multiple Products, to show on the Product page.
- *
- * @param Int $quantity
- * @param String $redirectURL A URL to redirect to after the product is added, useful to redirect to cart page
- */
- function AddMultipleToCartForm($quantity = null, $redirectURL = null) {
- $product = $this->owner->data();
- $fields = new FieldSet(
- new HiddenField('ProductClass', 'ProductClass', $product->ClassName),
- new HiddenField('ProductID', 'ProductID', $product->ID),
- //new HiddenField('ProductVariationID', 'ProductVariationID', 0),
- new HiddenField('Redirect', 'Redirect', $redirectURL)
- );
- // Get a list of available variations for this product
- $variations = $product->Variations();
- if ($variations && $variations->exists()) {
- foreach ($variations as $variation) {
- $variationOptions = $variation->Options()->map('AttributeID', 'ID');
- if ($variation->isEnabled()) {
- if ($variation->InStock()) {
- $variationField[$variation->ID] = new FieldGroup();
- $variationField[$variation->ID]->addExtraClass('ProductVariation_' . $variation->ID);
- foreach ($variation->Options() as $option) {
- $variationField[$variation->ID]->push(new HiddenField('Options[' . $variation->ID . '][' . $option->AttributeID . ']', '', $option->ID, $quantity));
- }
- $variationField[$variation->ID]->push(new NumericField('Quantity[' . $variation->ID . ']', '<div class="item-title">' . $product->Title . '</div><div class="item-options">' . $variation->SummaryOfOptions() . '</div><div class="item-price">'. ($variation->NonSpecialPrice > 0 ? '<span class="price-was"><strong>SALE!</strong> WAS: <strike>$'. $variation->NonSpecialPrice . '</strike><br /></span>NOW: ' : '') . $variation->Amount->Nice() . '</div>', $quantity));
- $fields->push($variationField[$variation->ID]);
- } else {
- // Product is not in stock
- $variationField[$variation->ID] = new FieldGroup();
- $variationField[$variation->ID]->addExtraClass('ProductVariation_' . $variation->ID);
- $variationField[$variation->ID]->addExtraClass('not-in-stock');
- foreach ($variation->Options() as $option) {
- $variationField[$variation->ID]->push(new HiddenField('Options[' . $variation->ID . '][' . $option->AttributeID . ']', '', $option->ID, $quantity));
- }
- $variationField[$variation->ID]->push(new LiteralField('Quantity[' . $variation->ID . ']', '<div class="item-title">' . $product->Title . '</div><div class="item-options">' . $variation->SummaryOfOptions() . '</div><div class="item-not-in-stock">Sold Out!</div><div class="item-price">'. ($variation->NonSpecialPrice > 0 ? '<span class="price-was"><strong>SALE!</strong> WAS: <strike>$'. $variation->NonSpecialPrice . '</strike><br /></span>NOW: ' : '') . $variation->Amount->Nice() . '</div>', $quantity));
- $fields->push($variationField[$variation->ID]);
- }
- }
- }
- } else {
- if ($product->InStock()) {
- $variationField = new FieldGroup();
- $variationField->push(new NumericField('Quantity[]', '<div class="item-title">' . $product->Title . '</div><div class="item-price">'. ($product->NonSpecialPrice > 0 ? '<span class="price-was"><strong>SALE!</strong> WAS: <strike>$'. $product->NonSpecialPrice . '</strike><br /></span>NOW: ' : '') . $product->Amount->Nice() . '</div>', $quantity));
- $fields->push($variationField);
- } else {
- // Variation is not in stock
- $variationField = new FieldGroup();
- $variationField->addExtraClass('not-in-stock');
- $variationField->push(new LiteralField('Quantity[]', '<div class="item-title">' . $product->Title . '</div><div class="item-not-in-stock">Sold Out!</div><div class="item-price">'. ($product->NonSpecialPrice > 0 ? '<span class="price-was"><strong>SALE!</strong> WAS: <strike>$'. $product->NonSpecialPrice . '</strike><br /></span>NOW: ' : '') . $product->Amount->Nice() . '</div>', $quantity));
- $fields->push($variationField);
- }
- }
- $actions = new FieldSet(
- new FormAction('addmultiple', 'Add To Cart')
- );
- $validator = new RequiredFields();
- $validator->setJavascriptValidationHandler('none');
- //Disable add to cart function when product out of stock
- if (!$product->InStock()) {
- // $fields = new FieldSet(new LiteralField('ProductNotInStock', '<p class="message">Sorry this product is currently out of stock. Please check back soon.</p>'));
- $actions = new FieldSet();
- }
- $controller = Controller::curr();
- $form = new Form($controller, 'AddMultipleToCartForm', $fields, $actions, $validator);
- $form->disableSecurityToken();
- return $form;
- }
- /**
- * Add an item to the current cart ({@link Order}) for a given {@link Product}.
- *
- * @param Array $data
- * @param Form $form
- */
- function addmultiple(Array $data, Form $form) {
- debug::dump('submitting');die();
- $request = $request = $this->owner->getRequest();
- $product = DataObject::get_by_id($request->requestVar('ProductClass'), $request->requestVar('ProductID'));
- debug::dump($product);die();
- $products = 0;
- $productAdded = false;
- foreach ($data['Quantity'] as $key => $quantity) {
- if (isset($data['Options'][$key])) {
- if ($quantity > 0) {
- $productVariations = new DataObjectSet();
- $options = $data['Options'][$key];
- $variations = $product->Variations();
- if ($variations && $variations->exists()) {
- foreach ($variations as $variation) {
- $variationOptions = $variation->Options()->map('AttributeID', 'ID');
- if ($options == $variationOptions && $variation->isEnabled()) {
- $productVariations->push($variation);
- }
- }
- }
- CartControllerExtension::get_current_order()->addItem($product, $quantity, $productVariations);
- $productAdded = true;
- }
- } else {
- if ($quantity > 0) {
- CartControllerExtension::get_current_order()->addItem($product, $quantity);
- $productAdded = true;
- }
- }
- }
- $redirectURL = $request->requestVar('Redirect');
- if (!$productAdded) {
- $message = 'You must enter a quantity for at least one product to add to your cart.';
- $form->sessionMessage(
- $message,
- 'bad'
- );
- if ($redirectURL && Director::is_site_url($redirectURL)) Director::redirect(Director::absoluteURL(Director::baseURL() . $redirectURL));
- else Director::redirectBack();
- return false;
- } else {
- //Show feedback if redirecting back to the Product page
- if (!$request->requestVar('Redirect')) {
- $cartPage = DataObject::get_one('CartPage');
- $message = ($cartPage)
- ? 'These products were added to <a href="' . $cartPage->Link() . '">your cart</a>.'
- : "The product was added to your cart.";
- $form->sessionMessage(
- $message,
- 'good'
- );
- }
- $redirectURL = $request->requestVar('Redirect');
- if ($redirectURL && Director::is_site_url($redirectURL)) Director::redirect(Director::absoluteURL(Director::baseURL() . $redirectURL));
- else Director::redirectBack();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement