} $_SESSION['cart'] = isset($_SESSION['cart']) ? $_SESSION['cart'] : array(); $cart =& $_SESSION['cart']; if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($mode == 'update') { if (!empty($cart['products'])) { foreach ($cart['products'] as $_id => $product) { if (!empty($product['extra']['buy_together']) && !empty($product['prev_cart_id']) && $product['prev_cart_id'] != $_id) { foreach ($cart['products'] as $aux_id => $aux_product) { if (!empty($aux_product['extra']['parent']['buy_together']) && $aux_product['extra']['parent']['buy_together'] == $product['prev_cart_id']) { $cart['products'][$aux_id]['extra']['parent']['buy_together'] = $_id; $cart['products'][$aux_id]['update_c_id'] = true; } } } } foreach ($cart['products'] as $upd_id => $upd_product) { if (!empty($upd_product['update_c_id']) && $upd_product['update_c_id'] == true) { $new_id = fn_generate_cart_id($upd_product['product_id'], $upd_product['extra'], false); if (!isset($cart['products'][$new_id])) { unset($upd_product['update_c_id']); $cart['products'][$new_id] = $upd_product; unset($cart['products'][$upd_id]); // update taxes fn_update_stored_cart_taxes($cart, $upd_id, $new_id, false); } } } } } }
/** * Update buy together products * * @param array $cart Array of cart content and user information necessary for purchase * @param array $product_data Array of new products data * @param array $auth Array of user authentication data (e.g. uid, usergroup_ids, etc.) * @return boolean Always true */ function fn_buy_together_update_cart_products_post(&$cart, &$product_data, &$auth) { if (!empty($cart['products'])) { foreach ($cart['products'] as $_id => $product) { if (!empty($product['extra']['buy_together']) && !empty($product['prev_cart_id']) && $product['prev_cart_id'] != $_id) { foreach ($cart['products'] as $aux_id => $aux_product) { if (!empty($aux_product['extra']['parent']['buy_together']) && $aux_product['extra']['parent']['buy_together'] == $product['prev_cart_id']) { $cart['products'][$aux_id]['extra']['parent']['buy_together'] = $_id; $cart['products'][$aux_id]['update_c_id'] = true; } } } } foreach ($cart['products'] as $upd_id => $upd_product) { if (!empty($upd_product['update_c_id']) && $upd_product['update_c_id'] == true) { $new_id = fn_generate_cart_id($upd_product['product_id'], $upd_product['extra'], false); if (!isset($cart['products'][$new_id])) { unset($upd_product['update_c_id']); $cart['products'][$new_id] = $upd_product; unset($cart['products'][$upd_id]); foreach ($cart['product_groups'] as $key_group => $group) { if (in_array($upd_id, array_keys($group['products']))) { unset($cart['product_groups'][$key_group]['products'][$upd_id]); $cart['product_groups'][$key_group]['products'][$new_id] = $upd_product; } } // update taxes fn_update_stored_cart_taxes($cart, $upd_id, $new_id, false); } } } } return true; }
/** * Update cart products from passed products data * * @param array $cart Array of cart content and user information necessary for purchase * @param array $product_data Array of new products data * @param array $auth Array of user authentication data (e.g. uid, usergroup_ids, etc.) * @return boolean Always true */ function fn_update_cart_products(&$cart, $product_data, $auth) { /** * Actions before updating cart products * * @param array $cart Array of cart content and user information necessary for purchase * @param array $product_data Array of new products data * @param array $auth Array of user authentication data (e.g. uid, usergroup_ids, etc.) */ fn_set_hook('update_cart_products_pre', $cart, $product_data, $auth); if (is_array($cart['products']) && !empty($product_data)) { list($product_data, $cart) = fn_add_product_options_files($product_data, $cart, $auth, true); unset($product_data['custom_files']); foreach ($product_data as $k => $v) { if (!isset($cart['products'][$k]['extra']['exclude_from_calculate'])) { if (empty($v['extra'])) { $v['extra'] = array(); } if ($v['price'] < 0) { $v['price'] = 0; } unset($v['object_id']); $amount = fn_normalize_amount($v['amount']); $price = fn_get_product_price($v['product_id'], $amount, $auth); $v['extra'] = empty($cart['products'][$k]['extra']) ? array() : $cart['products'][$k]['extra']; $v['extra']['product_options'] = empty($v['product_options']) ? array() : $v['product_options']; $_id = fn_generate_cart_id($v['product_id'], $v['extra']); if (!isset($cart['products'][$_id])) { //if combination doesn't exist in the cart $cart['products'][$_id] = $v; $cart['products'][$_id]['company_id'] = !empty($cart['products'][$k]['company_id']) ? $cart['products'][$k]['company_id'] : 0; $_product = $cart['products'][$k]; fn_define_original_amount($v['product_id'], $_id, $cart['products'][$_id], $_product); fn_delete_cart_product($cart, $k); } elseif ($k != $_id) { // if the combination is exist but differs from the current $amount += $cart['products'][$_id]['amount']; fn_delete_cart_product($cart, $k); } if (empty($amount)) { fn_delete_cart_product($cart, $_id); continue; } else { $_product_options = !empty($v['product_options']) ? $v['product_options'] : array(); $cart['products'][$_id]['amount'] = fn_check_amount_in_stock($v['product_id'], $amount, $_product_options, $_id, !empty($cart['products'][$_id]['is_edp']) && $cart['products'][$_id]['is_edp'] == 'Y' ? 'Y' : 'N', !empty($cart['products'][$_id]['original_amount']) ? $cart['products'][$_id]['original_amount'] : 0, $cart); if ($cart['products'][$_id]['amount'] == false && !empty($_product)) { $cart['products'][$_id] = $_product; unset($_product); } } if ($k != $_id) { $cart['products'][$_id]['prev_cart_id'] = $k; // save stored taxes for products fn_update_stored_cart_taxes($cart, $k, $_id, true); } elseif (isset($cart['products'][$_id]['prev_cart_id'])) { unset($cart['products'][$_id]['prev_cart_id']); } $cart['products'][$_id]['stored_price'] = !empty($v['stored_price']) ? $v['stored_price'] : 'N'; if ($cart['products'][$_id]['stored_price'] == 'Y') { $cart['products'][$_id]['price'] = $v['price']; } $cart['products'][$_id]['stored_discount'] = !empty($v['stored_discount']) ? $v['stored_discount'] : 'N'; if ($cart['products'][$_id]['stored_discount'] == 'Y') { $cart['products'][$_id]['discount'] = $v['discount']; } } } } /** * Additional cart products updates from passed params * * @param array $cart Array of cart content and user information necessary for purchase * @param array $product_data Array of new products data * @param array $auth Array of user authentication data (e.g. uid, usergroup_ids, etc.) */ fn_set_hook('update_cart_products_post', $cart, $product_data, $auth); return true; }
unset($cart['products'][$k]); } if (empty($amount)) { fn_delete_cart_product($cart, $_id); continue; } else { $cart['products'][$_id]['amount'] = fn_check_amount_in_stock($v['product_id'], $amount, @$v['product_options'], $_id, !empty($cart['products'][$_id]['is_edp']) && $cart['products'][$_id]['is_edp'] == 'Y' ? 'Y' : 'N', !empty($cart['products'][$_id]['original_amount']) ? $cart['products'][$_id]['original_amount'] : 0, $cart); if ($cart['products'][$_id]['amount'] == false && !empty($_product)) { $cart['products'][$_id] = $_product; unset($_product); } } if ($k != $_id) { $cart['products'][$_id]['prev_cart_id'] = $k; // save stored taxes for products fn_update_stored_cart_taxes($cart, $k, $_id, true); } elseif (isset($cart['products'][$_id]['prev_cart_id'])) { unset($cart['products'][$_id]['prev_cart_id']); } if (@$v['stored_price'] == 'Y') { $cart['products'][$_id]['price'] = $v['price']; } if (@$v['stored_discount'] == 'Y') { $cart['products'][$_id]['original_discount'] = $v['discount']; $cart['products'][$_id]['discount'] = $v['discount']; } $cart['products'][$_id]['stored_discount'] = @$v['stored_discount']; $cart['products'][$_id]['stored_price'] = @$v['stored_price']; } } }