Example #1
0
 /**
  * @param $listingSID
  * @param $userSID
  */
 public function deleteCheckoutedListingFromShopCart($listingSID, $userSID)
 {
     $listingInfoCheckout = SJB_DB::query("SELECT `sid`,`product_info` FROM `listings` WHERE `sid` = ?n AND `checkouted` = 0 AND `complete` = 1", $listingSID);
     $listingProductInfo = unserialize($listingInfoCheckout[0]['product_info']);
     $shopCartProducts = SJB_ShoppingCart::getProductsInfoFromCartByProductSID($listingProductInfo['product_sid'], $userSID);
     if ($listingProductInfo['pricing_type'] == 'fixed') {
         $countCheckoutedListings = SJB_ListingDBManager::getNumberOfCheckoutedListingsByProductSID($listingProductInfo['product_sid'], $userSID);
         if (count($shopCartProducts) * $listingProductInfo['number_of_listings'] - ($countCheckoutedListings - 1) >= $listingProductInfo['number_of_listings']) {
             SJB_ShoppingCart::deleteItemFromCartBySID($shopCartProducts[0]['sid'], $userSID);
         }
     }
     if (isset($listingProductInfo['pricing_type']) && $listingProductInfo['pricing_type'] == 'volume_based') {
         $shopCartSIDMinNumberOfListings = '';
         $minNumberOfListings = '';
         foreach ($shopCartProducts as $shopCartProduct) {
             $shopCartProductInfo = unserialize($shopCartProduct['product_info']);
             if (empty($minNumberOfListings) || $minNumberOfListings > $shopCartProductInfo['number_of_listings']) {
                 $minNumberOfListings = $shopCartProductInfo['number_of_listings'];
                 $shopCartSIDMinNumberOfListings = $shopCartProduct['sid'];
             }
         }
         if ($minNumberOfListings == 1) {
             SJB_ShoppingCart::deleteItemFromCartBySID($shopCartSIDMinNumberOfListings, $userSID);
         } else {
             $shopCartProductInfo['number_of_listings'] = $minNumberOfListings - 1;
             SJB_ShoppingCart::updateItemBySID($shopCartSIDMinNumberOfListings, $shopCartProductInfo);
         }
     }
 }
