Advertisement
Guest User

Untitled

a guest
Sep 16th, 2014
6
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.34 KB | None | 0 0
  1. class Product_ControllerDecorator extends Extension {
  2.  
  3.     public static $allowed_actions = array('AddMultipleToCartForm', 'addmultiple');
  4.    
  5.     /**
  6.    * Add to cart form for adding Multiple Products, to show on the Product page.
  7.    *
  8.    * @param Int $quantity
  9.    * @param String $redirectURL A URL to redirect to after the product is added, useful to redirect to cart page
  10.    */
  11.     function AddMultipleToCartForm($quantity = null, $redirectURL = null) {
  12.         $product = $this->owner->data();
  13.    
  14.         $fields = new FieldSet(
  15.             new HiddenField('ProductClass', 'ProductClass', $product->ClassName),
  16.             new HiddenField('ProductID', 'ProductID', $product->ID),
  17.             //new HiddenField('ProductVariationID', 'ProductVariationID', 0),
  18.             new HiddenField('Redirect', 'Redirect', $redirectURL)
  19.         );
  20.  
  21.         // Get a list of available variations for this product
  22.         $variations = $product->Variations();
  23.    
  24.         if ($variations && $variations->exists()) {
  25.             foreach ($variations as $variation) {
  26.                 $variationOptions = $variation->Options()->map('AttributeID', 'ID');
  27.                 if ($variation->isEnabled()) {
  28.                     if ($variation->InStock()) {
  29.                         $variationField[$variation->ID] = new FieldGroup();
  30.                         $variationField[$variation->ID]->addExtraClass('ProductVariation_' . $variation->ID);
  31.                         foreach ($variation->Options() as $option) {
  32.                             $variationField[$variation->ID]->push(new HiddenField('Options[' . $variation->ID . '][' . $option->AttributeID . ']', '', $option->ID, $quantity));
  33.                         }
  34.                         $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));
  35.                         $fields->push($variationField[$variation->ID]);
  36.                     } else {
  37.                         // Product is not in stock
  38.                         $variationField[$variation->ID] = new FieldGroup();
  39.                         $variationField[$variation->ID]->addExtraClass('ProductVariation_' . $variation->ID);
  40.                         $variationField[$variation->ID]->addExtraClass('not-in-stock');
  41.                         foreach ($variation->Options() as $option) {
  42.                             $variationField[$variation->ID]->push(new HiddenField('Options[' . $variation->ID . '][' . $option->AttributeID . ']', '', $option->ID, $quantity));
  43.                         }
  44.                         $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));
  45.                         $fields->push($variationField[$variation->ID]);
  46.                     }
  47.                 }
  48.             }
  49.         } else {
  50.             if ($product->InStock()) {
  51.                 $variationField = new FieldGroup();
  52.                 $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));
  53.                 $fields->push($variationField);
  54.             } else {
  55.                 // Variation is not in stock
  56.                 $variationField = new FieldGroup();
  57.                 $variationField->addExtraClass('not-in-stock');
  58.                 $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));
  59.                 $fields->push($variationField);
  60.             }          
  61.         }
  62.        
  63.         $actions = new FieldSet(
  64.             new FormAction('addmultiple', 'Add To Cart')
  65.         );
  66.         $validator = new RequiredFields();
  67.         $validator->setJavascriptValidationHandler('none');
  68.  
  69.         //Disable add to cart function when product out of stock
  70.         if (!$product->InStock()) {
  71.         //  $fields = new FieldSet(new LiteralField('ProductNotInStock', '<p class="message">Sorry this product is currently out of stock. Please check back soon.</p>'));
  72.             $actions = new FieldSet();
  73.         }
  74.        
  75.         $controller = Controller::curr();
  76.         $form = new Form($controller, 'AddMultipleToCartForm', $fields, $actions, $validator);
  77.         $form->disableSecurityToken();
  78.    
  79.         return $form;
  80.     }
  81.      
  82.     /**
  83.      * Add an item to the current cart ({@link Order}) for a given {@link Product}.
  84.      *
  85.      * @param Array $data
  86.      * @param Form $form
  87.      */
  88.       function addmultiple(Array $data, Form $form) {
  89.           debug::dump('submitting');die();
  90.  
  91.         $request = $request = $this->owner->getRequest();
  92.         $product = DataObject::get_by_id($request->requestVar('ProductClass'), $request->requestVar('ProductID'));
  93.  
  94.           debug::dump($product);die();
  95.        
  96.         $products = 0;
  97.         $productAdded = false;
  98.         foreach ($data['Quantity'] as $key => $quantity) {
  99.             if (isset($data['Options'][$key])) {
  100.                 if ($quantity > 0) {
  101.                     $productVariations = new DataObjectSet();
  102.                     $options = $data['Options'][$key];
  103.                     $variations = $product->Variations();
  104.                
  105.                     if ($variations && $variations->exists()) {
  106.                         foreach ($variations as $variation) {
  107.                          
  108.                           $variationOptions = $variation->Options()->map('AttributeID', 'ID');
  109.                           if ($options == $variationOptions && $variation->isEnabled()) {
  110.                             $productVariations->push($variation);
  111.                           }
  112.                         }
  113.                     }
  114.            
  115.                     CartControllerExtension::get_current_order()->addItem($product, $quantity, $productVariations);
  116.                     $productAdded = true;
  117.                 }
  118.             } else {
  119.                 if ($quantity > 0) {
  120.                     CartControllerExtension::get_current_order()->addItem($product, $quantity);
  121.                     $productAdded = true;                  
  122.                 }
  123.             }
  124.         }
  125.        
  126.         $redirectURL = $request->requestVar('Redirect');
  127.         if (!$productAdded) {
  128.             $message = 'You must enter a quantity for at least one product to add to your cart.';
  129.             $form->sessionMessage(
  130.                 $message,
  131.                 'bad'
  132.             );
  133.             if ($redirectURL && Director::is_site_url($redirectURL)) Director::redirect(Director::absoluteURL(Director::baseURL() . $redirectURL));
  134.             else Director::redirectBack();
  135.             return false;
  136.         } else {
  137.             //Show feedback if redirecting back to the Product page
  138.             if (!$request->requestVar('Redirect')) {
  139.               $cartPage = DataObject::get_one('CartPage');
  140.               $message = ($cartPage)
  141.                 ? 'These products were added to <a href="' . $cartPage->Link() . '">your cart</a>.'
  142.                 : "The product was added to your cart.";
  143.               $form->sessionMessage(
  144.                     $message,
  145.                     'good'
  146.                 );
  147.             }
  148.             $redirectURL = $request->requestVar('Redirect');
  149.             if ($redirectURL && Director::is_site_url($redirectURL)) Director::redirect(Director::absoluteURL(Director::baseURL() . $redirectURL));
  150.             else Director::redirectBack();
  151.           }
  152.       }
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement