Example #1
0
function fn_get_price_by_selected_options($product_id, $product_data = array(), $selected_options = array())
{
    if (empty($product_data)) {
        $product = fn_get_product_data($product_id, $_SESSION['auth'], CART_LANGUAGE, '', true, true, true, true, $auth['area'] == 'A' && !empty($_REQUEST['action']) && $_REQUEST['action'] == 'preview');
    } else {
        $product = $product_data;
        $product_id = $product_data['product_id'];
    }
    $params = array('get_icon' => false, 'get_detailed' => false, 'get_options' => true, 'get_discounts' => true, 'get_features' => false);
    if (empty($selected_options)) {
        fn_gather_additional_product_data($product, $params['get_icon'], $params['get_detailed'], $params['get_options'], $params['get_discounts'], $params['get_features']);
        $selectedOptions = $product['selected_options'];
        //var_dump($product['product_options']);
        if ($_REQUEST['product_data'][$product_id]['product_options']) {
            $requestedSelectedOption = array();
            foreach ($_REQUEST['product_data'][$product_id]['product_options'] as $selectedOptionId => $selectedOptionVariantId) {
                if (intval($selectedOptionVariantId) > 0) {
                    $requestedSelectedOption[$selectedOptionId] = $selectedOptionVariantId;
                }
            }
            $selectedOptions = $requestedSelectedOption;
            $productArrayOtionsVariants = fn_get_options_variants_by_option_variant_id($product_id, $_REQUEST['product_data'][$product_id]['product_options']);
            foreach ($productArrayOtionsVariants as $optionId => $productOptionVariants) {
                if (!in_array($selectedOptions[$optionId], $productOptionVariants)) {
                    $selectedOptions[$optionId] = $productOptionVariants[0];
                }
            }
        }
        $wishlistOptionsVariantsSelected = array();
        if (isset($_REQUEST['wishlist_id'])) {
            $conditionWishListSql = db_quote(' ?:user_session_products.product_id = ?i AND ?:user_session_products.item_id=?i', $product_id, $_REQUEST['wishlist_id']);
            $optsVariantsWishListSerialized = db_get_field("SELECT ?:user_session_products.extra FROM ?:user_session_products WHERE " . $conditionWishListSql . " LIMIT 1");
            $optsVariantsWishListUnSerialized = unserialize($optsVariantsWishListSerialized);
            $wishlistOptionsVariantsSelected = $optsVariantsWishListUnSerialized['product_options'];
        }
        $selected_options = $selectedOptions;
        if (!empty($wishlistOptionsVariantsSelected)) {
            $selected_options = $wishlistOptionsVariantsSelected;
        }
    }
    $new_formula = fn_calculate_price($product_id, $product['product_options'], $selected_options, $putted_fields, true);
    $price = fn_calc_opz(fn_to_opz($new_formula));
    //var_dump($new_formula);echo"<br/>";
    //var_dump($product_id);echo" ----->>>>> ";var_dump($price);echo"<br/>-------<br/>";
    if ($price < $product['min_price_calc']) {
        $price = $product['min_price_calc'];
    }
    return $price;
}
     }
 }
 Registry::get('view')->assign('ls_shipping_estimation_date', date($ls_individual_estimation));
 Registry::get('view')->assign('ls_inventory_amount', $product['inventory_amount']);
 Registry::get('view')->assign('ls_amount', $product['amount']);
 Registry::get('view')->assign('product', $product);
 // Update the images in the list/grid templates
 if (!empty($_REQUEST['image'])) {
     foreach ($_REQUEST['image'] as $div_id => $value) {
         list($obj_id, $width, $height, $type) = explode(',', $value['data']);
         $images_data[$div_id] = array('obj_id' => $obj_id, 'width' => $width, 'height' => $height, 'type' => $type, 'link' => isset($value['link']) ? $value['link'] : '');
     }
     Registry::get('view')->assign('images', $images_data);
 }
 if (AREA == 'C') {
     $productArrayOtionsVariants = fn_get_options_variants_by_option_variant_id($product_id, $selected_options);
     Registry::get('view')->assign('product_array_otions_variants', $productArrayOtionsVariants);
     $fieldsOptionsVariantsLinksToProducts = "?:product_options.option_id, c.variant_id, d.product_id AS linked_prodict_id, c.set_by_user, p.amount";
     $conditionOptionsVariantsLinksToProducts = db_quote(' (?:product_options.product_id = ?i OR (?:product_options.product_id=0 AND n.product_id = ?i))', $product_id, $product_id);
     $joinOptionsVariantsLinksToProducts = db_quote(' LEFT JOIN ?:product_global_option_links n ON ?:product_options.option_id = n.option_id ');
     $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:product_option_variants c ON ?:product_options.option_id = c.option_id');
     $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:product_option_variants_link d ON c.variant_id = d.option_variant_id');
     $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:products p ON p.product_id = d.product_id');
     $optsVariantsLinksToProducts = db_get_array("SELECT " . $fieldsOptionsVariantsLinksToProducts . " FROM ?:product_options " . $joinOptionsVariantsLinksToProducts . " WHERE " . $conditionOptionsVariantsLinksToProducts . " GROUP BY c.variant_id, ?:product_options.option_id" . " ORDER BY ?:product_options.position, c.position");
     $optsVariantsLinksToProductsArray = array();
     $optionVariantsToProductArray = array();
     $optionVariantsToProductArrayStrings = array();
     $optionVariantsToProductArrayStrings = array();
     $options_variants_user_set_array = array();
     $linked_product_amount = array();
     $cart_user_id = $_SESSION['auth']['user_id'];
Example #3
0
     } else {
         return array(CONTROLLER_STATUS_REDIRECT, 'products.view?product_id=' . $_REQUEST['product_id']);
     }
 }
 $condition3 = db_quote(' a.product_id = ?i OR (c.product_id=0 AND n.product_id = ?i)', $_REQUEST['product_id'], $_REQUEST['product_id']);
 $join3 = db_quote(' JOIN ?:product_option_variants b ON b.variant_id = a.primary_variant_id');
 $join3 .= db_quote(' JOIN ?:product_options c ON c.option_id = b.option_id');
 $join3 .= db_quote(' LEFT JOIN ?:product_global_option_links n ON c.option_id = n.option_id ');
 $checkedVariants = db_get_fields("SELECT c.option_id FROM ?:product_option_variants_combinations a " . $join3 . " WHERE " . $condition3 . " GROUP BY c.option_id ORDER BY c.position");
 Registry::get('view')->assign('product_combination_options', $checkedVariants);
 Registry::get('view')->assign('wishlistOptionsVariantsSelected', $wishlistOptionsVariantsSelected);
 $selected_options = $product['selected_options'];
 if (!empty($wishlistOptionsVariantsSelected)) {
     $selected_options = $wishlistOptionsVariantsSelected;
 }
 $productArrayOtionsVariants = fn_get_options_variants_by_option_variant_id($_REQUEST['product_id'], $selected_options);
 //var_dump($productArrayOtionsVariants);
 Registry::get('view')->assign('product_array_otions_variants', $productArrayOtionsVariants);
 $fieldsOptionsVariantsLinksToProducts = "?:product_options.option_id, c.variant_id, d.product_id AS linked_prodict_id, d.product_nr, c.set_by_user, p.amount";
 $conditionOptionsVariantsLinksToProducts = db_quote(' (?:product_options.product_id = ?i OR (?:product_options.product_id=0 AND n.product_id = ?i))', $_REQUEST['product_id'], $_REQUEST['product_id']);
 $joinOptionsVariantsLinksToProducts = db_quote(' LEFT JOIN ?:product_global_option_links n ON ?:product_options.option_id = n.option_id ');
 $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:product_option_variants c ON ?:product_options.option_id = c.option_id');
 $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:product_option_variants_link d ON c.variant_id = d.option_variant_id');
 $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:products p ON p.product_id = d.product_id');
 $optsVariantsLinksToProducts = db_get_array("SELECT " . $fieldsOptionsVariantsLinksToProducts . " FROM ?:product_options " . $joinOptionsVariantsLinksToProducts . " WHERE " . $conditionOptionsVariantsLinksToProducts . " GROUP BY c.variant_id, ?:product_options.option_id" . " ORDER BY ?:product_options.position, c.position");
 $optsVariantsLinksToProductsArray = array();
 $optionVariantsToProductArray = array();
 $optionVariantsToProductArrayStrings = array();
 $options_variants_user_set_array = array();
 $linked_product_amount = array();
 $cart_user_id = $_SESSION['auth']['user_id'];
    }
}
if (($mode == 'customer_info' || $mode == 'checkout') && Registry::get('settings.General.min_order_amount_type') == 'only_products' && Registry::get('settings.General.min_order_amount') > $cart['subtotal']) {
    Registry::get('view')->assign('value', Registry::get('settings.General.min_order_amount'));
    $min_amount = Registry::get('view')->fetch('common/price.tpl');
    fn_set_notification('W', __('notice'), __('text_min_products_amount_required') . ' ' . $min_amount);
    return array(CONTROLLER_STATUS_REDIRECT, "checkout.cart");
}
//Cart Items
if ($mode == 'cart') {
    list($cart_products, $product_groups) = fn_calculate_cart_content($cart, $auth, Registry::get('settings.General.estimate_shipping_cost') == 'Y' ? 'A' : 'S', true, 'F', true);
    $ls_shipping_estimation = fn_ls_delivery_estimation_total($cart_products);
    $ls_shipping_estimation = $ls_shipping_estimation['total_estimation'];
    foreach ($cart_products as $key => $cart_product) {
        $cart_products[$key]['selected_options'] = $cart['products'][$key]['product_options'];
        $cart_products[$key]['productArrayOtionsVariants'] = fn_get_options_variants_by_option_variant_id($cart_product['product_id'], $cart_products[$key]['selected_options']);
    }
    fn_gather_additional_products_data($cart_products, array('get_icon' => true, 'get_detailed' => true, 'get_options' => true, 'get_discounts' => false));
    fn_add_breadcrumb(__('cart_contents'));
    fn_update_payment_surcharge($cart, $auth);
    $cart_products = array_reverse($cart_products, true);
    //var_dump($cart['applied_promotions']);echo"<br/>";
    $hiddenCategriesProductsIds = array();
    $hiddenCategriesProductsBoxesIds = array();
    foreach ($cart_products as $keyProduct => $productfinal) {
        if (!in_array(129, $productfinal['category_ids'])) {
            foreach ($productfinal['category_ids'] as $productfinalCategoryId) {
                $categoryCheck = db_get_field("SELECT category_id FROM ?:categories WHERE category_id=?i AND status='H'", $productfinalCategoryId);
                if ($categoryCheck) {
                    unset($cart_products[$keyProduct]);
                    $hiddenCategriesProductsIds[$keyProduct] = $productfinal;
function fn_look_through_variants_prices($product_id, $options, $variants)
{
    $product = fn_get_product_data($product_id, $_SESSION['auth'], CART_LANGUAGE, '', true, true, true, true, $auth['area'] == 'A' && !empty($_REQUEST['action']) && $_REQUEST['action'] == 'preview');
    $product['product_options'] = fn_get_product_options(array($product_id), CART_LANGUAGE);
    $product = fn_apply_options_rules($product);
    //var_dump($product['product_options']);
    $position = 0;
    $hashes = array();
    $combinations = fn_get_options_combinations($options, $variants);
    //var_dump($combinations);
    foreach ($combinations as $key => $combination) {
        $flagToUnsetArrayElement = 0;
        $productArrayOtionsVariants = fn_get_options_variants_by_option_variant_id($product_id, $combination);
        foreach ($combination as $optionId => $variantId) {
            if ($productArrayOtionsVariants[$optionId] && !in_array($variantId, $productArrayOtionsVariants[$optionId])) {
                $flagToUnsetArrayElement = 1;
            }
        }
        if ($flagToUnsetArrayElement == 1) {
            unset($combinations[$key]);
        }
    }
    //var_dump($combinations);
    if (!empty($combinations)) {
        foreach ($combinations as $combination) {
            $_data = array();
            $_data['product_id'] = $product_id;
            $_data['combination_hash'] = fn_generate_cart_id($product_id, array('product_options' => $combination));
            if (array_search($_data['combination_hash'], $hashes) === false) {
                $hashes[] = $_data['combination_hash'];
                $_data['combination'] = fn_get_options_combination($combination);
                $product['product_options'] = fn_get_selected_product_options($product['product_id'], $combination, CART_LANGUAGE);
                $product = fn_apply_options_rules($product);
                $_data['price'] = fn_calculate_price_of_a_product($product, $combination);
                $old_data = db_get_row("SELECT combination_hash, price " . "FROM ?:product_options_inventory_prices " . "WHERE product_id = ?i AND combination_hash = ?i AND temp = 1", $product_id, $_data['combination_hash']);
                /**
                 * Changes data before update combination
                 *
                 * @param array $combination Array of combination data
                 * @param array $data Combination data to update
                 * @param int $product_id Product identifier
                 * @param int $amount Default combination amount
                 * @param array $options Array of options identifiers
                 * @param array $variants Array of option variants identifiers arrays in order corresponding to $options parameter
                 */
                db_query("REPLACE INTO ?:product_options_inventory_prices ?e", $_data);
                $combinations[] = $combination;
            }
            echo str_repeat('. ', count($combination));
        }
    }
}