Advertisement
Guest User

Untitled

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