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'];
} 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)); } } }