Example #2
0
 /**
  * @param $itemSID
  * @param $userSID
  */
 public function findCheckoutedListingsByProduct($itemSID, $userSID)
 {
     $shopCartProduct = SJB_DB::query("SELECT `product_info` FROM `shopping_cart` WHERE `sid` = ?n", $itemSID);
     if (!empty($shopCartProduct)) {
         $productInfo = unserialize($shopCartProduct[0]['product_info']);
         $countCheckoutedListings = SJB_ListingDBManager::getNumberOfCheckoutedListingsByProductSID($productInfo['sid'], $userSID);
         if ($countCheckoutedListings != 0) {
             $serializedProductSIDForShopCart = '"sid";s:' . strlen($productInfo['sid']) . ':"' . $productInfo['sid'] . '";';
             $countOfOtherShopCartProducts = SJB_DB::queryValue("SELECT COUNT(`sid`) FROM `shopping_cart` WHERE `sid` != ?n AND `user_sid` = ?n AND `product_info` REGEXP '({$serializedProductSIDForShopCart})' ORDER BY `sid` ASC", $itemSID, $userSID);
             if ($productInfo['product_type'] == 'mixed_product' || isset($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'fixed') {
                 $limitCheckoutedListingsToDelete = $countCheckoutedListings - $countOfOtherShopCartProducts * $productInfo['number_of_listings'];
                 if ($limitCheckoutedListingsToDelete > 0) {
                     $this->deleteCheckoutedListingsByProduct($userSID, $productInfo['sid'], $limitCheckoutedListingsToDelete);
                 }
             }
             if (isset($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'volume_based') {
                 $maxAvailableListings = end($productInfo['volume_based_pricing']['listings_range_to']);
                 $shopCartProductsToUpdate = SJB_DB::query("SELECT `sid`,`product_info` FROM `shopping_cart` WHERE `sid` != ?n AND `user_sid` = ?n AND `product_info` REGEXP '({$serializedProductSIDForShopCart})' ORDER BY `sid` ASC", $itemSID, $userSID);
                 $limitCheckoutedListingsToDelete = $countCheckoutedListings - $countOfOtherShopCartProducts * $maxAvailableListings;
                 if ($limitCheckoutedListingsToDelete >= 0) {
                     foreach ($shopCartProductsToUpdate as $shopCartProductToUpdate) {
                         $shopCartProductInfo = unserialize($shopCartProductToUpdate['product_info']);
                         $shopCartProductInfo['number_of_listings'] = $maxAvailableListings;
                         SJB_ShoppingCart::updateItemBySID($shopCartProductToUpdate['sid'], $shopCartProductInfo);
                     }
                     if ($limitCheckoutedListingsToDelete > 0) {
                         $this->deleteCheckoutedListingsByProduct($userSID, $productInfo['sid'], $limitCheckoutedListingsToDelete);
                     }
                 } else {
                     foreach ($shopCartProductsToUpdate as $shopCartProductToUpdate) {
                         $shopCartProductInfo = unserialize($shopCartProductToUpdate['product_info']);
                         if ($limitCheckoutedListingsToDelete > end($shopCartProductInfo['volume_based_pricing']['listings_range_to'])) {
                             $limitCheckoutedListingsToDelete -= end($shopCartProductInfo['volume_based_pricing']['listings_range_to']);
                             $shopCartProductInfo['number_of_listings'] = $maxAvailableListings;
                         } else {
                             $shopCartProductInfo['number_of_listings'] = $limitCheckoutedListingsToDelete;
                         }
                         SJB_ShoppingCart::updateItemBySID($shopCartProductToUpdate['sid'], $shopCartProductInfo);
                     }
                 }
             }
         }
     }
 }
Example #3
0
 /**
  * @param int $currentUserID
  * @param int $productSID
  * @return bool|int|mixed
  */
 public function proceedToCheckout($currentUserID, $productSID)
 {
     $errors = array();
     $productInfo = SJB_ProductsManager::getProductInfoBySID($productSID);
     if (SJB_UserManager::isUserLoggedIn()) {
         $numberOfListings = SJB_ListingDBManager::getNumberOfCheckoutedListingsByProductSID($productSID, $currentUserID);
         $extraInfo = SJB_ProductsManager::getProductExtraInfoBySID($productSID);
         $shoppingCartProducts = SJB_ShoppingCart::getProductsInfoFromCartByProductSID($productSID, $currentUserID);
         if (!empty($shoppingCartProducts)) {
             if ($productInfo['product_type'] == 'mixed_product' || isset($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'fixed') {
                 if ($numberOfListings / (count($shoppingCartProducts) * $productInfo['number_of_listings']) > 1) {
                     SJB_ShoppingCart::addToShoppingCart($productInfo, $currentUserID);
                 }
             }
             if (isset($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'volume_based') {
                 if ($numberOfListings / (count($shoppingCartProducts) * end($productInfo['volume_based_pricing']['listings_range_to'])) > 1) {
                     $productInfo['number_of_listings'] = 1;
                     $productObj = new SJB_Product($productInfo, $productInfo['product_type']);
                     $productObj->setNumberOfListings($productInfo['number_of_listings']);
                     $productInfo['price'] = $productObj->getPrice();
                     SJB_ShoppingCart::addToShoppingCart($productInfo, $currentUserID);
                 } else {
                     foreach ($shoppingCartProducts as $shoppingCartProduct) {
                         $unserializedProductInfoFromShopCart = unserialize($shoppingCartProduct['product_info']);
                         if ($unserializedProductInfoFromShopCart['number_of_listings'] < end($unserializedProductInfoFromShopCart['volume_based_pricing']['listings_range_to'])) {
                             $unserializedProductInfoFromShopCart['number_of_listings'] += 1;
                             SJB_ShoppingCart::updateItemBySID($shoppingCartProduct['sid'], $unserializedProductInfoFromShopCart);
                             break;
                         }
                     }
                 }
             }
         } else {
             if (!empty($extraInfo['pricing_type']) && $extraInfo['pricing_type'] == 'volume_based') {
                 $productInfo['number_of_listings'] = 1;
                 $productObj = new SJB_Product($productInfo, $productInfo['product_type']);
                 $productObj->setNumberOfListings($productInfo['number_of_listings']);
                 $productInfo['price'] = $productObj->getPrice();
             }
             SJB_ShoppingCart::addToShoppingCart($productInfo, $currentUserID);
         }
     } else {
         $products = SJB_Session::getValue('products');
         if (isset($products)) {
             foreach ($products as $addedProduct) {
                 $addedProductInfo = unserialize($addedProduct['product_info']);
                 if ($addedProductInfo['user_group_sid'] != $productInfo['user_group_sid']) {
                     $errors[] = 'You are trying to add products of different User Groups in your Shopping Cart. You сan add only products belonging to one User Group. If you want to add this product in the Shopping Cart please go back to the Shopping Cart and remove products of other User Groups.';
                     break;
                 }
             }
         }
         if (!$errors) {
             $id = time();
             $products[$id]['product_info'] = serialize($productInfo);
             $products[$id]['sid'] = $id;
             $products[$id]['user_sid'] = 0;
             SJB_Session::setValue('products', $products);
         }
     }
     if (!$errors) {
         SJB_HelperFunctions::redirect(SJB_System::getSystemsettings('SITE_URL') . '/shopping-cart/');
     }
 }