/**
  * Sets current inventory product from Request.
  *
  * Action: setCurrCat
  *
  * @ finish the functions on this page
  */
 function onAction()
 {
     global $application;
     $request = $application->getInstance('Request');
     $prod_id = $request->getValueByKey('prod_id');
     if ($request->getValueByKey('del_info')) {
         if ($request->getValueByKey('del_info') == "true") {
             //                $this->pCatalog->setDisplayDeleteInfo();
         }
     }
     if ($prod_id != NULL) {
         $this->pCatalog->setCurrentProductID($prod_id);
         //
         $product_obj = new CProductInfo($this->pCatalog->getCurrentProductID());
         modApiFunc("CProductListFilter", "changeCurrentCategoryId", $product_obj->chooseCategoryID());
     }
     if ($request->getValueByKey('keep_editor_state') === null) {
         modApiFunc('Session', 'un_set', 'ProductInfoWYSIWYGEditorEnabled');
     }
 }
 /**
  * Adds the product to the cart.
  */
 function onAction()
 {
     global $application;
     $request = $application->getInstance('Request');
     if ($request->getValueByKey('returning') == 'yes' && modApiFunc('Session', 'is_Set', 'WishlistData')) {
         // for returning customers reading the data from the session
         $data = modApiFunc('Session', 'get', 'WishlistData');
         modApiFunc('Session', 'un_Set', 'WishlistData');
     } else {
         $prod_id = $request->getValueByKey('prod_id');
         $data = array('parent_entity' => 'product', 'entity_id' => $prod_id, 'options' => $request->getValueByKey('po'), 'qty' => $request->getValueByKey('quantity_in_cart'));
         // setting qty = 1 if not specified
         if (!$data['qty'] && $data['qty'] !== 0) {
             $data['qty'] = 1;
         }
         $options_sent = $request->getValueByKey('options_sent');
         $data['options_sent'] = $options_sent;
         if ($data['options'] == null) {
             $data['options'] = array();
         }
     }
     // if customer is not logged in keeping the data in session and
     // force customer to login...
     if (!modApiFunc('Customer_Account', 'getCurrentSignedCustomer')) {
         modApiFunc('Session', 'set', 'WishlistData', $data);
         $request = new Request();
         $request->setView(CURRENT_REQUEST_URL);
         $request->setAction('AddToWishlist');
         $request->setKey('returning', 'yes');
         modApiFunc('Session', 'set', 'toURLAfterSignIn', $request->getURL());
         $request = new Request();
         $request->setView('CustomerAccountHome');
         $application->redirect($request);
         return;
     }
     $wl_content = modApiFunc('Wishlist', 'getWishlistContent');
     if (is_array($wl_content)) {
         foreach ($wl_content as $wl) {
             if ($wl['ID'] == $data['entity_id'] && $this->compareOptions($data['options'], $wl['Options'])) {
                 modApiFunc('Wishlist', 'updateWishlistRecord', $wl['wl_id'], $wl['Quantity_In_Cart'] + $data['qty']);
                 $request = new Request();
                 $request->setView(CURRENT_REQUEST_URL);
                 $application->redirect($request);
                 return;
             }
         }
     }
     $result = modApiFunc('Cart', 'processPostedProductData', $data, $data['options_sent'], false);
     if (!$result['is_error']) {
         if (!empty($result['stock_discarded_by_warning'])) {
             modApiFunc('Session', 'set', 'StockDiscardedBy', $result['stock_discarded_by_warning']);
         }
         modApiFunc('Wishlist', 'addToWishlist', $result['data']);
         $request = new Request();
         $request->setView(CURRENT_REQUEST_URL);
         $application->redirect($request);
     } else {
         if ($result['discard_by'] != 'none') {
             modApiFunc('Session', 'set', 'OptionsDiscardedBy', $result['discard_by']);
         }
         if ($result['stock_discarded_by'] != 'none') {
             modApiFunc('Session', 'set', 'StockDiscardedBy', $result['stock_discarded_by']);
         }
         modApiFunc('Session', 'set', 'sentCombination', $result['data']['options']);
         $request = new Request();
         $request->setView('ProductInfo');
         $request->setAction('SetCurrentProduct');
         $request->setKey('prod_id', $prod_id);
         $request->setProductID($prod_id);
         $p = new CProductInfo($prod_id);
         $request->setCategoryID($p->chooseCategoryID());
         $application->redirect($request);
     }
 }
 /**
  * Adds the product to the cart.
  */
 function onAction()
 {
     global $application;
     $request = $application->getInstance('Request');
     $msgres = $application->getInstance("MessageResources", "messages");
     // checking if wishlist product is being added
     $wl_id = $request->getValueByKey('wl_id');
     if ($wl_id > 0) {
         $data = modApiFunc('Wishlist', 'getWishlistRecordCartData', $wl_id);
         if (!$data) {
             // invalid wishlist record...
             $request = new Request();
             $request->setView('Wishlist');
             $application->redirect($request);
             $this->setStatusError();
             $this->setMessage('Invalid wishlist record');
         }
         $options_sent = $data['options_sent'];
         $prod_id = $data['entity_id'];
     } else {
         $prod_id = $request->getValueByKey('prod_id');
         $data = array('parent_entity' => 'product', 'entity_id' => $prod_id, 'options' => $request->getValueByKey('po'), 'qty' => $request->getValueByKey('quantity_in_cart'), 'colorname' => $request->getValueByKey('colorname'));
         $options_sent = $request->getValueByKey('options_sent');
     }
     // setting qty=1 if quantity_in_stock is not specified
     if (!$data['qty'] && $data['qty'] !== 0) {
         $data['qty'] = 1;
     }
     if ($data['options'] == null) {
         $data['options'] = array();
     }
     $result = modApiFunc('Cart', 'processPostedProductData', $data, $options_sent);
     if (!$result['is_error']) {
         if (!empty($result['stock_discarded_by_warning'])) {
             modApiFunc('Session', 'set', 'StockDiscardedBy', $result['stock_discarded_by_warning']);
         }
         $added = modApiFunc('Cart', 'addToCart', $result['data']);
         $cc = modApiFunc('Cart', 'getCartContent');
         $cartPrice = '';
         $cart_id = $prod_id . "_" . modApiFunc("Product_Options", "getCombinationHash", $result['data']['options']);
         if (!empty($cc)) {
             foreach ($cc as $product) {
                 if ($product["CartID"] == $cart_id) {
                     $cartPrice = modApiFunc("Localization", "format", $product["CartItemSalePrice"], "currency");
                 }
             }
         }
         $this->setStatusSuccess();
         $p = new CProductInfo($prod_id);
         $message = array("<h2>" . $msgres->getMessage('CATALOG_PRODUCT_ADDED') . "</h2>" . "<div class='ajax_message_cart_prod_link'><a href='" . $p->getProductInfoLink($prod_id, $p->chooseCategoryID()) . "'>" . $p->getProductTagValue('name') . "</a></div>" . "<div class='ajax_message_cart_prod_qty'>" . $data['qty'] . "&nbsp;" . $msgres->getMessage('CATALOG_X') . "&nbsp;" . $cartPrice . "</div>");
         // if a wishlist product is being added...
         if ($wl_id > 0 && $added) {
             modApiFunc('Wishlist', 'removeFromWishlist', $wl_id);
             $message[] = 'This product was removed from your Wishlist';
         }
         $this->setMessage($message);
         $request = new Request();
         $request->setView(CURRENT_REQUEST_URL);
         $application->redirect($request);
     } else {
         $this->setStatusError();
         $message = array();
         if ($result['discard_by'] != 'none') {
             modApiFunc('Session', 'set', 'OptionsDiscardedBy', $result['discard_by']);
             $message[] = $msgres->getMessage($result['discard_by']);
         }
         if ($result['stock_discarded_by'] != 'none') {
             modApiFunc('Session', 'set', 'StockDiscardedBy', $result['stock_discarded_by']);
             $message[] = $msgres->getMessage($result['stock_discarded_by']);
         }
         modApiFunc('Session', 'set', 'sentCombination', $result['data']['options']);
         $this->setMessage($message);
         $request = new Request();
         $request->setView('ProductInfo');
         $request->setAction('SetCurrentProduct');
         $request->setKey('prod_id', $prod_id);
         $request->setProductID($prod_id);
         $p = new CProductInfo($prod_id);
         $request->setCategoryID($p->chooseCategoryID());
         $application->redirect($request);
     }
 }
 /**
  * Generates the link for menu item
  */
 function getMenuItemLink($item)
 {
     global $application;
     $result = '';
     switch ($item['item_type']) {
         case CMS_MENU_ITEM_TYPE_TEXT:
             $result = '';
             break;
         case CMS_MENU_ITEM_TYPE_URL:
         case CMS_MENU_ITEM_TYPE_EXTERNAL_URL:
             $result = $item['item_link'];
             break;
         case CMS_MENU_ITEM_TYPE_STATIC_PAGE:
             loadClass('CCMSPageInfo');
             $CMSPage = new CCMSPageInfo($item['item_link']);
             $result = $CMSPage->getCMSPageTagValue('link', array());
             break;
         case CMS_MENU_ITEM_TYPE_SYSTEM_PAGE:
             $r = new Request();
             $r->setView($application->getViewBySection($item['item_link']));
             if (_ml_strtolower($item['item_link']) == 'productlist') {
                 $r->setCategoryID($item['param1']);
                 $r->setAction('SetCurrCat');
                 $r->setKey('category_id', $item['param1']);
             }
             if (_ml_strtolower($item['item_link']) == 'productinfo') {
                 loadClass('CProductInfo');
                 $pr = new CProductInfo($item['param2']);
                 $item['param1'] = $pr->chooseCategoryID();
                 $r->setCategoryID($item['param1']);
                 $r->setProductID($item['param2']);
                 $r->setAction('SetCurrentProduct');
                 $r->setKey('prod_id', $item['param2']);
                 $r->setKey('category_id', $item['param1']);
             }
             $result = $r->getURL();
             break;
     }
     return $result;
 }